iPhone/iPad 设备上的 OpenGL 渲染 GL_POINTS 看起来很糟糕(但在模拟器中看起来完全没问题)

Posted

技术标签:

【中文标题】iPhone/iPad 设备上的 OpenGL 渲染 GL_POINTS 看起来很糟糕(但在模拟器中看起来完全没问题)【英文标题】:OpenGL rendering GL_POINTS on iPhone/iPad devices looks horrible (but looks completely fine in the simulator) 【发布时间】:2012-03-16 15:09:53 【问题描述】:

我创建了一个 OpenGL ES 游戏,它在 ios 上使用 GLKView 进行渲染。我还添加了一些位于 GLKView 顶部的自定义 UIButton。在渲染中,我使用GL_POINTS 渲染模式绘制了一些星星。在模拟器中一切都很好,但在设备上看起来很糟糕。

我想知道是否有人对我应该在设备上配置/注意的事项有任何建议,这些事项可能需要进行设置才能获得正确的渲染图像。

以下是几张结果图片:

模拟器

设备

(请忽略自定义按钮的缩放差异 - 设备屏幕截图是在 iPad 上拍摄的)。

【问题讨论】:

您是否在渲染前使用glClearColor()glClear() 来初始化您的绘图空间?如果没有,您可能会拾取以前存在的工件。 嘿布拉德,我仔细检查了这个,我的 glClearColor/glClear 似乎被调用并做正确的事情。我认为如果问题与此有关,那么我也会在模拟器中看到相同的结果,但感谢您的建议 - 需要检查! 【参考方案1】:

事实证明,问题在于未在 OpenGL ES 的着色器中设置 gl_PointSize。屏幕截图实际上让我想到了这个解决方案,因为星星(使用GL_POINTS 渲染模式绘制)在设备上比在模拟器上完全错误。

大概对于桌面版的 OpenGL,点大小是默认使用glPointSize 函数设置的(除非启用了GL_VERTEX_PROGRAM_POINT_SIZE)。在 OpenGL ES 上没有 glPointSize 函数,因此必须始终使用顶点着色器中的内置 gl_PointSize 变量指定点大小值。

【讨论】:

如果我使用的是 GLKit 的 GLKBaseEffect,我该怎么做? 我不认为你可以 - 你必须编写着色器。 避免GLKBaseEffect。它试图模仿固定功能管道,只是学习着色器的工作原理并直接使用它们。老实说,我不确定他们为什么要构建 GLKBaseEffect 或其派生类。

以上是关于iPhone/iPad 设备上的 OpenGL 渲染 GL_POINTS 看起来很糟糕(但在模拟器中看起来完全没问题)的主要内容,如果未能解决你的问题,请参考以下文章

你能确定插入 iphone/ipad/ipod 耳机插孔的具体设备类型吗?

iframe 中的 pdf 仅在 iphone/ipad 上的第一页

忘记Apple ID密码,如何从iPhone/iPad上移除 iCloud账号?

iOS(iPhone)应用程序与ipad兼容。但是怎么样?

OpenGL ES:屏幕截图显示设备和模拟器之间的不同

iPhone 3GS + / iPad 1 + 最大硬件音频采样率