Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2017, 00:04   #1
SerEngine
Форумчанин
 
Регистрация: 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
SerEngine вне форума Ответить с цитированием
Старый 13.11.2017, 05:55   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Не мучайтесь возьмите Ogre3D и изучите как там всё устроено.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 13.11.2017, 07:11   #3
SerEngine
Форумчанин
 
Регистрация: 28.10.2017
Сообщений: 101
По умолчанию

Я как-бы и написал ответ и почти полное обьяснение всего
SerEngine вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(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