Я уже некоторое время работаю над космическим симулятором. Сначала я использовал свой собственный 3D-движок с программным растеризатором.
Но я сдался, когда подошло время реализации текстур. Теперь я снова начал через некоторое время, и теперь я использую Opengl (с SDL) вместо рендеринга 3D-моделей.
Но теперь я наткнулся на другую кирпичную стену.
Я не могу понять, как сделать правильный поворот. Будучи космическим симулятором, я хочу, чтобы элементы управления были похожи на авиасимулятор.
с использованием
glRotatef(angleX, 1.0f, 0.0f, 0.0f);
glRotatef(angleY, 0.0f, 1.0f, 0.0f);
glRotatef(angleZ, 0.0f, 0.0f, 1.0f);
или подобное,
не работает должным образом, если я поверну модель (космический корабль) сначала на 90 градусов влево, а затем поверну ее «вверх». Вместо этого он катится.
Вот изображение, иллюстрирующее мою проблему.
Я попробовал несколько трюков, чтобы попытаться противостоять этому, но почему-то я чувствую, что что-то упускаю. Не помогает и то, что практически невозможно найти примеры вращения в стиле симулятора.
Поэтому я ищу примеры, ссылки и теорию вращения 3d-модели (например, космического корабля, самолета).
Должен ли я использовать 3 вектора (влево, вверх, вперед) для ориентации, так как мне также придется рассчитывать такие вещи, как ускорение от двигателей и прочее, которое будет меняться при вращении (ориентации?) направление, как ракетные двигатели.
Я не очень хорошо разбираюсь в математике, и попытки визуализировать решение просто вызывают головную боль.