Текстурирование треугольной местности без перерисовывания вершин

Я делаю программу для отображения 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();

}

Используя этот метод, каждый раз, когда я рисую новый треугольник, я повторяю две вершины следующей за ним.
Как я могу нарисовать текстурированную местность без необходимости повторять вершины треугольников каждый раз?

0

Решение

Индексирование вершин. Большая часть вашего примера больше не действительна opengl. Я бы порекомендовал изучить современный opengl, так как кажется, что вы обеспокоены эффективностью. Это позволит вам на самом деле индексировать вершины и сообщать opengl, какую вершину вы хотите нарисовать и когда.

Как говорит Жан-Саймон, ищите glDrawArrays, glDrawElements и буферные объекты.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]