【问题标题】:iOs: Aliasing with OpenGL but not with Cocos2D?iOs:使用 OpenGL 而不是 Cocos2D 的别名?
【发布时间】:2011-10-27 03:34:29
【问题描述】:

我是opengl编程的新手,但我做的是非常基础的事情,自定义opengl代码和cocos2d之间的质量差异是巨大的!

我正在尝试加载图像并在每一帧中不断旋转它。使用我的代码,我得到了很多闪烁的、锐利的边缘,而 cocos2d 的一切都很好而且很平滑。 我在我的代码上使用苹果推荐的 iOs 4 代码设置了 4x Multi-Sampling Anti-Aliasing,但与没有任何 MSAA 的 cocos2d 相比,它看起来仍然很糟糕。

您可以在这里看到不同之处: 自定义 opengl 代码(使用 MSAA):

cocos2D(没有 MSAA):

有谁知道我缺少什么才能获得如此流畅的图形?通过查看 cocos2d 代码,我发现了一些将别名链接到 GL_LINEAR 的参考资料。我已经像 cocos 一样将 GL_LINEAR 参数添加到我的纹理中,但它看起来仍然同样糟糕。

【问题讨论】:

  • 只是出于兴趣,您是出于好奇而学习 OpenGL,还是有什么 Cocos2D 不能做的事情?
  • @Danyal,我也在学习OpenGL,但我想不惜一切代价避免使用cocos2d和objective c,因为1)可移植性问题(避免objective c,所以我可以将代码移植到android,也许甚至 webgl) 和 2) 目标 c 将强加给我的语言障碍。我了解它的基本概念,但我真的不喜欢它的工作方式。
  • 谢谢@Waneck,你可能会说我想知道我是否也应该学习它!顺便问一下,你见过 Cocos2d-x 吗?它是带有 Android 端口的 Cocos2d 的 C++ 版本。但我想它不会没有特定于平台的错误。

标签: iphone ios opengl-es cocos2d-iphone antialiasing


【解决方案1】:

抗锯齿功能正如其名称所言:它防止基元采用别名,例如直线(对角线)变成楼梯。由于抗锯齿通常会产生“软”边缘,因此该术语有时用于适用于任何算法“软化”,但这样做是不正确的。

假设您的源纹理已经包含一些抗锯齿功能,可以将汽车的弯曲边缘渲染到像素网格上(因此,如果您在艺术程序中打开源 PNG 或其他任何内容并放大您会看到的边缘一些柔软度),我认为您的代码无论出于何种原因都未能应用多重采样。如果您放大并查看屋顶的顶部边缘,然后检查从右侧进入的步骤的最顶部与左侧的步骤之间的过渡。顶部刺眼的深色只是自发地增加了一个像素。这是边缘在原始纹理中的症状,它被逐个像素地复制出来。

GL_LINEAR 是一个过滤参数,它影响 OpenGL 如何回答问题,例如“如果 (0, 0) 处的源像素是一种颜色,而 (0, 1) 处的源像素是另一种颜色,那么 (0, 0.5) 处的颜色是什么?如果您应用线性过滤,那么当您将纹理缩放到其原始大小之上时,OpenGL 必须发明的额外像素将使用最近源像素的线性组合来创建。如果您使用了GL_NEAREST,那么它将是最接近的源像素的颜色。这就是放大到看起来模糊和低对比度的纹理与放大到看起来像具有明显像素的马赛克的纹理之间的区别。所以它(通常)会增加整体图像的模糊度和柔和度,但实际上与抗锯齿没有任何关系。

关于为什么您没有获得抗锯齿功能,有两个可能的原因浮现在脑海中。您的代码中可能有一些错误,或者您可能只是使用了与 Cocos2D 不同的算法。 Apple 的硬件多重采样支持仅出现在 iOS 4 和 Cocos2D 之前,因此可能会坚持使用“软件”方法(具体而言,以 4 倍大小逐像素渲染整个场景,然后让 GPU 将其缩小)。后者会慢很多,但会阻止硬件尝试优化过程。某些硬件有时应用的一种优化是仅在几何边缘(大约)进行多重采样。这显然对你没有任何好处。

另一种可能性是您在绘制时缩小了图像(尽管看起来不像),而 Cocos2D 正在生成 mip 贴图,而您没有。 Mip 贴图预先计算特定比例的图像,并在绘制到屏幕时从那里开始工作。这样做可以应用更昂贵的算法,并且往往会减少混叠。

你能发布一些代码吗?

【讨论】:

  • 你好汤米!非常感谢您的详细回复。我真的很感激,我将在今天晚些时候下班后添加代码。现在我可以说纹理的大小与它们在屏幕上显示的大小相同,所以我认为这不是 mip 映射问题。至于软件模式,确实可以,虽然我在 cocos2d 源代码上没有找到任何关于它的参考。我回家后会发布代码!非常感谢!
  • Tommy,看来问题出在 GL_LINEAR 上!后来我用 GL_NEAREST 重新绑定了纹理!哦哇!它有很大的不同!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-14
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多