OpenGL ES 中如何实现在房间中查看屋内摆设的效果

OpenGL ES 中如何实现在房间中查看屋内摆设的效果

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)

本文遵循“署名-非商业用途-保持一致”创作公用协议

转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。

如题的效果,分析一下,不难发现,当要能看到房间内的东西时,那么房间靠近观察者的墙需要打掉。

那么怎么打掉呢?买把锤子或者用电锯锯得更齐刷点儿,也可能还有其它更好的办法。

不过有一点是可以肯定的,就是只能拿这些工具来处理房间的墙,不能抡到屋里的东西,那么这里就确定了一个事儿,那就是目标仅为房间的墙。

从OpenGL ES角度来看,怎么打掉这面墙,可能要涉及点事儿,先说明白,那就是我们看到的墙,假设是半透明的,那么基本上会有一面或两面墙的外面能看到,其它的墙均看不见,而我们要打掉的就是能看到外面的墙,以便看到外面看不到的墙的里面。

基于这些非常简的道理,我们再来看OpenGL ES给我们提供了哪些可以用的家伙事儿。

OpenGL ES有一个特性,叫背面剔除,是一种性能优化的技术,看不到的面儿,还要求GPU渲染,浪费资源,可以指定让GPU不渲染。

另外,OpenGL ES还有一个特性,逆时针的三个点组成一个正面的三角形,也可以指定顺时针三点个组成一个正面三角形,这样三个点组成的三角形有两个面,一个是正面儿,一个是背面儿。

有了上面OpenGL ES提供的这两件家伙事儿,估计再用你的聪明小脑瓜子一想,这事儿就齐活了。确实地告诉您,真的齐活了,如果还没齐活,那您就得反复琢磨琢磨了,领悟的事儿,只可意会,不可言传,我真没迈关子,这事儿就得您自个儿想明白了才行,我用我这小脑袋瓜子也是这么想明白的,花了好久,也许,您很聪 明,我这125的智商还是太低下,一下子就想明白了,那您就享福了,继续吧。

    // 允许背面消除
    glEnable(GL_CULL_FACE);
    // 设定顺时针为正面
    glFrontFace(GL_CW);

    // 绑定顶点缓存,并指定顶点坐标、法线坐标和纹理坐标三者组成的顶点的字节数,以及每个顶点在该缓存起点开始的指针偏移量
    glBindBuffer(GL_ARRAY_BUFFER, [_vboArray[0] vertexBuffer]);

    // 指示读取各段数据的位置
    glVertexAttribPointer(_positionSlot, 3, GL_FLOAT, GL_FALSE, stride, 0);
    glVertexAttribPointer(_textureCoordSlot, 3, GL_FLOAT, GL_FALSE, stride, texCoordOffset);
    glVertexAttribPointer(_normalSlot, 3, GL_FLOAT, GL_FALSE, stride, normalOffset);

    // Draw the triangles.
    //
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, [_vboArray[0] triangleIndexBuffer]);

    // 指示GPU使用以上的三维信息绘制出二维图形到帧缓存中
    glDrawElements(GL_TRIANGLES, [_vboArray[0] triangleIndexCount], GL_UNSIGNED_SHORT, 0);

    // GPU画完后,二维图片保存到桢缓存了,别忘了恢复到默认的逆时针为正面
    glFrontFace(GL_CCW);
    // 关闭背面消除,否则有些地方会支离破碎
    glDisable(GL_CULL_FACE);

齐活了您内!

可是...咋让灯光照到里面去呢?这个真有点难度!

参考资料:

罗朝辉的 OpenGL ES 2.0 iOS教程 :http://blog.csdn.net/column/details/opengl-es2-ios.html

时间: 2024-10-21 10:59:56

OpenGL ES 中如何实现在房间中查看屋内摆设的效果的相关文章

OpenGL ES 正反面的灯光照射初探

OpenGL ES 正反面的灯光照射初探 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 在  OpenGL ES 中如何实现在房间中查看屋内摆设的效果 中我们已经做到了,只查看一个几何体的内部

OpenGL ES 如何能看到一个物体内部和象3dmax中能只显示网格线

OpenGL ES 如何能看到一个物体内部和象3dmax中能只显示网格线 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 上一篇 OpenGL ES 正反面设置指令 中分析了正反面的判区方法,那

《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.1节游戏中的音效

2.1 游戏中的音效 Android 3D游戏开发技术宝典--OpenGL ES 2.0 一款好游戏,除了具备优质的画面和较高的可玩性之外,还应该有出色的音效.音效一般指的是游戏中发生特定行为或进行特定操作时播放的效果音乐或为了渲染整体气氛播放的背景音,如远处隆隆的炮声.怪物死亡的惨叫声.由远而近的脚步声等. 通过开发人员精心准备的声音特效,结合游戏的场景,可以渲染出一种紧张刺激的氛围,使玩家产生身临其境的感觉.这就像电影中的声音特效一样,假如没有了合适的音效,那么游戏和电影一样,真实感会大打折

OpenGL ES 在 Android 开发库中 - 能不能再牛点儿

OpenGL ES 在 Android 开发库中 - 能不能再牛点儿 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. Android 开发库中突然发现这些个东西,原来和原生的函数名一模一样,而且

OpenGL ES 在 Android 中对 GLU 的原生支持

OpenGL ES 在 Android 中对 GLU 的原生支持 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 注: 我总是喜欢多了解些语言,比如英文.法文.俄语.德文.日文.韩文.藏语.蒙古

OpenGL ES 同样的灯光计算在顶点着色器和在片元着色器中计算有什么不同

OpenGL ES 同样的灯光计算在顶点着色器和在片元着色器中计算有什么不同 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 同样一段计算灯光的算法如下: vec4 combineLight (

OpenGL ES 着色器中问题解决技巧

OpenGL ES 着色器中问题解决技巧 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 灰暗的一天, 终于见到一丝曙光, 心情终于从沉重变得略有轻松, 虽然, 一早就明白, 曙光终究会闪现,

WebGL 中 OpenGL ES 指令与 iOS 中 C 版指令的差异简析

WebGL 中 OpenGL ES 指令与 iOS 中 C 版指令的差异简析 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. WebGL 中 OpenGL ES 指令与 iOS 中 C 版指令的

OpenGL ES 片元着色器中 int 类型精度不匹配的问题分析

OpenGL ES 片元着色器中 int 类型精度不匹配的问题分析 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 最终解决方法补充: ------------------------ 经过反复