c++ - 在不重绘顶点的情况下纹理化三角地形

标签 c++ opengl textures triangulation terrain

我正在制作一个程序来显示 3D 纹理地形。我有一些性能问题。我正在绘制地形并同时对其进行纹理化 ->

void Triangle::drawTriangle( int showTexture){

if (textureId!=0 && showTexture) glBindTexture(GL_TEXTURE_2D, textureId);    // Select Our Texture

glBegin( GL_TRIANGLES );
    if (textureId!=0 && showTexture)
         glTexCoord2d(((Point3DTexturable*)p1)->getU(), ((Point3DTexturable*)p1)->getV());
    glVertex3d(p1->getX(), p1->getY(), p1->getZ());

    if (textureId!=0 && showTexture)
           glTexCoord2d(((Point3DTexturable*)p2)->getU(), ((Point3DTexturable*)p2)->getV());
    glVertex3d(p2->getX() , p2->getY(), p2->getZ());

    if (textureId!=0 && showTexture)
           glTexCoord2d(((Point3DTexturable*)p3)->getU(), ((Point3DTexturable*)p3)->getV());
    glVertex3d(p3->getX() , p3->getY() , p3->getZ());
glEnd();

使用这种方法,每次我绘制一个新三角形时,我都会重复它旁边那个三角形的两个顶点。 如何绘制带纹理的地形而不必每次都重复三角形的顶点?

最佳答案

顶点索引。您的大部分示例不再有效的 opengl。我建议学习现代 opengl,因为您似乎很关心效率。这将允许您实际索引顶点,并告诉 opengl 您想要绘制什么顶点以及何时绘制。

正如 Jean-Simon 所说,查找 glDrawArrays、glDrawElements 和缓冲区对象。

关于c++ - 在不重绘顶点的情况下纹理化三角地形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23118538/

相关文章:

c++ - 按字母顺序和字符长度快速排序

opengl - 如何在片段着色器中将 gl_FragCoord 转换为世界空间点?

c++ - OpenGL将纹理四边形渲染为(0,0)的单个像素?

iphone - iPhone OpenGL ES 的基本 2D 纹理指南

android - 如何在 libgdx 中显示纹理的反射?

c++ - 为什么指向 int 的指针转换为 void* 而指向函数的指针转换为 bool?

c++ - 从 main 调用函数时出错

c++ - 请解释一下for循环索引的范围

c++ - 在保持纵横比的 openGL 中调整圆圈的大小

java - JOGL 的纹理加载