登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: [坑][c3d/u3d]cocos 取得网格数据     [回主站]     [分站链接]
[坑][c3d/u3d]cocos 取得网格数据
clq
浏览(366) - 2023-10-31 18:05:50 发表 编辑

关键字:

[坑][c3d/u3d]cocos 取得网格数据

这了是个常见的坑。

在增加碰撞体时需要先添加刚体。但对于网格类型的碰撞体来说,还要指定具体的网格(也就是模型的网格的实际形状)

它的坑在于,和常见物体用
getComponent(cc.Mesh);

这样的不同,实际上在目前的 cocos 版本中只能先取 cc.MeshRenderer 。所以有以下代码

//给一个模型添加网格碰撞 //静态物体的,例如石头,如果是飞机这样动态的不能用这个,不过差不多的,改一下就行
AddMeshCollider_andRigidBody(node:cc.Node):void {
let rigidBody = node.addComponent(cc.RigidBody); //生成一个刚体
rigidBody.type = cc.ERigidBodyType.STATIC; //默认是动力学的,要改成静态的
//-----

//https://zhuanlan.zhihu.com/p/385296910
//通过一个简单的脚本对所有的子物体先进行了网格数据的合并,然后点击保存数据将网格数据导出为obj
// 源码已上传至商店。
// 链接:https://store.cocos.com/app/detail/3666
// 或者在商店直接搜:Mesh 导出 obj3D模型
//https://blog.csdn.net/carlos13207/article/details/123966172
//let mesh = stone1.getComponent(cc.Mesh);
//stone1.getComponentsInChildren(cc.Mesh);
let mesh = node.getComponent(cc.MeshRenderer).mesh; //这样才能取得网格

let meshCollider = node.addComponent(cc.MeshCollider);
meshCollider.mesh = mesh; //一定要设置网格属性,否则是不起作用的 //其实和设计器中是一样的

//--------------------------------------------------------
}//

网格的本身数据还是很多的,除了形状外还包括了法线、贴图坐标等等。

let positions = mesh.readAttribute(0, gfx.AttributeName.ATTR_POSITION);
let normals = mesh.readAttribute(0, gfx.AttributeName.ATTR_NORMAL);
let uvs = mesh.readAttribute(0, gfx.AttributeName.ATTR_TEX_COORD);
let indices = mesh.readIndices(0);

参考
https://blog.csdn.net/carlos13207/article/details/123966172





总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1