Отказ от ответственности: я ничего не знаю о three.js
. Я только что сделал немного OpenGL.
Ваши углы Эйлера исходят из проецируемого вида модели (строки 74-80). Я не вижу в этом логики.
Если ваш div находится на поверхности сферы, то он должен быть ориентирован по нормали сферы в том месте, где находится div. К счастью, у вас уже есть эти углы. Их зовут rotation
.
Если вы замените углы Эйлера в строках 82-84 углами поворота, используемыми для позиционирования элемента div, то в моем браузере элемент div отображается ребром, когда он находится на краю круга, и лицевой стороной, когда он находится в центре. Кажется, что он движется по кругу, краем к экрану. Это тот эффект, который вы хотите?
Моя модификация связанного кода:
82 var rotX = (rotation.x * (180/ Math.PI));
83 var rotY = (rotation.y * (180/ Math.PI));
84 var rotZ = 0;
ИЗМЕНИТЬ
Ах хорошо. Переменная rotation
— это просто переменная камеры. Он управляет касательной на экваторе. Вам также необходимо изменить ориентацию, чтобы учесть широту.
Сделайте rotY
равным минусу вашей широты. Затем убедитесь, что это вращение происходит до экваториального вращения. Повороты не коммутативны.
Таким образом, изменения кода на странице https://jsfiddle.net/ao5wdm04/1/ таковы: следует:
27 var lat = 45 * Math.PI / 180;
...
82 var rotX = (rotation.x * (180/ Math.PI));
83 var rotY = - 45;
...
88 document.getElementById('face').style.webkitTransform = 'translate3d(' + x + 'px,' + y + 'px,0px) rotateY('+rotX+'deg) rotateX('+rotY+'deg)';
Я не знаю, как широта должна распространяться между функциями init
и render
. Как я уже сказал, я не знаю языка.
person
Bill
schedule
10.03.2016
WebGLRenderer
иCSS3DRenderer
. У меня работает в Chrome, но могут быть некоторые проблемы. Можете ли вы использоватьTHREE.PlaneGeometry
вместо div для своего приложения и избежать использования CSS3D? - person WestLangley   schedule 04.03.2016WebGLRenderer
. - person WestLangley   schedule 06.03.2016