[opengl] провращать объект
ось Y смещаетсяИли может объект поворачивается/смещается? Всё относительно
> —
> "Расширь своё сознание"
Прошу помочМягкий знак, motherfucker, do you speak it?
неподходит, ось Y смещается и в итоге вторая уже вращает "не по" YВращай вначале по Y, хуле.
Если тебе и это не подходит, то ты сам не понимаешь, что тебе нужно и что вообще суть вращение.
ну очевидный вариант - делать второй поворот относительно повернутой в обратную сторону оси Y [0,cos(a -sin(a)], где "a" - угол поворота относительно X
Почитай ещё про yaw-pitch-roll, для них есть готовые формулы
Есть шарик. Он катается по полю. Координаты шарика вычисляются один раз, поэтому катание идет методом glRoutef;
подскажите как сделать катание реалистичным.
glRotatef ?
Я так понимаю, у тебя текстурированный шарик, раз так хочется его вращать?
Катится он примерно так же, как и колесо. Находишь расстояние, угол поворота, поворачиваешь шарик. Для удобства можно перемещать систему координат так, чтобы шарик всё время оставался в начале координат.
НО все хорошо пока шарик катится по прямой, а как только направление меняется, вращение перестает быть адекватным.
З.Ы. катается по 2-х мерному полю
glTranslatef в начало координат
glRotatef как надо
glTranslatef обратно
В каждом кадре относительно предыдущего кадра шарик катится по прямой. Находим ось вращения и угол.
Храним матрицу преобразования, задающую суммарное (от начала анимации) вращение шарика. Изначально она единичная. На каждом шаге умножаем ее на полученную матрицу поворота, и сохраняем.
Если лень писать всю матричную арифметику, то glMultMatrixf, glGet(GL_MODELVIEW_MATRIX, ...) и glRotatef тебе в помощь.
Хороший совет, кстати. Я так делал управление вращением трехмерного объекта с клавы.
а вообще матрица поворота на произвольный угол в инете валяется - с её помощью можно сделать что угодно
что вообще суть вращение.суть — множественное от есть, motherfucker, do YOU speak it?
только точность от многократного умножения матриц сильно пострадаетЯ проверял определитель - он оставался близким к 1, даже стал ближе, чем в начале (в начале была не единичная матрица поворота). Ортогональность не проверял, но думаю с ней тоже все ок.
Решение такое:
glLoadIdentity;
c = sqrt(angley* angley + anglex* anglex);
glRotatef(c*360, -angley/c, anglex/c, 0.0);
glMultMatrixfGLfloat*)view_matrix);
glGetFloatv(GL_MODELVIEW_MATRIXGLfloat*) view_matrix);
glLoadIdentity;
glTranslatef(x, y, 0.0);
glMultMatrixfGLfloat*)view_matrix);
Если есть конкретные предложение как это можно оптимизировать, то подскажите пжлст.
Хотя работает шустро, но мне кажется что извлечение матриц - дорогая операция...
Если у тебя это делается раз в кадр, то это мелочи.
Оставить комментарий
Kent1331
Прошу помоч, сам я уже бошку сломал.есть объект, его нужно провращать на опр. угол по оси X и на опр. угол по оси Y
по понятным причинам
glRotatef(12,1.0,0.0,0.0);
gtRotatef(10,0.0,1.0,0.0);
неподходит, ось Y смещается и в итоге вторая уже вращает "не по" Y
кто нибудь подскажите как это решить.
Почитал про квантанионы, недогнал как их заюзать в данном случае.