Правильная обработка объектов и источников света в 3D-пространстве - OpenGL - PullRequest
0 голосов
/ 13 декабря 2011

Я пытаюсь все настроить и запустить на своем движке, но не могу понять, в каком порядке добавить объекты и источники света, чтобы все правильно отображалось.

Я настроил матрицу проекции и просмотра модели в своемкурсив:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();                            

gluPerspective(75.0f,(GLfloat)width/(GLfloat)height, 0.1f , 1000.0f);

glMatrixMode(GL_MODELVIEW);                         
glLoadIdentity(); 

Затем при рендеринге геометрии я очищаю буфер, загружаю матрицу идентификаторов и обновляю свою камеру.

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

// Camera updates
glRotatef(camera.anglePitch, 1.0f, 0.0f, 0.0f);
glRotatef(camera.angleYaw, 0.0f, 1.0f, 0.0f);
glTranslatef(-camera.position.x, -camera.position.y, -camera.position.z);

// Now render
level.render();

Мой уровень - камера, который я собираю, это координаты глаза, движущиеся вокруг.Я пытаюсь визуализировать объекты и источники света на своем уровне, чтобы они отображались в нужных местах.

Мне нужно добавить объекты в определенных точках мира.Например, тор в (10, 10, 25).Есть ли что-то, что мне нужно сделать перед тем, как рендерить объекты тора, чтобы они правильно отображались в 10, 10, 25?Нужно ли рендерить, а затем переводить их, например?

Кроме того, часть 2 имеет отношение к источникам света.Это почти тот же вопрос.Какое внимание я должен иметь при рендеринге, скажем, свет 50, 50, 50?Могу ли я просто установить свет в нормальном режиме или сделать это снова?Или я задумываюсь над этим?

1 Ответ

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

Если я понимаю проблему, я бы согласился, что вы обдумываете это.Преобразования из glTranslate и glRotate применяются к матрице вида модели, на которую умножаются все ваши вершины, чтобы получить координаты глаза, которые впоследствии будут обрезаны в проекции.Те же преобразования применяются и к вашим источникам света.

Вы также можете использовать glPopMatrix и glPushMatrix, чтобы применять различные состояния матрицы просмотра модели к разным вершинам.

Я также отсылаю вас к вопросу 9.070в http://www.opengl.org/resources/faq/technical/transformations.htm

...