 Книги
КнигиПосле всей этой теории, давайте приступим собственно к 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;
До полноценного примера пока недостает, ведь это только окружающий свет. Скачайте исходный код и можете позабавляться с ним.
| FPC | 3.2.2 | release | 
| Lazarus | 3.2 | release | 
| MSE | 5.10.0 | release | 
| fpGUI | 1.4.1 | release |