OpenGL ES 多个模型导入呈现的公共部分
太阳火神的美丽人生 (http://blog.csdn.net/opengl_es)
本文遵循“署名-非商业用途-保持一致”创作公用协议
为什么要提这个话题呢,是因为多个模型文件obj导入到OpenGL ES中,会有多个纹理库,多个几何体,灯光暂时还不知道咋弄估计也会有多个吧,再有多个......还没理太清还我有多少个多个!
不过至少,就这些是要根据每个Obj中承载的内容不同来呈现的,那么其它的工作就应该是可以共用,统一进行设置,不需要再牵扯到每一个obj,不用因为obj的个数和各自内部来考虑了。
另外,也可以随时根据obj的动态加载,来进行重绘,反复地重启应用,不光我闲麻烦,估计用户也觉得开发这应用的人真二......一系列。
总之,我得先把这些公共的部分拆出来,针对Obj的部分,也得做成能重复使用的,要不然有几个obj我要做几次,代码多得自已都乱了,那估计遇到问题,就不甭想找出来解决掉了。
提纲挈领估计就是这意思吧,得有纲有目,思路才清楚,清晰的思路,不用多费脑筋,有些问题的解决办法自然就出来了,何况,我这后续一大堆事儿,还没头绪呢。
那么接下来就看看总共有哪几部分:此处声明,以下代码均来自罗朝辉的博文示例,再次感谢,虽然你的博文写的有点粗犷,但至少花些时间,还得获得了大部分框架!
第一部分 公共部分
1、层对象要改成支持 OpenGL ES 的;
+ (Class)layerClass {
// Support for OpenGL ES
return [CAEAGLLayer class];
}
2、设置 OpenGL ES 层对象实例的属性:默认的属性是透明的,画上去也看不到,不就白辛苦了吗
- (void)setupLayer {
_eaglLayer = (CAEAGLLayer*) self.layer;
// 使 CALayer 可见
_eaglLayer.opaque = YES;
// 设置绘制属性:
_eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO], kEAGLDrawablePropertyRetainedBacking,
kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil];
}
层对象的属性 drawableProperties 是个NSDictionary 类型,以上代码中给出了两个在绘制时要使用的属性值,估计象 OpenGL ES 这类状态机的玩意,肯定会有默认值,你不提供,也照样工作,只不过不是按你预期工作而已。这里的两个属性声明与描述附后,简单解释如下:
kEAGLDrawablePropertyRetainedBacking:
kEAGLDrawablePropertyColorFormat: