кватернионы для Opengl ES

Я работаю с Opengles, чтобы создать крупье, и это может показаться глупым вопросом, но при использовании кватернионов для представления вращения, что мне делать, если я хочу, чтобы вращение было вокруг другой точки, чем исходная точка, и должен ли я использовать кватернион единицы или нет . я предполагаю, что я могу вращать, а затем переводить, меняя центр вращения, и я не собираюсь использовать единичные кватернионы. Это правильный путь?


person Steve    schedule 11.08.2011    source источник
comment
Почему бы вам не использовать единицу кватерниона?   -  person Marcelo Cantos    schedule 11.08.2011
comment
ну, единичный кватернион дал бы мне вращение на единичной трехмерной сфере. И я догадался, что это не то, что я хочу, поскольку точка, которую я хочу повернуть, находится на произвольной сфере.   -  person Steve    schedule 11.08.2011
comment
Произвольный кватернион не предлагает достаточно степеней свободы для вращения вокруг произвольной точки (он предлагает только одну дополнительную степень, тогда как для точки требуется три). Вы также не можете избежать применения смещения.   -  person Marcelo Cantos    schedule 11.08.2011
comment
Итак, мне нужно использовать кватернион единиц и применить смещение к центру вращения, чтобы я мог получить вращение вокруг этого центра?   -  person Steve    schedule 11.08.2011


Ответы (1)


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

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

person Christian Rau    schedule 11.08.2011
comment
то, что я сделал, на самом деле довольно просто. Я взял свои углы Эйлера, преобразовал их в кватернионы, а затем применил вращение к точке, умножив кватернион на эту точку. - person Steve; 11.08.2011
comment
Да и? В своем вопросе вы просили повернуть вокруг произвольной точки, поэтому теперь вам нужно обернуть это вращение между двумя переводами, как сказано. - person Christian Rau; 11.08.2011
comment
ну это странно. скажем, я хочу, чтобы мой центр вращения был (0,-2,0), а точка, которую я хочу вращать, - (1,0,0). все, что мне нужно сделать, это перевести более позднее значение в (1,-2,0), и центр вращения автоматически изменится с (0,0,0) на (0,-2,0). Когда я поворачиваю свою точку (1,-2,0) на 90° против часовой стрелки вокруг оси y, скажем, она выглядит так, как будто она вращается вокруг (0,-2,0) вместо (0,0,0) без любой перевод. - person Steve; 11.08.2011
comment
@Steve Нет, вы переводите на (0,2,0), поэтому точка становится (1,2,0), а центр (0,-2,0) перемещается на (0,0,0). Затем вы вращаете вокруг оси Y через начало координат, и точка становится (0,2,-1). Затем вы переводите обратно на (0,-2,0), и точка становится (0,0,-1). В данном случае перевод был совершенно бесполезен, так как вы переводили по оси вращения. Так что это только пример, который делает перевод ненужным. - person Christian Rau; 11.08.2011
comment
@Steve Если это помогло, приветствуется голосование (и, возможно, принятие). - person Christian Rau; 11.08.2011