После всей этой теории, давайте приступим собственно к OpenGL. Начнем с рассмотрения окружающего света.
Прежде всего, нам потребуются некоторые переменные для хранения параметров нашего освещения. Свет (как было упомянуто ранее) задается четырьмя параметрами, так что мы возьмем array[0..3] of double
.
Теперь произведем инициализацию. Если вам непонятно, что здесь происходит, то прочитайте последнюю главу еще раз.
glShadeModel(GL_SMOOTH); // Set Shading Model AmbientLight[0] := 1.0; AmbientLight[1] := 1.0; AmbientLight[2] := 1.0; AmbientLight[3] := 1.0; glEnable(GL_LIGHTING); glLightModelfv(GL_LIGHT_MODEL_AMBIENT, @AmbientLight); glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
Сначала мы задали теневую модель. Это — способ вычисления теней. Мы выбрали GL_SMOOTH
.
Затем мы определили интенсивность окружающего света. Этот сделано путем задания значений от 0.0 до 1.0 элементам массива.
Теперь мы активируем освещенность в OpenGL. На данный момент у нас есть только окружающий свет, так что нет надобности задавать другие параметры. Модель освещения определяется с помощью glLightModelfv
. Так мы сообщаем OpenGL, какой тип света мы желаем использовать, и передаем ему наш массив.
Потом переходим к материалу. Мы устанавливаем его посредством glColorMaterial
. Это It is the way наши поверхности взаимодействуют с освещением.
В основном это все. Поскольку здесь мы имеем дело с окружающим светом, нам не надо указывать местоположение источника. Мы просто нарисуем сцену и повращаем ее.
procedure Draw_OpenGL; begin glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef( 0.0,-5.0,-50.0); glRotatef( 80,-1.0, 0.0, 0.0); glRotatef( rotation, 0.0, 0.0, 1.0); glBegin(GL_QUADS); glColor3f( 0.0, 0.0, 0.5 ); glVertex3f( 10.0,-10.0, 0.0); glVertex3f( 10.0, 10.0, 0.0); glVertex3f(-10.0, 10.0, 0.0); glVertex3f(-10.0,-10.0, 0.0); glEnd(); glTranslatef( 0.0, 0.0, 3.0); glColor3f( 0.7, 0.0, 0.0 ); glBegin(GL_QUADS); glVertex3f( 3.0,-3.0, 3.0); glVertex3f( 3.0, 3.0, 3.0); // oben glVertex3f(-3.0, 3.0, 3.0); glVertex3f(-3.0,-3.0, 3.0); glVertex3f( 3.0, 3.0,-3.0); glVertex3f( 3.0, 3.0, 3.0); // rechts glVertex3f( 3.0,-3.0, 3.0); glVertex3f( 3.0,-3.0,-3.0); glVertex3f(-3.0, 3.0, 3.0); glVertex3f(-3.0, 3.0,-3.0); // links glVertex3f(-3.0,-3.0,-3.0); glVertex3f(-3.0,-3.0, 3.0); glVertex3f( 3.0, 3.0, 3.0); glVertex3f( 3.0, 3.0,-3.0); // hinten glVertex3f(-3.0, 3.0,-3.0); glVertex3f(-3.0, 3.0, 3.0); glVertex3f( 3.0,-3.0,-3.0); glVertex3f( 3.0,-3.0, 3.0); // vorne glVertex3f(-3.0,-3.0, 3.0); glVertex3f(-3.0,-3.0,-3.0); glEnd(); end;
До полноценного примера пока недостает, ведь это только окружающий свет. Скачайте исходный код и можете позабавляться с ним.