OpenGL 的小试验(五)

1

Comments

myballs在对光照和面的消除以及碰撞检测进行了些许研究后,改进的 3D Demo 再次出炉。

这次的立体感更强了,因为加入了光照去掉了混合并加上了深度测试。不过开始的时候,因为去掉了混合,不能搞半透明了,本来想直接判断视角然后不绘制立方体相应的面,结果后来无意中发现一个叫做 glCullFace 的东西可以直接去掉某一个平面的一个面(变成透明),于是就把它施在了那个立方体上。(当时参考的资料找不到了……)这样就有了这一个效果:你总是看到你本来看不到的面。

接着就是加光照。不用 CullFace 的情况下,光照没问题,可是一开就变得十分黯淡,不懂得为什么……开始觉得是不是这两个会冲突,但想想又觉得这两个没道理冲突啊……后来终于想到了——法线,因为法线是为外面的面设置的(朝向立方体外),我把所有法线掉一个头,瞬间效果就出来了……

球什么的还按照原来的方法加好。这次的挑战其实主要是那个碰撞检测。我想了很久,觉得要几乎真实的模拟只有通过大规模的计算进行逐个测试,于是我就这么做了……但事实证明,这样做虽然效果看起来不差,不过由于有碰撞和没碰撞时计算量差异可能非常大,以致瞬间造成“卡”的感觉,同时,我发现所有球停下来后,会叠在一起,而不会像真实那样下面的滚开让上面的下来。不过后面这个就现在的模型来说也没什么办法,因为本来就不是模拟力的,只模拟了个加速度……至于前面那个,我暂时也没想出什么好办法解决,或许可以用一些更简陋的方法来计算,以求更高的速度?

在 3D 中速度才是王道啊……

这次还加入了即时显示 fps 的东西,试用了 Google 的 DroidSans 开源字体,体积上还是相当不错的~我基本上是设置了每 0.15s 更新一次显示的 fps。

最后,因为希望整个程序结构清晰一些,把原来的一大个文件分成了好多文件,所以这次必须打包了……还因此顺便又尝试写了个比较大的 Makefile……

最最后是下载地址:myballs.rar (100.45 KB)

One Response to “OpenGL 的小试验(五)”

  1. wzc1989 Says:
    2009年3月28日 00:56 回复

    Orz…

Leave a Reply