Всем привет!
Я уже спрашивал о вращении вокруг произвольной оси и получил четкие ответы в № 1219 и № 1220.
Но до сих пор неясно, как повернуть куб вокруг одного из его ребер (может ли кто-нибудь поделиться таким кодом, если он существует).
В # 1219 разместили две функции:
function rotateAroundObjectAxis( object, axis, radians ) { .. }
и
function rotateAroundWorldAxis( object, axis, radians ) { .. }
Они позволяют мне вращать куб вокруг произвольной оси, проходящей через центр его ограничивающего прямоугольника.
Мне нужно повернуть объект вокруг произвольной оси, которая не обязательно проходит через центр объекта.
Как это сделать правильно?
Извините, если меня это немного раздражает, но я хочу реализовать такую функциональность.
Спасибо.
PS Похоже, мне нужна функция, которая выглядит так:
функция rotateAroundArbitraryAxis (объект, axisDirection, axisBasePoint, радианы) {..}
под axisBasePoint я имею в виду точку, через которую проходит указанная ось.
Я читал в Интернете, что такую ротацию нужно делать в несколько этапов:
Я правильно понимаю?
Как выполнить такую операцию с three.js?
Я пробовал перемножать разные (перевод / поворот) матрицы друг на друга в three.js, но не получил желаемого результата :-(
Большое спасибо.
Что насчет этого?
var dummy = new THREE.Object3D();
dummy.position.x = 50;
dummy.position.z = 50;
scene.add( dummy );
var cube = new THREE.Mesh( new THREE.CubeGeometry( 100, 100, 100 ), new THREE.MeshBasicMaterial() );
cube.position.x = - 50;
cube.position.z = - 50;
dummy.add( cube );
Спасибо за ответ.
К сожалению, куб в вашем примере по-прежнему вращается вокруг своей локальной оси, проходящей через его центр, что бы я ни называл:
function rotateAroundObjectAxis( object, axis, radians ) { .. }
или же
function rotateAroundWorldAxis( object, axis, radians ) { .. }
Что я действительно хочу выяснить, так это то, как сместить ось вращения конкретного объекта.
Большое спасибо.
Вы пытались вращать манекен / контейнер вместо куба?
Хорошая точка зрения. Так работает.
Но почему не все так однозначно :-)?
Я думаю, это должна быть какая-то арифметика матриц с использованием функции, которую я предложил в моем первоначальном посте, или что-то более удобное.
function rotateAroundArbitraryAxis( object, axisDirection, axisBasePoint, radians ) { .. }
под axisBasePoint я имею в виду точку, через которую проходит указанная ось.
С наилучшими пожеланиями.
@oosmoxiecode Упс! Да, забыл об этом в моем фрагменте.
@Landlord Ну, для меня это просто. Это даже не требует знания матриц;) Я думаю, это просто вопрос мышления по-другому ... В любом случае, внутри происходят одни и те же вычисления матриц.
Самый полезный комментарий
Что насчет этого?