3

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

问题是现在我再次尝试使用 openGL,我已经看到 GL_QUADS 已被弃用,现在我看到的只是用 TRIANGLES 渲染。我的问题是我不知道如何使用三角形绑定纹理。

谢谢

4

2 回答 2

5

这是一个如何将纹理绑定到的示例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);
于 2014-02-16T15:42:35.180 回答
0

代替单个四边形,将四边形分成 2 个三角形,类似于将四边形沿对角线切割。存在很多示例,stackoverflow 中最近的讨论如下:

索引缓冲区对象和 UV 坐标效果不佳

于 2014-02-16T15:36:00.040 回答