我正在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();
那么,我正在做什么有什么问题,或者我正在做的是什么?
答案 0 :(得分:3)
glTexCoord*i
没有什么特别之处,它只是glTexCoord
的一个变体,为方便起见,它采用整数参数,这些值将通过纹理变换以与所有其他tex坐标相同的方式进行变换。 / p>
如果你想用像素表示你的纹理坐标,你的代码看起来就完全可以。
编辑:如果您想将OpenGL编码提升到“下一级”,则应考虑删除即时模式渲染(glBegin
/ glEnd
),而是构建顶点缓冲区并使用glDrawArrays
绘制它们,这样会更快。