opengl中的正交投影和纹理坐标

Posted

技术标签:

【中文标题】opengl中的正交投影和纹理坐标【英文标题】:Orthogonal projection and texture coordinates in opengl 【发布时间】:2010-05-04 05:57:15 【问题描述】:

我正在用 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();

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

哦,谢谢!我知道顶点缓冲区,但在代码的早期阶段,我只是将其用于测试。 =)

以上是关于opengl中的正交投影和纹理坐标的主要内容,如果未能解决你的问题,请参考以下文章

在 OpenGL 的正交投影中使用纹理

Android应用开发 OpenGL ES -- 透视投影 和 正交投影

使用 OpenGL 进行正交投影以及如何实现相机或物体在空间中的移动

openGL - 正交投影矩阵

如何使用正交投影在 OpenGL Core 3.3 中绘制一个圆?

OpenGL中的正交投影问题