2014-02-16 2 views
0

В прошлом я использовал привязку текстур к QUADS, а затем визуализацию их с ним. Если бы у меня была анимация, в которой я должен был привязать к квадрату конкретный раздел изображения, тогда мне просто пришлось использовать универсальные координаты [0..1], и все это.Связывание текстур с GL_TRIANGLES

Проблема теперь в том, что я пытаюсь снова с openGL, я видел, что GL_QUADS устарели, и теперь все, что я вижу, передается с помощью TRIANGLES. Моя проблема в том, что я не знаю, как связать текстуры с помощью треугольников.

Благодаря

ответ

2

Вот пример того, как можно связать текстуры в GL_TRIANGLE_STRIP

float verts[] = { 
    0, 0, 
    w, 0, 
    0, h, 
    w, h, 
}; 

const float texcoord[] = { 
    u1 + 0 , v1 + v2, 
    u1 + u2, v1 + v2, 
    u1 + 0 , 0 + v2, 
    u1 + u2, 0 + v2 
}; 

/* 
1. uv(0,1) +-----+ 2. uv(1,1) 
       | /| 
       | /| 
       |/| 
       |/ | 
       |/ | 
3. uv(0,0) +-----+ 4. uv(1,0) 
*/ 

И вы можете использовать его как просто как

glEnable(GL_TEXTURE_2D); 

glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 

glTexCoordPointer(2, GL_FLOAT, 0, tex_coord); 
glVertexPointer(2, GL_FLOAT, 0, verts); 

glBindTexture(GL_TEXTURE_2D, texture_id); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

glDisable(GL_TEXTURE_2D); 
+0

Ваш пример - okey, но код использует устаревшие функции. Вместо этого следует использовать 'glVertexAttribPointer'. –

0

Вместо одного четырехугольника, разделить четырехугольник на 2 треугольника, подобных режущих четверной через диагонали. Много примеров существует, недавнее обсуждение в StackOverflow ниже:

Index Buffer Object and UV Coordinates don't play nice