iPhone上的OpenGL ES颜色拾取

4
我正在研究iPhone上的3D技术,我已经成功在设备上实现了一个3D立方体,但是想要添加交互功能,例如触摸一个面会触发特定事件,而另一个面则会触发不同的事件。我宁愿避开射线拾取,因为这会增加我不想要的额外复杂性。
我已经阅读了很多颜色拾取教程,但似乎没有任何针对iPhone的教程或示例代码。
我的主要问题是将唯一的彩色对象绘制到后缓冲区,将纹理对象绘制到前缓冲区,从未向用户显示唯一的彩色对象,但可以检测从后缓冲区触摸的像素颜色。
所以我的问题是,有人能指导我一个Objective-C教程或提供一些示例代码吗?
非常感谢您的帮助和建议。

请查看此链接:https://dev59.com/R2w15IYBdhLWcg3wLI3I - Cynichniy Bandera
1个回答

3

好的,经过18个小时的努力,我终于解决了我的问题。在渲染方法中,我所要做的就是在渲染处于选择模式时阻止presentRenderbuffer的调用。现在我感觉非常后悔!

if (mode == SELECT) {
    glDisable(GL_DITHER);
    glDisable(GL_LIGHTING);
    glDisable(GL_LIGHT0);
}

// Draws the cube object, face by face and adds unique color to each face
[Face1 draw];
[Face2 draw];
[Face3 draw];
[Face4 draw];
[Face5 draw];
[Face6 draw];

if (mode == SELECT) {
    glEnable(GL_DITHER);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
}

// Wrapping presentRenderbuffer with this if statement fixed
// the problem where the unique colors would appear onscreen
if (mode == RENDER) {
    [context presentRenderbuffer:GL_RENDERBUFFER_OES];
}

我希望这可以帮助未来的其他人 :o)

不错的教程,但为每个帧创建缓冲区是否浪费 CPU 时间呢? 最好是一次性分配缓冲区或绘制大小与屏幕相同的纹理。 - simiula

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接