Как перемещать объект в 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();
Заранее спасибо за помощь!)

21 Авг 2019 в 06:13
161 +1
0
Ответы
1

Для перемещения объекта в 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 координате в зависимости от угла и скорости.

20 Апр в 13:21
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 90 211 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир