【发布时间】:2012-06-14 18:04:29
【问题描述】:
由于 Core Graphics 的性能瓶颈,我尝试在 iOS 上使用 OpenGL EL 来绘制 2D 场景,但 OpenGL 以极低的分辨率渲染我的图像。
这是我正在使用的图像的一部分(在 Xcode 中):
以及OpenGL的纹理渲染(在模拟器中):
我正在使用 Apple 的 Texture2D 从 PNG 创建纹理,然后将其绘制到屏幕上。按照 Apress 的“开始 iPhone 开发”一书中的建议,我正在使用 Ortho 投影直视场景。该图像恰好是屏幕的确切尺寸并且是这样绘制的(我没有在上面的屏幕截图中拍摄完整图像)。我没有在模型上使用任何变换,所以绘制图像应该不会导致亚像素渲染。
我很高兴发布代码示例,但如果没有简单的解释,我想我会开始。
为什么使用这种方法会损失如此多的图像质量?我在我的环境设置中错过了一步吗?我简要阅读了纹理在 2 的幂次方时表现更好的信息——这对 iPhone 有影响吗?我还阅读了有关多重采样的信息,但我不确定这是否相关。
编辑:更新屏幕截图以减轻混乱。
【问题讨论】:
-
你使用mip映射吗?编辑:看起来纹理刚刚被切割,所以这可能意味着您使用的纹理坐标不会使整个纹理呈现在该四边形上,因此它看起来像在您的图像中一样“放大”。这是一个真正的截图还是只是手动制作的?它看起来真的很奇怪......无法想象这样的渲染是如何可能的。也许尝试使用清晰的 256x256 纹理并显示结果?
-
我担心我的截图会让人困惑。它们只是手动屏幕截图。我的图像是在屏幕上以与图像精确大小相同的矩形绘制的,所以是的,应该渲染整个纹理。
-
图片的宽度/高度是多少?无论如何,您都应该始终使用两种纹理的力量。您可以从显示您正在使用的纹理坐标开始,以及顶点坐标。还要显示整个纹理以防万一,并为其使用一些清晰的纹理(不是沙子纹理等难以看到边缘的地方)。
-
我注意到您的纹理似乎不是 2 的幂 - 这可能会严重影响您的 OpenGL,尤其是在 iOS 上,它的实现更加有限。
-
我的真正目标是在屏幕上显示 2D 图像。我并不是真的想用各种纹理绘制一些对象,但据我所知,纹理是实现这一目标的唯一方法。我对 mip-mapping 了解不多,但我假设当我计划以全尺寸渲染图像时不需要它。不过,我可以尝试将图像的大小增加为 2 的幂,看看是否会有所不同。