OpenGL ES 1.1 Texel到像素映射使用纹理坐标不起作用,我做错了什么?

时间:2011-07-25 05:51:11

标签: opengl-es texture-mapping

修改

好的,这个问题已经过时了。

我在学习了一些OpenGL ES和测试后发现的是我的iPhone 4实际上是使用了双倍的分辨率图像。如果我没记错的话,我必须将OpenGL上下文比例点设置为2。

然后图像显得清晰。

希望这有助于其他人遇到同样的问题。

原始问题

我试图避免自己发布一个问题,并继续在互联网上搜索任何进一步的线索,为什么我的纹素到像素映射没有用,但OpenGL被证明是一个怪物的东西要正确

OpenGL开发环境:

iPhone 4
OpenGL ES 1.1
纵向模式下的屏幕宽度= 320像素(屏幕边界宽度)
纵向模式下的屏幕高度= 480像素(UIScreen绑定高度)
纹理图像宽度= 480像素(图像文件像素) 纹理图像高度= 320像素(图像文件像素)

您可以下载的资源:

Xcode项目:http://www.chewedon.com/OGL.zip
使用的纹理图像:http://img.photobucket.com/albums/v639/Ryu_Kaiser/serah.png

问题:

我一直在研究将纹素映射到像素的问题,以便绘制的最终纹理像Photoshop中一样清晰锐利,即像素和纹理纹理像素之间的像素完美映射。

据我所知,问题在于纹素中心并非位于像素中心的顶部。我也理解修复它的解决方案是将纹素移动半个纹素(或像素?),以便纹素直接位于顶部。

我已尝试设置我的纹理坐标数组,如下所示:

const GLfloat texCoords[] = 
 {
 0.0 + (0.5 / 480.0), 1.0 + (0.5 / 320.0), 
 1.0 + (0.5 / 480.0), 1.0 + (0.5 / 320.0), 
 0.0 + (0.5 / 480.0), 0.0 + (0.5 / 320.0), 
 1.0 + (0.5 / 480.0), 0.0 + (0.5 / 320.0)
 };

(同样,我也尝试过设置顶点坐标。根据我读过的一些例子,他们说你可以改变纹理坐标或顶点坐标)

如果我使用纹理坐标0.0到1.0运行我的应用程序,纹理在iPhone模拟器中看起来很完美,但如果我在iPhone上运行应用程序,纹理会有轻微模糊。

我做错了什么?

我是否需要将纹理坐标乘以屏幕宽度与高度宽高比系数?

我已经上传了我用来绘制OpenGL场景和我使用的纹理图像(上面链接)的Xcode项目。

干杯。

2 个答案:

答案 0 :(得分:0)

除了马库斯所说的你应该从1.0减去半个纹素,而不是添加。并对顶点位置执行相同操作(向下限添加一半,从上限减去一半)。您还应该确保纹理的宽度和高度用于纹素偏移,屏幕的宽度和高度用于位置偏移,而不是两者都有(当然,除非它们相等)。这应该给你相当像素完美的纹理映射。

答案 1 :(得分:0)

公然是纹理重采样问题。你的iphone可能正在将纹理重新采样到一个新的尺寸,n ^ 2。例如512x512。只使用尺寸为2的纹理,因为大多数图形硬件都需要这样做。