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 上的第一页