【问题标题】:Assimp cannot load vertices color of PLY modelAssimp 无法加载 PLY 模型的顶点颜色
【发布时间】:2016-12-26 05:19:31
【问题描述】:

我在带有 OpenGL 的 Windows 上使用 assimp3.0。我尝试通过以下几行加载和显示层模型:

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参数错误造成的。

谁能帮我找出哪一部分出了问题。

【问题讨论】:

  • 在 ReadFile 方法中尝试将 pFlags 作为 aiProcessPreset_TargetRealtime_Quality 发送。但是,在这种情况下应该没关系。
  • 我试过了,但是除了第一个之外,它仍然不会加载顶点的颜色信息。

标签: c++ opengl glsl assimp ply-file-format


【解决方案1】:

我想我理解了这个问题。

你正在阅读这样的颜色

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 个顶点颜色通道中的颜色

【讨论】:

  • 我知道 mColors 是一个 vector3d 数组。问题是只有 mColors[0] 得到了正确的值 say..[0.9,0.8,0.9],但是 mColors[1] 得到了 NULL 并且对于以下空格也是一样的..
  • 读取这样的值。 mColors[0][0], mColors[0][1], mColors[0][2], mColors[0][3], mColors[0][4], ... , mColors[0][n ] 其中 n 是顶点数。层中有一个顶点颜色通道,因此所有颜色值都在二维数组之外
猜你喜欢
  • 2019-11-02
  • 2021-07-17
  • 2018-05-11
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多