Определение поворота на объект

У меня есть 3d объект(танк), который загружен в OpenGL. Загружено отдельно башня и остальная часть. Подскажите пожалуйста как сделать так чтобы башня(с танка) поворачивалась в определенную точку в пространстве или подскажите как просчитать матрицу поворота?
0      1136        30.01.2011        14

0 
30.01.2011 00:00:00
Танк загружен по примеру класса из урока 13, или у вас собственный класс загрузки объектов?
0 
30.01.2011 00:00:00
да, по примеру 13 урока.
0 
30.01.2011 00:00:00
Сразу скажу, что класс придется допиливать — его назначение — учебный пример.
После того, как модель загружена, ее отдельные части (под-объекты) лежат в структуре limbs.

После создания модели мы создаем дисплейный список, визуализировав всю модель, пройдясь по всем под-объектам:

for (int l = 0; l <= count_limbs; l++)
{
...


Однин из этих под-объектов — это башня танка. Таким образом, чтобы крутить ее программно, вам придется немного переделать класс так, чтобы каждый лимб был отдельным дисплейным списком.

Дополнительно, нужно будет иметь структуру, которая будет хранить углы поворота для всех под-объектов, и создать функцию, которая позволит задавать новые координаты для под-объекта.

Что получается.
То, как работает класс сейчас:

1. загружается модель, под-объекты находятся в структурах limbs.
2. создается 1 список отображения, куда компилируется визуализация всех под-объектов.
3. вызывается отрисока объекта — объект визуализируется целиком.

Как надо доработать класс:

1. Загружается модель.
2. Имеется надстройка над каждым под-объектом, хранящая его углы поворота (или матрицу, как вам удобнее)
3. Создается список отображения отдельно для каждого под-объекта (а не один общий), при этом имеется структура данных, хранящая углы поворотов и функции для изменения этих данных.
4. При визуализации отрисовываются под-объекты из списка отображения, при этом для каждого применяются поворот, на основе структуры данных.
5. Опрос клавиатуры изменяет углы для заданного лимба. При визуализации мы поворачиваем под-объект в соответствии с его углами, потом выдергиваем его дисплейный список. Это происходит в цикле и для всех под-объектов, но так как мы меняем координаты объекта в целом (движение танка) и изменяем углы поворота только одного под-объекта (вращение башни) — мы достигаем поставленой цели.

Т.е. получаем простенькую процедурную анимацию объекта.

З.Ы.
Был у меня как раз такой исходник, но 98% что не сохранился. Гляну конечно…
0 
30.01.2011 00:00:00
позволит задавать новые координаты для под-объекта.имел ввиду новые углы поворота
0 
30.01.2011 00:00:00
Это уже сделано(ну типо сделано). Мне нужно повернуть башню на другой 3d объект(в сторону его точки). Как можно рассчитать угол либо матрицу поворота?
0 
30.01.2011 00:00:00
ну тут все просто — координаты обоих объектов известны, след. имеем катеты, вычисляем гипотенузу — остается по теореме косинусов получить угол, на который нужно повернуться. Ну и сам поворот разбить на итерации.

В реальном времени получится что башня все время наводится на вражеский танк.
0 
31.01.2011 00:00:00
Спасибо огромное!!!
0 
31.01.2011 00:00:00
А не могли бы Вы подробнее как это сделать?
Таблица Брадиса для этого нужна??
0 
01.02.2011 00:00:00
можно сделать по другому
находим те катеты и tan2(x2-x1, y2-y1);
и все, потом переводим в градусы и будет вам поворот, у меня так и сделано
0 
01.02.2011 00:00:00
Немного дополню:
Atan2(x2-x1, y2-y1); //чтоб люди не путались=)

А для перевода радиан в градусы делаем
"результат" / PI * 180 = градусы
Если на C# все есть в классе Math(Math.Atan2(...),Math.PI)
0 
01.02.2011 00:00:00
Как раз C#.
Только че то поворачует не туда, хотя угол вроде правильный но не в ту сторону.
Может из за того что объект на который поворачуем в минусе(x -70, y -240)?!
0 
01.02.2011 00:00:00
там вроде -90 градусов сделать надо, мне помогло
0 
01.02.2011 00:00:00
блин вопрос не так догнал, там без разници в каких он координатах стоит, еще глянть может поможет угол умножить на -1

опиши подробнее проблему
0 
01.02.2011 00:00:00
Кульно, и не нужна гипатенуза. Сенк.
^
Регистрация
Регистрируясь, вы принимаете правила сайта. Если вы не получили код подтв. регистрации - не забудьте проверить папку спам.
Логин*
Email*
Пароль*
Подтверждение пароля*
 
Логин*
Код*
 
×
Восстановление пароля
Пожалуйста, заполните поля, после чего вы получите код подтверждения на ваш Email. Если код не пришел в течении нескольких минут - проверьте папку спам.
Логин

или Email
Логин*
Код подтверждения*
Новый пароль*
Подтверждение пароля*
×
Авторизация
  • Используйте вашу учетную запись на Facebook.com для входа на сайт.
  • Используйте вашу учетную запись VKontakte для входа на сайт.
  • Используйте вашу учетную запись Google для входа на сайт.
Авторизуйтесь с помощью соц. сети или с помощью аккаунта на сайте:
×