c++ - Assimp无法加载PLY模型的顶点颜色

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

我在 Windows 上使用 OpenGL 的 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 参数错误引起的。

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

最佳答案

我想我理解了这个问题。

您正在阅读这样的颜色

for (int i = 0; i < vertexCount; i++)
    vertexColor = scene->mMeshes[0]->mColors[i];

但是,AssImp 可以存储多个顶点颜色 channel ,因此您应该像这样阅读它。

for (int i = 0; i < vertexCount; i++)
    vertexColor = scene->mMeshes[0]->mColors[0][i];

这将读取第 0 个顶点颜色 channel 中的颜色

关于c++ - Assimp无法加载PLY模型的顶点颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39032385/

相关文章:

c++ - GLSL着色器即使没有明显的错误也不会编译

opengl - 如何查询 SSBO 结构的对齐/步幅?

three.js - 三人组 : compute projected coordinate in fragment shader

c++ - 指令集如何区分值和引用

c++ - 将字符指针作为模板类型传递

c++ - 检查字符串以匹配 Char 变量

c++ - 释放包含 malloc 字符串的 malloc 结构

linux - OpenGL:Linux 上的渲染时间限制

java - LWJGL透明度

c++ - GLSL - 给定顶点法线计算表面法线