【发布时间】:2020-02-14 19:18:46
【问题描述】:
您可能注意到我问了很多与我的项目相关的问题,因此提前感谢您的所有支持。
我的项目包括围绕太阳旋转的行星地球和月球。 (它们并不是专门围绕太阳旋转,而是围绕太阳恰好所在的 0,0 轴旋转)。
我最初创建了我的几何图形,然后将它们添加到场景中,然后按如下方式添加到轨道组中
var orbitGroup = new THREE.Object3D();
scene.add(orbitGroup);
scene.add(planetEarth);
orbitGroup.add(planetEarth);
scene.add(planetMoon);
orbitGroup.add(planetMoon);
然后我在渲染函数中声明旋转如下
planetEarth.add( planetMoon );
planetEarth.add(rocketGroup);
// call the render function
var angle = 0;
render();
function render() {
stats.update();
// rotate the orbit group
angle += 0.002;
angle += 0.002 * controls.EarthRotationSpeed;
planetEarth.rotation.y += controls.EarthRotationSpeed;
planetMoon.rotation.y += controls.MoonRotationSpeed;
angle+= 0.01 * controls.SunRotationSpeed;
planetSun.rotation.y += controls.SunRotationSpeed;
// rotate the orbit group
angle += 0.02;
orbitGroup.rotation.y = -angle / 10;
littleOrbitGroup.rotation.x = -angle;
// render using requestAnimationFrame
requestAnimationFrame(render);
renderer.render(scene, camera);
}
如您所知,月球和地球都围绕太阳运行,而不是月球在旋转地球的同时旋转太阳。有没有办法我可以声明它应该绕行的特定点或物体,并让它在我想要的任何轴上而不是在 y 轴上绕行?
----------------编辑-----------------
function createMesh(geom) {
var loader = new THREE.TextureLoader();
var planetTexture = loader.load("../assets/textures/planets/Earth.png");
var normalTexture = loader.load("../assets/textures/planets/EarthNormal.png");
var planetMaterial = new THREE.MeshPhongMaterial({map: planetTexture, bumpMap: normalTexture});
// create a multimaterial
var mesh = THREE.SceneUtils.createMultiMaterialObject(geom, [planetMaterial]);
return mesh;
}
【问题讨论】:
标签: javascript three.js