gpt4 book ai didi

three.js - 如何使用 THREE.js 围绕行星旋转一些卫星?

转载 作者:行者123 更新时间:2023-12-02 15:11:32 25 4
gpt4 key购买 nike

我认为这张图片最能解释我的问题:

hooray for optical illusions

首先,我沿着红线平移该框。接下来,我希望旋转的效果是 a 中的蓝线,但实际发生的情况更像是 b 中的蓝线。感觉改变旋转总是相对于原始对象空间,但平移(尽管首先发生)总是相对于父对象,并且不会真正影响与对象空间相关的几何点。如果这让您感到困惑,我深表歉意;显然我对此很陌生。

产生这种效果的代码的重要部分如下。请记住,图像的方向与此代码生成的方向不同;图片只是一个例子,为了清楚地展示效果。

var objectContainer = new THREE.Object3D();

var tubeRadius = 100;
var tubeGeometry = new THREE.CylinderGeometry(tubeRadius, tubeRadius, tubeRadius * 3, 36, 1, false);
var tube = new THREE.Mesh(tubeGeomtry, material);
scene.add( tube );

var boxes = new THREE.Object3D();
var boxEdge = 50;
var boxGeometry = new THREE.CubeGeometry(boxEdge, boxEdge, boxEdge);
var box1 = new THREE.Mesh( boxGeometry, material );
box1.translateX(tubeRadius + boxEdge / 2 + 5);
box1.translateY(boxEdge / 2);
box1.rotation = new THREE.Vector3(0, 2*Math.PI/3*0, 0);
boxes.add(box1);
var box2 = box1.clone();
box2.rotation = new THREE.Vector3(0, 2*Math.PI/3*1, 0);
boxes.add(box2);
var box3 = box1.clone();
box3.rotation = new THREE.Vector3(0, 2*Math.PI/3*2, 0);
boxes.add(box3);
scene.add( boxes );

我能想到的唯一解决方案是将每个盒子包装在另一个对象空间中并围绕它旋转,但这似乎是过多的工作。实现我想要的结果的首选方法是什么?

最佳答案

有几种方法可以做你想做的事,但我认为最简单的是这样的:

// parent
parent = new THREE.Group();
scene.add( parent );

// pivots
var pivot1 = new THREE.Object3D();
var pivot2 = new THREE.Object3D();
var pivot3 = new THREE.Object3D();

pivot1.rotation.z = 0;
pivot2.rotation.z = 2 * Math.PI / 3;
pivot3.rotation.z = 4 * Math.PI / 3;

parent.add( pivot1 );
parent.add( pivot2 );
parent.add( pivot3 );

// mesh
var mesh1 = new THREE.Mesh( geometry, material );
var mesh2 = new THREE.Mesh( geometry, material );
var mesh3 = new THREE.Mesh( geometry, material );

mesh1.position.y = 5;
mesh2.position.y = 5;
mesh3.position.y = 5;

pivot1.add( mesh1 );
pivot2.add( mesh2 );
pivot3.add( mesh3 );

然后在渲染循环中:

parent.rotation.z += 0.01;

三.js r.147

关于three.js - 如何使用 THREE.js 围绕行星旋转一些卫星?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15214582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com