Делаю одну програмку на OpenGL. Пока только начал делать. Попытался сделать камеру, как описано где-то на gamedev.ru. Но не работает. Исходники прилагаются (архив не rar, а 7z) Файлы:
3dg.cbp - проект code::blocks
10points.png - текстура
txtmesh1.txt - моделька куба
mesh.h - файл с определением классов q_mesh (моделька из квадов), quad (собственно квад), и определение функции load_text_mesh для загрузки модельки из файла
mesh.cpp - реализация mesh.h
texman.h - объявление менеджера текстур
texman.cpp - реализация texman.h
main.cpp - инициализация SDL, OpenGL, отрисовка изображения, камера (короче, смотреть сюда)
Используемые библиотеки: OpenGL, DevIL (для загрузки текстур), и SDL.
Принцип действия камеры понятен из код функций Draw() и SetCam()
UPD. Глюки проявляются в том, что если поездить мышью по кругу, то куб наклоняется. Почему так? И как сделать чтобы не было так?
OpenGL (камера)
Модератор: Модераторы разделов
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
OpenGL
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: OpenGL
Понял, почему так: второй поворот осуществляется в новой системе координат, где вектор, вокруг которого осуществляется второй поворот, уже наклонен. Как от этого избавится?
PS. Рылся в исходниках OGRE, оттуда и догадался, но там повороты задаются кватернионами, а я о кватернионах ничего не знаю (кстати, где взять о них что-нибудь на русском понятное и с примерами использования?), так что как они этого добились так и не понял.
PS. Рылся в исходниках OGRE, оттуда и догадался, но там повороты задаются кватернионами, а я о кватернионах ничего не знаю (кстати, где взять о них что-нибудь на русском понятное и с примерами использования?), так что как они этого добились так и не понял.
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: OpenGL
Просто может принять какую-то систему поворота. Например, если это корабль в космосе, то такое поведение - норма. После кругового включения поворота корабль действительно повернётся. В обычных играх обычно принимается система азимут-высота. Т.е. у Вас есть два угла - один - поворот в горизонтальной плоскости (0 — 360), второй - по вертикали (-90 — +90). Тогда просто:
В этом случае не надо никаких матриц сохранять.
Код: Выделить всё
glLoadIdentity();
glRotatef( rotX, 0, 1, 0 );
glRotatef( rotY, 1, 0, 0 );В этом случае не надо никаких матриц сохранять.
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: OpenGL
NickLion писал(а): ↑22.05.2010 23:41Просто может принять какую-то систему поворота. Например, если это корабль в космосе, то такое поведение - норма. После кругового включения поворота корабль действительно повернётся. В обычных играх обычно принимается система азимут-высота. Т.е. у Вас есть два угла - один - поворот в горизонтальной плоскости (0 — 360), второй - по вертикали (-90 — +90). Тогда просто:
Код: Выделить всё
glLoadIdentity(); glRotatef( rotX, 0, 1, 0 ); glRotatef( rotY, 1, 0, 0 );
В этом случае не надо никаких матриц сохранять.
Спасибо, теперь глюка вроде нет. Хотя теоретически он должен быть: все равно второй поворот осуществляется вокруг наклоненного вектора.
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: OpenGL
То есть преобразования выполняются в обратном порядке?
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64