C++ 使用GLDraweElements从WRL(VRML)文件中绘制对象
我正在尝试使用OpenGL对WRL(VRML)文件中描述的对象建模 我并不真正关心解析文件,我认为这一部分相当简单。在这个阶段,我只是尝试硬编码一个顶点数组和索引数组,这样我就可以很好地理解它是如何工作的,这样我就可以推广到任何WRL输入文件 我首先尝试一个基本的长方体(矩形棱镜)模型。我目前有一个顶点数组:C++ 使用GLDraweElements从WRL(VRML)文件中绘制对象,c++,opengl,freeglut,C++,Opengl,Freeglut,我正在尝试使用OpenGL对WRL(VRML)文件中描述的对象建模 我并不真正关心解析文件,我认为这一部分相当简单。在这个阶段,我只是尝试硬编码一个顶点数组和索引数组,这样我就可以很好地理解它是如何工作的,这样我就可以推广到任何WRL输入文件 我首先尝试一个基本的长方体(矩形棱镜)模型。我目前有一个顶点数组: GLfloat vertices[] = { -0.200000, -0.025000, -0.050000, -0.200000, -0.025000, 0.0500
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_顶点_数组)代码>
并建立glVertexPointer:
glVertexPointer(3,GL_浮点,0,顶点)代码>
最后,我使用GLDrawerElements函数绘制框:
gld元素(GL_多边形,24,GL_无符号字节,索引)代码>
然后停用顶点阵列功能:
glDisableClientState(GL\u顶点\u数组)代码>
因此,在这之后,我希望绘制一个方框,当我使用gldrawerelements(GL_POINTS,24,GL_UNSIGNED_BYTE,index)时代码>它显示了8个顶点,如果正确的顶点与线连接,则表示期望的框(除了中间有一个点,但是当我使用26作为计数参数时,则中间点的点出现)
然而,当我在gldrawerelements的第一个参数中使用GL_POLYGON或GL_LINE_LOOP时,我得到了垃圾。8个顶点显然在那里,但它们以非常奇怪的方式连接在一起
我现在很困惑,我甚至不确定我做的是否正确。也许至少有人能把我引向正确的方向?矩形棱镜不是GL\u多边形。注意这个词的单数形式:多边形。在一个多边形中。矩形棱柱体由许多多边形组成,而不仅仅是一个多边形
你要做的是画一些GL\u三角形
。创建一个索引列表,显示组成长方体的每个三角形。这意味着每个长方体面由两个三角形组成,因此总共需要12个三角形。这意味着36个索引。谢谢,这对更复杂的3D形状也有效吗?还是有更好的方法来渲染这些形状?这或多或少就是渲染一切的方式<代码>GL_三角带
有时可以使用,但需要一些设置工作。您必须正确地构建索引列表,并执行所有操作。