|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.11.2017, 00:04 | #1 |
Форумчанин
Регистрация: 28.10.2017
Сообщений: 101
|
Функция gluLookAt() в glut.
Это не вопрос а ответ, так как я сам искал на него ответ долго.
Здесь я опишу поведение этой функции для FPS шутеров. Речь пойдёт об использовании функции gluLookAt(eyex,eyey,eyez,centerx,ce ntery,centerz,upx,upy,upz); переменные eyex, eyey,eyez принимают движение по координатам x y z. Если нужно что-бы вы шли туда куда направлена камера тогда нужно для каждой клавиши прописать формулу: speed это переменная которая указывает с какой скоростью будет двигаться камера. mlockx и mlocky это значения камеры. вот функция. в ней всё понятно. void mouselook(int x, int y) { MouseXp = MouseX; MouseX = x; if (MouseXp > MouseX)//влево { mlockx = mlockx - mlook; } if (MouseXp < MouseX)//вправо { mlockx = (mlockx + mlook); } MouseYp = MouseY; MouseY = y; if (MouseYp > MouseY)//вверх { mlocky = (mlocky - mlook); } if (MouseYp < MouseY)//вниз { mlocky = (mlocky + mlook); } if (mlockx < -360 || mlockx>360) { mlockx = 0; } if (mlocky > 89.0) { mlocky = 89.0; } cout << "X :" << mlockx << " Y : " << mlocky << endl; } Для передвижения mlockx и mlocky это угол который нуден для перевода в радианы mlock/180*PI это перевод градусов в радианы. Для направления вперед: dx = -sin(mlockx / 180 * PI) * speed; dz = -cos(mlockx / 180 * PI) * speed; Назад: dx = sin(mlockx / 180 * PI) * speed; dz = cos(mlockx / 180 * PI) * speed; Влево: dx = sin(mlockx - 90 * PI) * speed; dz = cos(mlockx - 90 * PI) * speed; Вправо: dx = sin(mlockx - 90 * PI) * speed; dz = cos(mlockx - 90 * PI) * speed; Далее работа с gluLookAt(); Заполняем её: gluLookAt(dx,dy,dz dx-sin(mlockx/180*PI), dy+ tan(mlocky / 180 * PI), dz - cos(mlockx / 180 * PI)); Для координаты X используем синус для Y тангенс для Z косинус и переводим каждое значение в радианы. Рад был помоч. По вопросам пишите на мыло programmer_slava01@mail.ru в лс или в https://vk.com/3gname |
13.11.2017, 05:55 | #2 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Не мучайтесь возьмите Ogre3D и изучите как там всё устроено.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
13.11.2017, 07:11 | #3 |
Форумчанин
Регистрация: 28.10.2017
Сообщений: 101
|
Я как-бы и написал ответ и почти полное обьяснение всего
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
(OpenGL(glut), C++) Функция Времени | Артём Волжанкин | Помощь студентам | 2 | 02.05.2013 12:15 |
Вращение камеры gluLookAt | _PROGRAMM_ | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 20 | 21.12.2012 15:00 |
не работает gluLookat | SAMOUCHKA | Qt и кроссплатформенное программирование С/С++ | 2 | 23.09.2011 18:52 |