使用GL_TRIANGLES绑定纹理

3
过去我曾将纹理绑定到四边形上,然后用它进行渲染。如果我有一个动画,在其中需要将特定部分的图像绑定到四边形上,则只需使用通用坐标[0..1]即可。
问题是现在我再次尝试使用OpenGL,我看到GL_QUADS已经被弃用了,现在所有的东西都是用TRIANGLES渲染的。我的问题是我不知道如何使用三角形来绑定纹理。
谢谢
2个回答

6
这是一个例子,说明了如何将纹理绑定到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);

你的例子还可以,但是代码使用了已弃用的功能。应该使用glVertexAttribPointer代替。 - Bartek Banachewicz

0

不要使用单个四边形,将其分成两个三角形,类似于沿对角线切割四边形。有很多例子存在,最近在stackoverflow上进行了讨论:

索引缓冲对象和UV坐标不兼容


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接