Assimp 无法加载 PLY 模型的顶点颜色
Assimp cannot load vertices color of PLY model
我在 windows 上使用 assimp3.0 和 OpenGL。我尝试通过以下几行加载和显示层模型:
Assimp::Importer importer;
const aiScene* scene = NULL;
scene = importer.ReadFile('filename', 0);
我用 scene->mMeshes[0]->mVertices
构建了顶点缓冲区,用 scene->mMeshes[0]->mColors
构建了颜色缓冲区
但是,当我调试代码时,只有 scene->mMeshes[0]->mColors[0]
获得了颜色, scene->mMeshes[0]->mColors[1]
并且以下元素仍然为 NULL
以下是我写的一个简短的示例:
ply
format ascii 1.0
comment VCGLIB generated
element vertex 3
property float x
property float y
property float z
property uchar red
property uchar green
property uchar blue
property uchar alpha
element face 1
property list uchar int vertex_indices
end_header
0.0 0.0 0.0 219 227 248 255
1.0 0.0 0.0 220 230 212 255
2.0 0.0 2.0 160 122 221 255
3 0 1 2
目前在想是不是importer.ReadFile(pFile,pFlags)
的pFlags参数错误导致的。
谁能帮我看看哪里出了问题。
我想我理解了这个问题。
您正在阅读这样的颜色
for (int i = 0; i < vertexCount; i++)
vertexColor = scene->mMeshes[0]->mColors[i];
但是,AssImp 可以存储多个顶点颜色通道,因此您应该这样阅读它。
for (int i = 0; i < vertexCount; i++)
vertexColor = scene->mMeshes[0]->mColors[0][i];
这将读取第 0 个顶点颜色通道中的颜色
我在 windows 上使用 assimp3.0 和 OpenGL。我尝试通过以下几行加载和显示层模型:
Assimp::Importer importer;
const aiScene* scene = NULL;
scene = importer.ReadFile('filename', 0);
我用 scene->mMeshes[0]->mVertices
构建了顶点缓冲区,用 scene->mMeshes[0]->mColors
构建了颜色缓冲区
但是,当我调试代码时,只有 scene->mMeshes[0]->mColors[0]
获得了颜色, scene->mMeshes[0]->mColors[1]
并且以下元素仍然为 NULL
以下是我写的一个简短的示例:
ply
format ascii 1.0
comment VCGLIB generated
element vertex 3
property float x
property float y
property float z
property uchar red
property uchar green
property uchar blue
property uchar alpha
element face 1
property list uchar int vertex_indices
end_header
0.0 0.0 0.0 219 227 248 255
1.0 0.0 0.0 220 230 212 255
2.0 0.0 2.0 160 122 221 255
3 0 1 2
目前在想是不是importer.ReadFile(pFile,pFlags)
的pFlags参数错误导致的。
谁能帮我看看哪里出了问题。
我想我理解了这个问题。
您正在阅读这样的颜色
for (int i = 0; i < vertexCount; i++)
vertexColor = scene->mMeshes[0]->mColors[i];
但是,AssImp 可以存储多个顶点颜色通道,因此您应该这样阅读它。
for (int i = 0; i < vertexCount; i++)
vertexColor = scene->mMeshes[0]->mColors[0][i];
这将读取第 0 个顶点颜色通道中的颜色