2010-09-06 78 views
4

我正在寻找iPhone上的3D,我已经设法在设备上获得3D立方体,但想添加交互性,例如触摸一个脸部触发特定事件和其他脸部一个不同的事件。我宁愿避开光线选择,因为这增加了我不想在我的应用中增加的额外复杂度。在iPhone上的OpenGL ES颜色采摘

我已经阅读了很多颜色采摘教程,但似乎没有任何iPhone特定的教程或示例代码在网络上的任何地方。

我的主要问题是将独特的彩色对象绘制到后台缓冲区,并将纹理对象绘制到前台缓冲区,从不向用户显示唯一的彩色对象,但检测从后台缓冲区触摸的像素的颜色。

所以我的问题是任何人都可以指向Objective-C教程的方向或发布一些示例代码?

任何帮助或建议将不胜感激。

+0

选中此http://stackoverflow.com/questions/6774197/opengl-es-2-0-object-picking-on- ios – 2012-06-10 10:33:12

回答

3

好吧,18个小时后我终于解决了我的问题。在渲染方法中,我只需要在渲染处于SELECT模式时阻止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)

+0

非常有帮助,指出我在正确的方向。 – Mike 2012-04-06 01:52:24

+0

不错的教程,但它是浪费CPU时间为每个帧创建一个缓冲区。 一次缓冲区或绘制到像屏幕一样大小的纹理最好分配一次。 – simiula 2014-03-28 12:58:25