2012-06-13 88 views
2

由于Core Graphics中的性能瓶颈,我试图在iOS上使用OpenGL EL来绘制2D场景,但OpenGL以令人难以置信的低分辨率渲染我的图像。OpenGL纹理以非常低的质量呈现

下面是我使用(在Xcode)图像的一部分:

enter image description here

和OpenGL的纹理渲染(在模拟器):

enter image description here

我使用的是苹果公司的Texture2D从PNG创建纹理,然后将其绘制到屏幕上。正如Apress的“Beginning iPhone Development”一书中推荐的,我正在使用Ortho投影来观察场景。该图像恰好是屏幕的确切大小,并按此方式绘制(我没有在上面的屏幕截图中看到完整图像)。我没有在模型上使用任何变换,因此绘制图像应该不会导致子像素渲染。

我很高兴发布代码示例,但认为我会在没有简单解释的情况下开始。

为什么使用这种方法图像会失去如此多的质量?我错过了我的环境设置中的一个步骤吗?我简要阅读了关于纹理效果更好的两个幂的大小 - 在iPhone上处理这个问题?我还阅读了多重抽样,但我不确定这是否相关。

编辑:更新屏幕截图以减轻混淆。

+0

你使用mip-mapping吗?编辑:看起来像纹理刚被切割,所以这可能意味着你正在使用的纹理坐标不能使整个纹理呈现在该四边形上,所以它看起来像在你的图像中“放大”。是一个真正的截图或只是手动?它看起来很奇怪......不能想到这样的渲染是可能的。也许尝试一个明确的256x256纹理并显示结果? – Rookie

+0

我担心我的截图会令人困惑。他们只是手动截图。我的图像是在屏幕上绘制的,它是图像的确切尺寸,所以是的,整个纹理应该被渲染。 –

+1

什么是图像的宽度/高度?无论如何,你总是应该使用两种纹理的力量。你可以从显示你正在使用的纹理坐标和顶点坐标开始。同时显示整个纹理,以防万一,并使用一些清晰的纹理(而不是砂纹理等难以看到边缘)。 – Rookie

回答

0

我仍然不完全明白为什么我的代码存在质量问题,但我设法解决了这个问题。我最初使用的是由Apress的书“Beginning iPhone 4 Development”制作人提供的OpenGLES2DView类,我怀疑这个代码中的问题存在。然后我遇到this tutorial这表明我使用GLKit代替。 GLKit允许我做我想要的东西!

学到了一些教训:

  1. 在上面链接教程使用GLKit和精灵类,我的纹理不必是两个大国。 GLKit似乎处理这个罚款。

  2. 多重采样不是解决问题的办法。对于GLKit,在渲染2D图形时,使用多重抽样看起来没有任何效果(在我眼中)。

谢谢所有试图帮助的人。

+0

您是否尝试过使用非GLKit系统的两种纹理功能?这是如何工作的?纹理必须始终是两个权力,我认为GLKit只是在内部使用一些纹理图集,所以它只是隐藏了你的问题。 – Rookie

+0

我的确使用了我的非GLKit系统,并且它在质量上似乎没有什么不同。这个问题几乎肯定在我的代码中的其他地方。 –