opengl - 在 OpenGL 中结合顶点数组和纹理

标签 opengl opengl-3

我正在尝试使用顶点数组来绘制一个相当大的网格,其中包含大量顶点。纹理已经从这些中确定,并且很容易沿着以下线条在即时模式下绘制:

glBegin(GL_TRIANGLES) {
  for ( int faceIdx = 0; faceIdx < nFaces; ++faceIdx )
     glVertex3fv(&vertexArray[vIdx]);
     glTexCoord2fv(&texCoord[vIdx++]);
     glVertex3fv(&vertexArray[vIdx]);
     glTexCoord2fv(&texCoord[vIdx++]);      
     glVertex3fv(&vertexArray[vIdx]);
     glTexCoord2fv(&texCoord[vIdx++]);  
  }   
} 
glEnd();

然而,为了可读性、速度和其余部分,我想使用顶点数组(以转移到 VBO)。有没有办法将单个顶点多次放入数组?

据我所知,目前有必要指定网格的每个顶点,因为它出现在网格的一个面上,因为每个顶点都标识为多个纹理坐标(纹理是从真实世界的图像中捕获的)对象网格近似),即我的顶点/tex coord 数组读起来好像我在立即模式下填充它。

有没有办法使用顶点数组,同时指定纹理坐标,而不使用冗余(我的意思是重复)顶点?

最佳答案

单个顶点由构成该单个顶点的所有属性组成。因此,共享相同位置但具有不同纹理坐标的两个顶点在概念上是不同的顶点。所以不,没有简单的方法可以为不同的 texCoords 重复顶点位置。

但通常这种顶点重复只在一些罕见的区域是必要的(比如锋利的边缘,因为不同的法线,或者在你的情况下是纹理接缝)。那么你所有的脸角真的有不同的 texCoords 吗?也许你可以稍微预处理一下你的数据并找到共享位置的相邻人脸 texCoords,因此可以共享顶点。如果许多顶点的情况并非如此,而您最终只得到一小部分重复的顶点,我会感到惊讶。

关于opengl - 在 OpenGL 中结合顶点数组和纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7285492/

相关文章:

OpenGL 如何一次绑定(bind)(数万个)数千个纹理?

c++ - 对符号 'glFrontFace' 的 undefined reference

python - 小行星程序使用间接绘制,glMultiDrawArraysIndirect不渲染并绘制空白

opengl - opengl 3.3 后处理效果的高效下采样

c++ - 在 OpenGL 中使用 Wu 算法的数字微分分析仪

java - OpenGL:单个顶点缓冲区中的两个球体

c++ - 为什么我总是使用 openGL 2.1 版?[openGL/SDL]

performance - OpenGL低级性能问题

c++ - 计算第三人称摄像机的位置

c++ - 不断向 glBufferData 添加新点的最佳方法是什么?