我在使用OpenGL爲WRL(VRML)文件中描述的對象建模。使用glDrawElements從WRL(VRML)文件中繪製對象
我真的不關心解析文件,我想這部分將是相當簡單的。在這個階段,我只是試圖在一個頂點數組和索引數組中進行硬編碼,這樣我就可以很好地理解它是如何工作的,以便我可以概括任何WRL輸入文件。
我正在嘗試一個基本的盒子(矩形棱鏡)模型。目前,我有這個頂點數組:
GLfloat vertices[] = {
-0.200000, -0.025000, -0.050000,
-0.200000, -0.025000, 0.050000,
-0.200000, 0.025000, -0.050000,
-0.200000, 0.025000, 0.050000,
0.200000, -0.025000, -0.050000,
0.200000, -0.025000, 0.050000,
0.200000, 0.025000, -0.050000,
0.200000, 0.025000, 0.050000
};
與該指數數組:
GLubyte indices[] = {
7, 3, 5, -1, 5, 3, 1, -1,
6, 2, 7, -1, 7, 2, 3, -1,
4, 0, 6, -1, 6, 0, 2, -1,
5, 1, 4, -1, 4, 1, 0, -1,
2, 0, 3, -1, 3, 0, 1, -1,
4, 6, 5, -1, 5, 6, 7, -1
};
直接來自於WRL文件
Coordinate3 {point []}
和
IndexedFaceSet {coordIndex []}
。
我然後通過調用啓用的頂點數組功能:
glEnableClientState(GL_VERTEX_ARRAY);
,併成立了glVertexPointer:
glVertexPointer(3, GL_FLOAT, 0, vertices);
最後我用glDrawElements函數來繪製框:
glDrawElements(GL_POLYGON, 24, GL_UNSIGNED_BYTE, indices);
,然後關閉頂點數組功能:
glDisableClientState(GL_VERTEX_ARRAY);
所以在此之後,我希望要繪製一個框,當我使用glDrawElements(GL_POINTS, 24, GL_UNSIGNED_BYTE, indices);
它顯示爲epected在8個頂點什麼,如果正確的頂點與線連接,將代表期望的框(除了有一個點在中間,但是當我使用26作爲計數參數,然後在中間的點消失)
但是,當我使用GL_POLYGON或GL_LINE_LOOP在glDrawElements的第一個參數中,我得到垃圾。這8個頂點顯然存在,但他們以非常奇怪的方式聯合起來。
我很困惑現在,我甚至不知道我在做正確此。也許有人可以讓我在正確的方向至少?
謝謝,這項工作是否適用於更復雜的3D形狀,或者是否有更好的方法來渲染這些圖形? – jacobappleton 2012-01-28 02:37:18
這或多或少地表現了一切。有時可以使用'GL_TRIANGLE_STRIP',但它需要一些設置工作。你必須正確建立索引列表和一切。 – 2012-01-28 02:41:05