2010-12-01 70 views
0

當解析帶有頂點和頂點面的.obj文件時,很容易將頂點傳遞給着色器,並使用頂點面使用glDrawElements。.obj中的面孔如何工作?

當解析具有頂點和紋理座標的.obj文件時,會出現另一種類型的面部:紋理座標面。

顯示紋理時,除了加載圖像,綁定它們並將紋理座標傳遞到解析器之外,如何使用紋理座標面? 它們與頂點面不同,我假設紋理座標面在顯示紋理時有目的嗎?

問候尼克拉斯

回答

0

不知道你問什麼,但如果我理解正確的話,你想知道你如何存儲數據的紋理座標來呈現質感的3D對象。如果是這樣,你存儲你的頂點正常的TextureCoordinate數據在交錯格式,象下面這樣:

vertexX vertexY vertexZ normalX normalY normalZ textureX textureY textureZ 

一旦你有這些數組,然後創建指針數組的不同部分,並呈現如下圖所示:

glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_NORMAL_ARRAY); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 

glVertexPointer(3, GL_FLOAT, sizeof(vertexArray[0])*9, &vertexArray[0]); 
glNormalPointer(3, GL_FLOAT, sizeof(vertexArray[0])*9, &vertexArray[3]); 
glTexCoordPointer(GL_FLOAT, sizeof(vertexArray[0])*9, &vertexArray[6]); 

glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_SHORT, &indices[0]); 

至少我是這麼做的。可能有更好的辦法,如果有的話,我很樂意知道。

+0

嗨。首先,我的問題是關於Opengl ES 2.對不準確的。但是我真正想知道的是索引部分,在.obj文件中有3種類型的索引。頂點面,紋理座標面和法線面。爲了能夠正確地映射紋理,我相信我也必須使用紋理座標面。 – tyuip 2010-12-01 21:15:08