three.js引入obj模型使用 rotation 自转。轴心不在物体中心点,如何解决

loverfh2 2019-03-09 10:22:43
主要代码。如下,不加 .geometry.center() 自转。轴心不在物体中心点 ,加上geometry.center() 可以正常自转。但物体位置改变了。轮子脱离了汽车。前面设置的position也无效。求大神指点。
在3dmax 软件中调整轮子轴心后再导出也是无效。
 /** 加入模型 */
function createModel() {
// model
var onProgress = function ( xhr ) {

if ( xhr.lengthComputable ) {

var percentComplete = xhr.loaded / xhr.total * 100;
console.log( Math.round( percentComplete, 2 ) + '% downloaded' );

}

};
var onError = function () { };
THREE.Loader.Handlers.add( /\.dds$/i, new THREE.DDSLoader() );
//加载模型

new THREE.OBJLoader()
.setPath( 'models/obj/bentley_motors/' )
.load('qc10.obj', function ( object ) {//加载模型
object.position.y =-180;
object.position.x =-350;
object.position.z =200;

object.scale.x = 0.04;
object.scale.y = 0.04;
object.scale.z = 0.04;
left_front_wheel = new THREE.Object3D;
left_front_wheel.position.y =-180;
left_front_wheel.position.x =-350;
left_front_wheel.position.z =200;

left_front_wheel.scale.x = 0.04;
left_front_wheel.scale.y = 0.04;
left_front_wheel.scale.z = 0.04;

var left_front_1,left_front_2 ;
object.traverse(function(child) {

if(child instanceof THREE.Mesh) {
if(child.name=="left_front_wheel"){
left_front_2= child;
}
console.log("元素——"+child.name)
console.log(child)

}
})

left_front_wheel.add(left_front_2);

//left_front_wheel.children[0].geometry.center()
scene.add( left_front_wheel );
ready=true;
return object;
}, onProgress, onError );
}
//轮子自转 动画
function updateWheel(){
left_front_wheel.rotation.x-=speed;
}
...全文
2555 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
金梦入凡尘 2021-03-26
  • 打赏
  • 举报
回复
问题解决了吗?
qq_19640709 2019-10-03
  • 打赏
  • 举报
回复
我也遇到这个问题。我先让它回归坐标原点,然后其他组件按照它的位置来摆放。
exit8878 2019-06-06
  • 打赏
  • 举报
回复
// 先获取geometey的中心点位置并留存 let center = new THREE.Vector3(); geometry.computeBoundingBox(); geometry.boundingBox.getCenter(center); let x = center.x; let y = center.y; let z = center.z; // 把对象放到坐标原点 geometry.center(); // 绕轴旋转 geometry.rotateZ(0.1); // 再把对象放回原来的地方 geometry.translate(x, y, z); // 这种方式是不会刷新显示的,需要执行一下render renderer.render(scene, camera); // 需要做成动画效果的话,就是重复放到原点-旋转-放回原处-刷新显示的操作
loverfh2 2019-03-09
  • 打赏
  • 举报
回复
木有人么
课程简介:本课程详细讲解基于Assimp C++库的模型读取模块,并且做了关于动画理论、关键帧插值、骨骼动画矩阵原理、骨骼动画读取与播放等知识的详细讲解,对于游戏行业或者三维可视化从业人员会有比较大的帮助。目前很多公司已经开始构建自己的底层图形引擎,其中动画就是重要的一个版块,本课程可以让学员从原理层面以及底层代码层面了解FBX、OBJ模型的读取本质,并且梳理程序架构,编写骨骼动画。2 课程解决优势:很多同学学习骨骼动画苦于无法找到详细的资料,其中卡主的问题点也比比皆是,比如FBX内嵌材质的读取,骨骼动画各类矩阵的应用,理论结合模型读取库读出来的数据如何一一对应等。我们的课程可以带领大家从原理+实践的角度进行学习,每一个知识点都会:a 推导基础公式及原理 b 一行一行进行代码实践从而能够保证每位同学都学有所得,能够看得懂,学得会,用得上,并且能够培养自主研究的能力。3 学习课程所得:学习本课程完毕之后,学员可以全方位的完全了解基于Assimp库的模型读取结构,了解每一个变量背后的含义,并且课程拥有随堂附赠的源代码,保证同学可以随时根据老师的代码纠正自己的错误。跟随课程一行一行写完代码的同学,可以获得自己的模型读取代码库,并且深度理解骨骼动画的原理与模型读取原理 本课程含有全源代码

10,606

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 其他
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧