Войти
ПрограммированиеФорумГрафика

Вращение в OpenGL :)))

Страницы: 1 2 Следующая »
#0
14:36, 13 окт. 2017

Вопрос уж очень тупой, даже не могу понять, где копать :)))
Взялся выстраивать очерёдность вращений в трансформациях и только сейчас увидел косяк с поворотом:
Есть две картинки под углом 90 градусов друг к другу, т.е. крест, если ставить поворот 45 градусов, вертикальная картинка поворачивается вправо на 90 градусов, а если поставить 90, то получается, как на скриншоте - 135 градусов...
Если ставить 180, то будет 225! Кто-нибудь может сообразить, в чём загвоздка?

Изображение удалено

Вот код трансформации:

mCurrent = glm::translate(mModelView, glm::vec3(OpaqueTexturedObjects[i].Position.x, OpaqueTexturedObjects[i].Position.y, OpaqueTexturedObjects[i].Position.z));
mCurrent = glm::rotate(mCurrent, OpaqueTexturedObjects[i].Rotation.x, glm::vec3(1.0f, 0.0f, 0.0f));
mCurrent = glm::rotate(mCurrent, OpaqueTexturedObjects[i].Rotation.y, glm::vec3(0.0f, 1.0f, 0.0f));
mCurrent = glm::rotate(mCurrent, OpaqueTexturedObjects[i].Rotation.z, glm::vec3(0.0f, 0.0f, 1.0f));
mCurrent = glm::scale(mCurrent, glm::vec3(OpaqueTexturedObjects[i].Scale.x, OpaqueTexturedObjects[i].Scale.y, OpaqueTexturedObjects[i].Scale.z));
glUniformMatrix4fv(iModelViewLoc, 1, GL_FALSE, glm::value_ptr(mCurrent));


#1
14:45, 13 окт. 2017

В OpenGL нету такого понятия, как вращение. В координатных системах есть понятие вращения.
Возможно там вращение задается радианами?

#2
14:51, 13 окт. 2017

Ну трансформирую видовую матрицу для поворота объекта Plane с текстурой на 90 градусов, но он почему-то поворачивается на 135 градусов.
Откуда берутся лишние 45 градусов? В чём может быть подвох? Какую информацию дать ещё - вертексный шейдер или что-то ещё?
Видовая матрица формируется функцией glm::lookAt.

#3
15:00, 13 окт. 2017

на скриншоте я вижу угол между плейнами 60 градусов где-то

UPD:вот как выше сказали ~ 58 градусов
Хотя, сама либа в градусах принимает...

#4
15:04, 13 окт. 2017

glasm
В градусах, т.е. грубо говоря:

mCurrent = glm::rotate(mCurrent, 90.0f, glm::vec3(0.0f, 1.0f, 0.0f));
Радианы здесь неуместны :)
#5
15:04, 13 окт. 2017

glasm
между плейнами всегда два угла =)) Точнее между линиями. Между плоскостями их бесконечное множество

#6
15:06, 13 окт. 2017

Daniil Petrov
Тогда у тебя проблемы. Просто так ничео не бывает. Или у тебя меш неправильно исмпортирован, и это какраз 90 градусов обычно, при переводе с другой КС, или ты строишь их не так.

#7
15:08, 13 окт. 2017

Daniil Petrov
GLM работает с радианами, а не с градусами.

#8
15:10, 13 окт. 2017

glasm
> 0.0174533
Перевести в градусы - glm::degrees(radians)?

#9
15:11, 13 окт. 2017
detail::tmat4x4<T> glm::rotate  (  detail::tmat4x4< T > const &   m,
T   angle,
T   x,
T   y,
T   z 
)    
Transforms a matrix with a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in degrees.

https://glm.g-truc.net/0.9.4/api/a00206.html

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

#10
15:17, 13 окт. 2017

glasm
Vlad2001_MFS
Премного благодарен! Добавил конвертацию в радианы, всё стало корректно :)

mCurrent = glm::translate(mModelView, glm::vec3(OpaqueTexturedObjects[i].Position.x, OpaqueTexturedObjects[i].Position.y, OpaqueTexturedObjects[i].Position.z));
mCurrent = glm::rotate(mCurrent, glm::radians(OpaqueTexturedObjects[i].Rotation.x), glm::vec3(1.0f, 0.0f, 0.0f));
mCurrent = glm::rotate(mCurrent, glm::radians(OpaqueTexturedObjects[i].Rotation.y), glm::vec3(0.0f, 1.0f, 0.0f));
mCurrent = glm::rotate(mCurrent, glm::radians(OpaqueTexturedObjects[i].Rotation.z), glm::vec3(0.0f, 0.0f, 1.0f));
mCurrent = glm::scale(mCurrent, glm::vec3(OpaqueTexturedObjects[i].Scale.x, OpaqueTexturedObjects[i].Scale.y, OpaqueTexturedObjects[i].Scale.z));
glUniformMatrix4fv(iModelViewLoc, 1, GL_FALSE, glm::value_ptr(mCurrent));

#11
15:21, 13 окт. 2017

Anders333
> Но мне казалось что с радианами работает, так как у себя я точно их использовал
Ты привел ссылку на GLM_GTX_transform модуль, он в экспериментальной ветке. "Правильная" ссылка вот, модуль GLM_GTC_matrix_transform.

p.s. Ан нет, не в модуле было дело, а в версии. В 0.9.4 всё ещё градусы были.

#12
15:21, 13 окт. 2017

glasm
Хотя надо будет со разобраться с радианами и хранить все повороты в них, чтобы лишний раз не переводить при отрисовке сцены :)

#13
15:28, 13 окт. 2017

glasm
Да с плейнами-то я разберусь, это времянка для эксперимента, главное полностью разобраться с трансформациями :)

#14
15:32, 13 окт. 2017

Вроде в глм есть дефайн для использования градусов напрямую, если я не путаю ничего. Но в любом случае лучше использовать что-то одно

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.