2 yequan506200797 yequan506200797 于 2016.04.05 16:19 提问

three.js中如何旋转物体position坐标系

在three.js中导入了外部创建的几何体,我想使物体本身的坐标系围绕Y轴旋转45度:

object.rotation.y=Math.PI/4;

object.position.x=1;

但是旋转后物体的坐标并没有变化,即物体的世界坐标还是(1,0,0)。请问我改如何实现这种想法,以上程序错误在哪里?谢谢大家的解答。

4个回答

yequan506200797
yequan506200797   2016.04.06 19:38
已采纳

我找到解决方案了,分享给大家,rotation改变的是子对象的坐标系,但是不改变本身的坐标系角度,所以想要改变其自身的坐标系方向,可以为其添加父对象,然后改变父对象的rotation。
temp=new THREE.Object3D();
temp.add(object);
temp.rotation.y=Math.PI/4;
此时object的XZ坐标系就旋转了45度。

CSDNXIAON
CSDNXIAON   2016.04.05 16:50

three.js 绕其边缘旋转
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

freedamjustice
freedamjustice   2016.04.06 14:26

rotation是绕物体本身中心点旋转。要绕坐标Y轴旋转需要自行计算其旋转后坐标,再设置。 像你的代码object.rotation.y=Math.PI/4;如果加上贴图
和定时旋转,你就会发现物体其实是在做自转。

yequan506200797
yequan506200797 回复freedamjustice: 谢谢您的解答,我能理解您的意思,但是除了自行计算器旋转后的坐标还有其他的设置方法可以改变Position的坐标系么?
2 年多之前 回复
freedamjustice
freedamjustice 顺便补充一下,你要的效果其实等于地球绕太阳公转,但你的代码只是地球自转,我想这样说应该形象一点
2 年多之前 回复
yequan506200797
yequan506200797   2016.04.06 19:39

我找到解决方案了,分享给大家,rotation改变的是子对象的坐标系,但是不改变本身的坐标系角度,所以想要改变其自身的坐标系方向,可以为其添加父对象,然后改变父对象的rotation。
temp=new THREE.Object3D();
temp.add(object);
temp.rotation.y=Math.PI/4;
此时object的XZ坐标系就旋转了45度。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
threejs中坐标系转换和实现物体跟随鼠标移动
threejs中屏幕坐标系向threejs坐标的转换方法,以及实现物体跟随鼠标移动
three.js 绕其边缘旋转
1.    dummy = new THREE.Object3D();        plane = new THREE.Mesh(new THREE.PlaneGeometry(100,100),new THREE.MeshBasicMaterial({color:0xff0000}));           plane.position.set(50,0,0);          dum
three.js旋转元素
旋转元素: plane.rotateX(Math.PI/2);//沿着X轴旋转90度 plane.rotateY(Math.PI/2);plane.rotateZ(Math.PI/2);参数为弧度数。
[Unity]物体坐标系和世界坐标系的方向变量以及说明
世界坐标系 以世界坐标为标准 secene 视图 右上角 为准。 Vector3.forword 为 Z轴+ Vector3.back 为 Z轴- Vector3.Up 为 Y轴+ Vector3.Down 为 Y轴- Vector3.Right 为 X 轴+ Vecotr3.Left 为 X 轴- 物体坐标系,是以 物体 自身 的坐标 为准 标准
在threejs中对3D物体旋转的思考
今天在写threejs时,突然想到一个问题:一个3D物体需要旋转时,一般情况下简单的旋转我都是使用欧拉角,稍微复杂一些的情况我会把欧拉角转换成四元数进行旋转(欧拉角复杂旋转可能会产生的死锁问题),但是在threejs中object3D的旋转方法无论是使用setRotation(沿着x、y、z轴旋转)还是rotateOnAxis(按从原点到任意方向的向量进行旋转)都无法完成沿着一个不经过原点的轴进行
three.js绕边缘旋转
dummy = new THREE.Object3D(); plane = new THREE.Mesh(new THREE.PlaneGeometry(100,100),new THREE.MeshBasicMaterial({color:0xff0000})); plane.position.set(50,0,0); dummy.add(plane)
THREEJS 第二章 立方体动起来
最近很忙,一直在做项目但是毫无进展,所以最近一直没有更新博客,自己写这个博客主要是想,一来是记录一下自己的学习历程,同时给新手一些自己的学习历程,毕竟个人认为学习一门学科,最好的方法就是学习这门学科的历史,我写这个博客的的学习经历,也算是一个人的学习历程的历史,以及自己对three.js的思考过程。一直不知道到底从哪里比较合适,最后想明白了,就从three.js的官方demo做起吧,因为自己也是在
我的threejs学习笔记(五)——点光源属性控制
写在前面主要练习了点光源的距离和密度属性。 理解了threejs里颜色使用的原理。代码pointLight.distance=controls.pointlight_distance; pointLight.intensity=controls.pointlight_intensity; distance(距离)控制光源的照射范围;intensity(密度)控制光源的强度。 全文<!D
threejs指定对象旋转中心
默认情况下,对象的旋转中心都是自身的中心。对于组对象而言,也是如此。因此,可以利用这个特点,实现对象绕任何点旋转,也就是指定旋转中心。
4.three.js中的坐标系
Three.js中的坐标系three.js中坐标系使用的是左手坐标系左手坐标系和右手坐标系的对比: 当然three.js中使用的是右手坐标系three.js中的旋转的定义但是three.js中的旋转是如何定义的呢? 在three.js中旋转使用的是弧度制,2π为一圈一定要注意可以用一个小部件来提示坐标var axisHelper=new axisHelper()//每个轴的长度 scene.