Книги

OpenGL / FPC - Глава 13

После всей этой теории, давайте приступим собственно к 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;

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

Актуальные версии
FPC3.2.2release
Lazarus3.2release
MSE5.10.0release
fpGUI1.4.1release
links
Стоимость самоклеющихся наклеек с логотипом узнать на сайте saharkoff.ru в Волгограде.