前段时间一直在弄一个室内场景,首先完成了render,效果还可以。然后给其加上shadow,使其更逼真。这里主要记录下在做的过程中遇到的问题。
1.是在导入场景的时候,由于场景比较大(200M)左右,所以在ios上加载这么大的场景会频繁的memorywarning,然后就会被系统kill掉。这个问题的解决方法是通过改变数据类型来达到压缩的目的。顶点的坐标double是没法改变的,如果改变会严重影响场景的准确度。这里主要是改变normal和 uv的类型,其实在正常的精度范围内,normal和 uv不需要double或者float来存储,可以用一个short来存储,这里就要把normal 和 uv 加一个偏移值(比如乘以10000),这个样就可以节省大量的存储空间,初步测试,加载完整个场景内存占用大约为300M多点,现在的ipad完全可以承受。然后在shader中正真使用的时候只需要把数据还原就行,这样几乎没有多少效率的损失但是却极大的减少了内存的占用。
2.场景内不同的mesh的材质均各不相同,加载的时候可以将同一材质的mesh归在一起,这样在绘制的时候,可以方便的赋予材质信息。刚开始写了加载场景和材质的类,但是最后为了可靠性以及后续支持不同格式的模型加载,选择了使用开源库assimp来负责模型加载这一块。在github上找到源码进行编译,编译出支持armv7,a