2

我正在用 Opengl 编写一个 2D 游戏。我已经设置了正交投影,因此我可以很容易地知道四边形将在屏幕上的哪个位置结束。问题是,我还希望能够将像素直接映射到纹理坐标,所以我还对纹理应用了正交变换(使用 gluOrtho2d)。现在我可以直接使用整数和 glTexCoord2i 映射像素。问题是,在谷歌搜索/阅读/询问之后,我发现没有人真正知道(显然)glTexCoord2i 的行为,但它在我使用的方式上工作得很好。我编写的一些示例测试代码如下:

glBegin(GL_QUADS);
    glTexCoord2i(16,0);
    glVertex2f(X, Y);
    glTexCoord2i(16,16);
    glVertex2f(X, Y+32);
    glTexCoord2i(32, 16);
    glVertex2f(X+32, Y+32);
    glTexCoord2i(32, 0);
    glVertex2f(X+32, Y);
glEnd();

那么,我正在做的事情有什么问题吗,或者我正在做的事情是否正确?

4

1 回答 1

3

没有什么特别之处glTexCoord*i,只是glTexCoord为了方便起见采用整数参数的一种变体,这些值将由纹理变换以与所有其他 tex 坐标相同的方式进行变换。

如果你想以像素表示你的纹理坐标,你的代码看起来完全没问题。

编辑:如果您想将 OpenGL 编码提升到“下一个级别”,您应该考虑放弃立即模式渲染 ( glBegin/ glEnd),而是构建顶点缓冲区并使用 绘制它们glDrawArrays,这样会更快。

于 2010-05-04T06:10:16.757 回答