Three.JS повернуть проекцию так, чтобы ось y стала осью z

Традиционно в 3D-проекциях ось Y — это ось, представляющая «вверх и вниз». Я научился думать об этом с другими двигателями, как о оси Z. Мне было интересно, есть ли способ в Three.JS сделать ось Z оси «вверх/вниз». Если да, то есть ли какие-то последствия?

Вот диаграмма того, что я хочу: введите здесь описание изображения


person Alex Turpin    schedule 25.11.2011    source источник
comment
Мне кажется, что на картинке справа x и y расположены не в том месте. Не следует ли их поменять местами?   -  person Arman    schedule 29.07.2015
comment
Не могли бы вы указать мне, где я могу прочитать больше об этой конвенции? Я никогда не сталкивался с этим :-/   -  person Kuba    schedule 20.01.2016


Ответы (4)


Вы можете просто изменить камеру, а не всю систему координат. Например:

var WIDTH = 1024;
var HEIGHT = 768;
var VIEW_ANGLE = 45;
var ASPECT = WIDTH / HEIGHT;
var NEAR = 0.1;
var FAR = 10000;
camera = new THREE.PerspectiveCamera(VIEW_ANGLE, ASPECT, NEAR, FAR);
camera.position.z = 300;
camera.up = new THREE.Vector3( 0, 0, 1 );
scene.add(camera);

Это изменяет вектор up для камеры, чтобы использовать Z-UP.


ИЗМЕНИТЬ:

Чтобы проиллюстрировать пример, вот созданный вами jsfiddle, слегка измененный для вызова lookAt после установки вектора up: http://jsfiddle.net/NycWc/1/

person jterrace    schedule 05.12.2011
comment
Спасибо за ответ! У меня нет времени проверить это сейчас, но я попробую в ближайшее время. Влияет ли это на другие методы камеры? Смогу ли я по-прежнему нормально использовать lookAt и тому подобное? - person Alex Turpin; 08.12.2011
comment
Хм, я думаю, что lookAt все еще будет работать, поскольку он использует вектор камеры вверх: github.com/mrdoob/three.js/blob/master/src/cameras/ - person jterrace; 08.12.2011
comment
Может быть, я делаю что-то не так, но я ожидаю, что камера поднимется, вместо этого она, похоже, уйдет влево jsfiddle.net /NycWc - person Alex Turpin; 08.12.2011
comment
Вы должны вызвать lookAt после установки вектора up: jsfiddle.net/NycWc/ 1 - person jterrace; 08.12.2011
comment
Если вы читаете этот 9-летний ответ, обратите внимание, что он не применяется к новейшим выпускам Threejs. Пожалуйста, обратитесь к THREE.Object3D.DefaultUp ответу ниже - person MacK; 14.04.2020

Следующее позволит достичь желаемого результата

THREE.Object3D.DefaultUp.set(0, 0, 1);

Согласно документации

.DefaultUp : Vector3

Направление вверх по умолчанию для объектов, также используемое в качестве положения по умолчанию для DirectionalLight, HemisphereLight и Spotlight (что создает источники света, сияющие сверху вниз). Установите на ( 0, 1, 0 ) по умолчанию.

person TerekC    schedule 07.08.2019
comment
Это должен быть правильный ответ, принятый просто взламывает верхнее значение камеры, а не всю систему координат (влияет на все объекты), которую запросил OP. - person Tyathalae; 25.11.2019

У меня была эта проблема с объектом. Вот как я это исправил.

object.rotation.z = 90 * Math.PI/180;
object.rotation.x = -90 * Math.PI/180;

Это изменило его ориентацию именно так, как вы спрашиваете.

person Community    schedule 04.12.2011
comment
Я ищу способ изменить всю систему координат, чтобы изменение положения y и z привело к описанным мной изменениям. - person Alex Turpin; 05.12.2011
comment
Это решение помогло мне .. Спасибо - person Steve Johnson; 08.01.2020

Система координат xyz всегда должна устанавливаться по правилу правой руки. Создание собственного соглашения просто не такой уж хороший план и вызовет много путаницы. Вы можете вращать систему координат по желанию, но не меняйте направление оси. Если вы действительно хотите делать то, что вы показываете, вы можете сделать координатную рамку x, y, -z.

person gijs van erp    schedule 22.12.2017