位置: 编程技术 - 正文
推荐整理分享Bullet(Cocos2dx)之优化PhysicsDraw3D,希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!
为了测试bullet物体的大小,匆匆写完的PhysicsDraw3D的效率低的要命,这也是为什么cocos2dx弃用了DrawPrimitives,而去使用DrawNode
DrawPrimitives每次绘制都去调用glDrawElements,假如每帧绘制条线段,那么就要调用次glDrawElements,可见效率之低。
而DrawNode采取的是批处理的方式,当drawLine的时候不是立即绘制,而是将线段的信息添加到数组里,当draw时统一调用gl的绘制函数
/1可不是一个小数目啊。
下图使用DrawPrimitives方法
加入个Sphere帧率就掉到,的帧率更是惨不忍睹
下图使用DrawNode方法
为了解决这个问题就要参照DrawNode实现一个简单的DrawNode3D
不管三七二十一,将DrawNode的头文件代码copy,删去一些不需要的,
1.修改V2F_C4B_T2F 为 V3F_C4B_T2F
2.修改Vec2为Vec3,要绘制3D
3. 保留drawPoint, drawPoints, drawLine,其他的绘制函数不要
对于DrawNode.cpp按照上面所说同样修改
要记住
因为顶点有三个元素,.cpp代码过多,请在文章最后下载源码,要注意的是绘制时开启深度测试
修改PhysicsDraw3D
删除成员变量,添加DrawNode3D* _drawNode,由于DrawNode3D继承自Node所以创建时要将其添加到父节点上,
修改create,init为如下
static PhysicsDraw3D* createWithLayer(Node* layer);
bool initWithLayer(Node* layer);
同时添加
void clearDraw();
我们知道DrawNode如果不执行clear,那么就不会清空上一帧的绘制数据
具体修改如下:
销毁时也要将_drawNode从Parent中移除
PhysicsWorld3D 创建的静态函数添加
为的就是创建调试绘制
同时删除initWorld对_debugDraw的创建,每次绘制时需要判断是否为debug
完整源码
csdngithub
cocos2dx-3.0() ScrollView 缩放 及 touch新用法 转自
cocos2dx中函数指针传递的方法 目的看到群里有个朋友搞了好几天函数指针传递,没搞好。所以写一篇文章,旨在从cocos2dx中帮朋友们找到如何传递指针。旧版本的函数指针传递全局函
cocos2dx 3.3 视频播放的实现-VideoPlayer的使用 最近因为项目需求需要使用到视频播放功能。在3.x版本之前如果需要用到视频播放功能就要使用原生的视频播放实现技术,好在3.x之后官方已经集成了
标签: Bullet(Cocos2dx)之优化PhysicsDraw3D
本文链接地址:https://www.jiuchutong.com/biancheng/372633.html 转载请保留说明!友情链接: 武汉网站建设