2016-08-19 100 views
0

我在使用OpenGL的Windows上使用assimp3.0。我試圖加載和以下行顯示層模型:Assimp無法加載PLY模型的頂點顏色

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 下面是一個短層例如II寫道:

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參數引起的。

任何人都可以幫我弄清楚哪個部分出了問題。

+0

在ReadFile的方法嘗試發送pFlags作爲aiProcessPreset_TargetRealtime_Quality。但是,在這種情況下應該沒有關係。 – codetiger

+0

我試過了,但它仍然不會加載第一個頂點以外的頂點的顏色信息。 –

回答

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頂點顏色通道

+0

我知道mColors是一個vector3d的數組。問題是隻有mColors [0]得到正確的值,例如.. [0.9,0.8,0.9],但mColors [1]得到NULL,並且對於以下空格是相同的。 –

+0

讀取像這樣的值。 mColors [0] [1],mColors [0] [2],mColors [0] [3],mColors [0] [4],...,mColors [0] [0] [0] [0] [0] [0] [0] n],其中n是頂點的數量。 層中有一個頂點顏色通道,所以所有的顏色值都在2維陣列的旁邊 – codetiger