glulookat () использование-opengl и C ++ - PullRequest
0 голосов
/ 27 декабря 2011

0 Не могли бы вы помочь мне с этим сценарием: у меня есть трехмерный мир, и я хочу расположить камеру от первого лица (настоящей целью было бы представление от первого лица изнутри космического корабля во время путешествиячерез пояс астероидов).Каковы будут параметры для glulookat в этом случае?Я подумал:

gluLookAt(30, 30, 30, 0, 0, 0, 0, 1, 0);//the up vector would be normal y axis

Было бы это правильно?

Также, если бы я хотел, чтобы камера двигалась вместе с кораблем, как бы это было сделано?При перемещении корабля я также должен перемещать «глазные» координаты из glulookat?Что-то вроде координат глаза (первые 3 параметра glulookat) должны совпадать с координатами корабля?

1 Ответ

1 голос
/ 27 декабря 2011

Предлагаемый вами вызов gluLookAt установит камеру на (30,30,30) и укажет ее на начало координат.

gluLookAt(Ship_Position_X,Ship_Position_Y,Ship_Position_Z,
          Ship_Forward_X,Ship_Forward_Y,Ship_Forward_Z,
          0,1,0);

Это больше похоже на то, что вам нужно. Вам придется называть его каждый кадр, чтобы камера следила за движением корабля. Если вы хотите, чтобы корабль выполнял бочку, вам понадобятся дополнительные переменные для отслеживания вектора подъема.

Мне нравится иметь какую-то структуру для хранения координат, чтобы я мог перегружать функции gl, чтобы принимать их и записывать более короткие вызовы функций, например

// roll your own glVec, or use a co-ordinate class provided by a library you happen to be using.
inline void gluLookAt(glVec position, glVec forward, glVec up)
{
    gluLookAt(position.x,position.y,position.z,forward.x,forward.y,forward.z,up.x,up.y,up.z);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...