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中的正交投影和纹理坐标的主要内容,如果未能解决你的问题,请参考以下文章
Android应用开发 OpenGL ES -- 透视投影 和 正交投影
使用 OpenGL 进行正交投影以及如何实现相机或物体在空间中的移动