Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用GLDraweElements从WRL(VRML)文件中绘制对象_C++_Opengl_Freeglut - Fatal编程技术网

C++ 使用GLDraweElements从WRL(VRML)文件中绘制对象

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

我正在尝试使用OpenGL对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_顶点_数组)

并建立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_三角带
有时可以使用,但需要一些设置工作。您必须正确地构建索引列表,并执行所有操作。