Текстурирование триангулированного ландшафта без перерисовки вершин

Я делаю программу, отображающую трехмерную текстурированную местность. У меня проблемы с производительностью. Я рисую ландшафт и текстурирую его одновременно ->

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();

}

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


person EnricoGL    schedule 16.04.2014    source источник
comment
Вам было бы полезно использовать современный OpenGL. Вы используете устаревшие функции, которые не следует использовать без крайней необходимости. Погуглите glDrawArrays или glDrawElements.   -  person Jean-Simon Brochu    schedule 16.04.2014


Ответы (1)


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

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

person Ben    schedule 16.04.2014