Как перемещать объект в 3Д пространстве? Вот я прекрасно понимаю, как в 2Д пространстве можно перемещать объект на определенный градус:x+=Math.cos(angle)*speed; y+=Math.sin(angle)*speed; Но я совершенно не понимаю, как сюда приписать третью координату и третью ось. Я пишу это все на Three.js. Вот собственно код:var scene = new THREE.Scene(); var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 20000); var light = new THREE.PointLight( 0xffffff, 1, 2000 ); light.position.set(0,0,0);scene.add( light ); var x = 0, y = 0, z = -500, speed = 0, angle = 0, angle2 = 0; var geometry = new THREE.CylinderGeometry( 4, 15 , 100, 6 ); var material = new THREE.MeshLambertMaterial( {color: 0xffffff} ); var cylinder = new THREE.Mesh( geometry, material ); scene.add( cylinder ); var renderer = new THREE.WebGLRenderer(); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); renderer.shadowMapEnabled = true; renderer.setClearColorHex( 0x00000, 1 ); var render = function () { requestAnimationFrame(render); renderer.render(scene, camera); switch (key){ case 38: angle2+=0.1; break; case 40: angle2-=0.1; break; case 37: angle+=0.1; break; case 39: angle-=0.1; break; case 90: speed-=0.5; break; case 88: speed+=0.5; break; } light.position.set(camera.position.x,camera.position.y+3,camera.position.z-3); cylinder.rotation.z=-angle; cylinder.position.set( x+=Math.sin(angle)*speed*2, y+=Math.cos(angle)*speed, z ); }; document.onkeydown = keyDn; document.onkeyup = keyUp; key=0; function keyDn(e) {key = e.which;console.log(key)} function keyUp(e) {key = 0;} render(); Заранее спасибо за помощь!)
Для перемещения объекта в 3D пространстве вам следует использовать не только x и y координаты, но и z координату. Для этого можно использовать тригонометрические функции sin() и cos() для расчета изменения z координаты.
Например, вы можете изменить ваш код следующим образом, чтобы учитывать изменение z координаты:
var x = 0, y = 0, z = -500, speed = 0, angle = 0, angle2 = 0; var render = function () { requestAnimationFrame(render); renderer.render(scene, camera); switch (key){ case 38: angle2+=0.1; break; case 40: angle2-=0.1; break; case 37: angle+=0.1; break; case 39: angle-=0.1; break; case 90: z += Math.cos(angle) * speed; break; // Перемещение по оси z case 88: z -= Math.cos(angle) * speed; break; // Перемещение по оси z в обратном направлении } light.position.set(camera.position.x, camera.position.y + 3, camera.position.z - 3); cylinder.rotation.z = -angle; cylinder.position.set( x += Math.sin(angle) * speed * 2, y += Math.cos(angle) * speed, z ); };
Добавленные строки case 90: и case 88: позволяют изменять z координату объекта в зависимости от текущего угла и скорости.
Теперь ваш объект должен перемещаться не только по x и y координатам, но и по z координате в зависимости от угла и скорости.
Для перемещения объекта в 3D пространстве вам следует использовать не только x и y координаты, но и z координату. Для этого можно использовать тригонометрические функции sin() и cos() для расчета изменения z координаты.
Например, вы можете изменить ваш код следующим образом, чтобы учитывать изменение z координаты:
var x = 0, y = 0, z = -500, speed = 0, angle = 0, angle2 = 0;var render = function () {
requestAnimationFrame(render);
renderer.render(scene, camera);
switch (key){
case 38: angle2+=0.1; break;
case 40: angle2-=0.1; break;
case 37: angle+=0.1; break;
case 39: angle-=0.1; break;
case 90: z += Math.cos(angle) * speed; break; // Перемещение по оси z
case 88: z -= Math.cos(angle) * speed; break; // Перемещение по оси z в обратном направлении
}
light.position.set(camera.position.x, camera.position.y + 3, camera.position.z - 3);
cylinder.rotation.z = -angle;
cylinder.position.set( x += Math.sin(angle) * speed * 2, y += Math.cos(angle) * speed, z );
};
Добавленные строки case 90: и case 88: позволяют изменять z координату объекта в зависимости от текущего угла и скорости.
Теперь ваш объект должен перемещаться не только по x и y координатам, но и по z координате в зависимости от угла и скорости.