LINUX.ORG.RU

Opengl и поворот.

 ,


2

2

Здравствуйте. Например имеется некий вектор R, и матрица M. Можно ли повернуть матрицу так, чтобы какая нибудь из осей матрицы M (например ось Y) совпадала с вектором R. Понятно, что можно посчитать все углы между осями матрицы и вектором, а потом выполнить соответсвенно 3 поворота по каждой из осей, но хочется найти более простой способ. Кокретно ситуация следующая: есть некоторая модель, и она перемещается относительно какой нибудь точки (в моём случае это центр Земли с координатами 0,0,0) на некоторые координаты. Надо что бы после перемещения модель поворачивалсь к исходной точке «лицом» (в моём случае что бы модель была повёрнута так, что бы плоскость «низа» модели соответсвовала поверхности Земли).

Можно ли повернуть матрицу так, чтобы какая нибудь из осей матрицы M (например ось Y)

Что за бред здесь написан? Какие ещё «оси» у матрицы?

asaw ★★★★★
()

Если просто посчитать матрицу, то формула lookAt() есть в любой мало мальской 3D-библиотеке. Если речь про интерполяцию между углами поворота, то использовать кватернионы вместо матриц, опять же, есть в любой библиотеке.

Dendy ★★★★★
()
Ответ на: комментарий от peregrine

Я хочу избежать геометрического расчёта углов. Мне нужно сгенерировать такую матрицу, что бы её ось совпадала с данным вектором, а остальные оси были бы ему ортогональны.

ZombieCommander
() автор топика
Ответ на: комментарий от Dendy

lookAt() манипулирует матрицой вида, если не ошибаюсь. А мне нужно моедльную матрицу. Кватериноны не хочется тянуть.

ZombieCommander
() автор топика
Ответ на: комментарий от ZombieCommander

сгенерировать такую матрицу, что бы её ось совпадала

Для начала: у матриц нет осей. У матриц есть строки и столбцы.

asaw ★★★★★
()
Ответ на: комментарий от ZombieCommander

Тогда только кватернионы, через силу. Любой кватернион можно привести к матрице поворота. Делается в одну строку с помощью библиотек.

Dendy ★★★★★
()
Ответ на: комментарий от ZombieCommander

Это у тебя произошло непонимание чего ты хочешь. Поэтому ты даже и вопрос задать толком не можешь.

asaw ★★★★★
()
Ответ на: комментарий от peregrine

А он и не в курсе, что в этих матрицах углы))

asaw ★★★★★
()
Ответ на: комментарий от peregrine

Я не хочу вообще углы считать, мне известно направление вектора, которому должна соответсвовать ось Y нового поворота. Судя по всему придётся их считать. Не хочу кватерноины эти пока(

ZombieCommander
() автор топика
Ответ на: комментарий от Dendy

А чем они ему помогут? Один фиг придется углы считать, только не через матрицу поворота, которая элементарно умножается на GPU, а через кватернионы (ещё и по ним придется теорию глянуть).

peregrine ★★★★★
()
Ответ на: комментарий от ZombieCommander

Возьми GLM, это библиотека из одних заголовочников. Умные дядьки давно за вас всё написали, чтобы не велосипедить.

Dendy ★★★★★
()
Ответ на: комментарий от asaw

Почему? Весь софт должен быть сертифицирован на военное применение, если тебе Васёк напишет qt10 ты сразу будешь на нём ракетами управлять?

ZombieCommander
() автор топика
Ответ на: комментарий от ZombieCommander

Если тебе не надо вращать, то подготовь данные заранее. Открой 3D редактор и поверни объект как положено. Если тебе надо вращать, то придется считать углы.

peregrine ★★★★★
()
Ответ на: комментарий от ZombieCommander

Почему? Весь софт должен быть сертифицирован на военное применение

Ага, диверсионное)

asaw ★★★★★
()
Ответ на: комментарий от Dendy

А какая разница? Если вектор - константа, то поверни данные заранее, если нет, то придется считать углы для поворота.

peregrine ★★★★★
()
Ответ на: комментарий от Dendy

Насколько я понял у него изначально угол поворота задаётся вектором.

Если вектором задаются только углы поворота, то никакие кватернионы нафиг не нужны.

asaw ★★★★★
()
Ответ на: комментарий от peregrine

Вектор не константа, а меняется в процессе моделирования. Суть то как раз в том, что зачем считать углы, когда уже известен вектор.

ZombieCommander
() автор топика
Ответ на: комментарий от Dendy

Ну это функция создаёт кватернион из углов, а сам кватернион - это не углы Эйлера, если не ошибаюсь.

ZombieCommander
() автор топика

тему не читал: кватернион.

invy ★★★★★
()
Ответ на: комментарий от peregrine

Ну да конечно, мы комплексные числа и матрицы начали применять в схемотехнике курсе на третьем. И это в спецвузе (-:

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

Хм, я как вспомню у меня это все на первом было. На третьем схемотехника тоже, но комплексная плоскость и комплексные числа шли во втором полугодии матана как я помню. А может в первом полугодии второго курса. А матрицы были на первом, точно помню. Да и в школе, кажется, были комплексные числа или я их уже знал в старших классах.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 2)
Ответ на: комментарий от peregrine

Если ты пишешь софт для оборонки, мне страшно за страну

зря ты так, нормальный вопрос. ну, да, не гениальный, но нормальный. бывает намного хуже, особенно для госструктур, и от страны это кстати не зависит

upcFrost ★★★★★
()
Ответ на: комментарий от asaw

Жаль эту страну.

Просто со времён KDE 3.5 нормальных DE для GNU/Linux так и не появилось. Вот и сидят на Qt 3. Надо бы им TDE показать, может хоть патчи засылать будут.

EXL ★★★★★
()
Ответ на: комментарий от peregrine

PS. Если ты пишешь софт для оборонки, мне страшно за страну.

А ты сам готов за 50К пойти туда работать?

EXL ★★★★★
()
Ответ на: комментарий от EXL

При чем тут DE и библиотеки, когда человек элементарно не в курсе основ аналитической геометрии?

asaw ★★★★★
()
Ответ на: комментарий от asaw

А ты в этом плане. Я думал, что тебе жаль эту страну из-за того, что военные этой страны используют Qt 3.

А насчёт курса аналитической геометрии, так это, люди, которые её достаточно хорошо знают, идут не в военные, в геймдевелоперы или в разработчики какого-либо профессионального графического софта.

Проблема тут в другом. Если бы на той должности в военке, на которой работает ТС, хорошо платили, то аналитическую геометрию там бы знали.

EXL ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.