Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


03:14.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru