
Определение поворота на объект
У меня есть 3d объект(танк), который загружен в OpenGL. Загружено отдельно башня и остальная часть. Подскажите пожалуйста как сделать так чтобы башня(с танка) поворачивалась в определенную точку в пространстве или подскажите как просчитать матрицу поворота?
После того, как модель загружена, ее отдельные части (под-объекты) лежат в структуре limbs.
После создания модели мы создаем дисплейный список, визуализировав всю модель, пройдясь по всем под-объектам:
for (int l = 0; l <= count_limbs; l++)
{
...
Однин из этих под-объектов — это башня танка. Таким образом, чтобы крутить ее программно, вам придется немного переделать класс так, чтобы каждый лимб был отдельным дисплейным списком.
Дополнительно, нужно будет иметь структуру, которая будет хранить углы поворота для всех под-объектов, и создать функцию, которая позволит задавать новые координаты для под-объекта.
Что получается.
То, как работает класс сейчас:
1. загружается модель, под-объекты находятся в структурах limbs.
2. создается 1 список отображения, куда компилируется визуализация всех под-объектов.
3. вызывается отрисока объекта — объект визуализируется целиком.
Как надо доработать класс:
1. Загружается модель.
2. Имеется надстройка над каждым под-объектом, хранящая его углы поворота (или матрицу, как вам удобнее)
3. Создается список отображения отдельно для каждого под-объекта (а не один общий), при этом имеется структура данных, хранящая углы поворотов и функции для изменения этих данных.
4. При визуализации отрисовываются под-объекты из списка отображения, при этом для каждого применяются поворот, на основе структуры данных.
5. Опрос клавиатуры изменяет углы для заданного лимба. При визуализации мы поворачиваем под-объект в соответствии с его углами, потом выдергиваем его дисплейный список. Это происходит в цикле и для всех под-объектов, но так как мы меняем координаты объекта в целом (движение танка) и изменяем углы поворота только одного под-объекта (вращение башни) — мы достигаем поставленой цели.
Т.е. получаем простенькую процедурную анимацию объекта.
З.Ы.
Был у меня как раз такой исходник, но 98% что не сохранился. Гляну конечно…
В реальном времени получится что башня все время наводится на вражеский танк.
Таблица Брадиса для этого нужна??
находим те катеты и tan2(x2-x1, y2-y1);
и все, потом переводим в градусы и будет вам поворот, у меня так и сделано
Atan2(x2-x1, y2-y1); //чтоб люди не путались=)
А для перевода радиан в градусы делаем
"результат" / PI * 180 = градусы
Если на C# все есть в классе Math(Math.Atan2(...),Math.PI)
Только че то поворачует не туда, хотя угол вроде правильный но не в ту сторону.
Может из за того что объект на который поворачуем в минусе(x -70, y -240)?!
опиши подробнее проблему