Воскресенье, 18.02.2018, 02:51
Мир Irrlicht
Главная | Форум | Статьи | Файлы | Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Irrlicht » Обсуждение движка » Вращение SceneNode относительно любой точки
Вращение SceneNode относительно любой точки
evg1985Дата: Пятница, 03.09.2010, 21:45 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 2
Репутация: 0
Статус: Offline
Подскажите господа, как мне реализовать вращение SceneNode относительно точки, которая например лежит за пределами самого SceneNode. Варианты, типа создать еще один SceneNode, в него добавить дочерний с необходимыми координатами, а потом вращать первый, не подходит.

Вот графическое представление, того что мне надо
http://pixs.ru/showimage/Rotatejpg_6838204_947322.jpg

 
RAngerДата: Суббота, 04.09.2010, 17:17 | Сообщение # 2
Рядовой
Группа: Пользователи
Сообщений: 13
Репутация: 0
Статус: Offline
Quote (evg1985)
Варианты, типа создать еще один SceneNode, в него добавить дочерний с необходимыми координатами, а потом вращать первый, не подходит.

Напиши почему:) Если не подходит, то
можно написать свою функцию для поворота вокруг произвольной точки ( не думаю, что этот вариант проще, чем поворот вокруг helper - a, который почему - то не подходит ). Загляну ка я в исходники лихта по этому поводу smile
 
greenyaДата: Пятница, 10.09.2010, 18:18 | Сообщение # 3
Admin
Группа: Администраторы
Сообщений: 32
Репутация: 1
Статус: Offline
Привет!

Попробуй так:

Code
core::matrix4 m;  
m.setRotationCenter(myCenter);  
m.setRotationDegrees(myRotation);  
core::matrix4 from;  
from->setRotationAngle(node->getRotation());  
from->setTranslation(node->getPosition());  
core::matrix4 newM=m*from;  
node->setPosition(from->getTranslation());  
node->setRotation(from->getRotation());
 
evg1985Дата: Воскресенье, 12.09.2010, 01:24 | Сообщение # 4
Рядовой
Группа: Пользователи
Сообщений: 2
Репутация: 0
Статус: Offline
Quote
ридётся учить математику XD

Ага, уже повторил курс аналитической геометрии:)
Quote
core::matrix4 m;
m.setRotationCenter(myCenter);
m.setRotationDegrees(myRotation);
core::matrix4 from;
from->setRotationAngle(node->getRotation());
from->setTranslation(node->getPosition());
core::matrix4 newM=m*from;
node->setPosition(from->getTranslation());
node->setRotation(from->getRotation());

А это интересно, надо попробывать

Но я решил это несколько по своему. Мне необходимо было вращать объект в плоскости XZ и для этого я пользовался таким способом:

Code
object->setPosition(pointPosition + radius*vector3df(sin(angle*PI/180), 0, cos(angle*PI/180)));

Где object - объект который неободимо вращать вокруг точки
pointPosition - координаты точки вокруг которой необходимо вращать
radius - радиус вращения
angle - угол, на который необходимо повернуть
Вот такая вот математика. Здесь задействовано только вращение в плоскости XZ, для других необходимо немного переделать код.
 
Форум » Irrlicht » Обсуждение движка » Вращение SceneNode относительно любой точки
Страница 1 из 11
Поиск:

Copyright MyCorp © 2018 Создать бесплатный сайт с uCoz