使用GL_TRIANGLES绑定纹理

时间:2014-02-16 13:31:15

标签: opengl render gl-triangle-strip

过去我曾经将纹理绑定到QUADS,然后用它渲染它们。如果我有一个动画,我必须将图像的特定部分绑定到四边形,那么我只需要使用通用坐标[0..1],那就是全部。

问题是现在我正在尝试使用openGL,我已经看到GL_QUADS被弃用了,现在我看到的所有东西都是用TRIANGLES渲染的。我的问题是我不知道如何使用三角形绑定纹理。

由于

2 个答案:

答案 0 :(得分:4)

以下是如何将纹理绑定到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);

答案 1 :(得分:0)

而不是单个四边形,将四边形分成两个三角形,类似于在对角线上切割四边形。存在很多示例,最近在stackoverflow中的讨论如下:

Index Buffer Object and UV Coordinates don't play nice