2010-05-04 117 views
2

我在Opengl写了一个2D游戏。我已经设置了正交投影,所以我可以很容易地知道四分屏在屏幕上的位置。问题是,我也希望能够将像素直接映射到纹理坐标,所以我还将正交变换(使用gluOrtho2d)应用到纹理。现在我可以使用整数和glTexCoord2i直接映射像素。问题是,在Google/Google阅读/询问后,我发现没有人真的知道(显然)glTexCoord2i的行为,但它的使用方式非常好。有些样品的测试代码,我写如下:opengl中的正交投影和纹理坐标

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(); 

那么,有没有与我在做什么什么问题,或者是我在做什么正确的吗?

回答

3

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

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

编辑:如果你想利用你的OpenGL代码为“一个新的水平”,你应该考虑删除即时模式渲染(glBegin/glEnd),而是建立顶点缓冲区,并与glDrawArrays吸引他们,这是后更快。

+0

哦谢谢!我知道顶点缓冲区,但在代码的这个早期阶段,我只是用它来测试。 =) – stelonix 2010-05-04 10:59:14