Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 3
Всего онлайн: 3
Зарегистрировано юзеров: 6479
Комментариев на сайте: 647
Новый юзер: AincOfGola



Последние комментарии
c
Cmertb06 прокомментировал "Урок 1 - Инициализация OpenGL":
Возможно ли рисовать на экране? Например у Screen.Monitors[0] есть свойство Handle?
Aqel прокомментировал "Урок 71 - Работа с сжатыми файлами":
uses ...sevenzip, ... function ProgressCallback(sender: Pointer; total: boolean; value: int64): HRESULT; stdcall; begin if total then Form1.sprgrsbr1.Max:= value else Form1.sprgrsbr1.Position:= value; Result:= S_OK; end; function Decompress(FileName, DestDir, ArcFname: String; ArcDir: Boolean ): Boolean; var i: Integer; ItP: string; items: array[1..11] of Cardinal; sprgrsbr1: TsProgressBar; begin Result:= False; Application.ProcessMessages; try with CreateInArchive(CLSID_CFormat7z) do begin OpenFile(FileName); SetProgressCallback(sprgrsbr1, ProgressCallback); for i:= 1 to NumberOfItems - 1 do if not ItemIsFolder[i] then //ExtractItem(items[i], Steam, False); - как ей пользоваться в душе не понимаю... ExtractTo(DestDir); end; finally Result:= True; end; end;

Урок 4 - Нормали

  Нормаль – это вектор, перпендикулярный к плоскости. С помощью нормалей OpenGL рассчитывает освещённость примитива. Чем сильнее отклонён вектор нормали от источника света, тем меньше будет яркость примитива. Нормаль задаётся функцией glNormal3f(x, y, z). Где x, y, z – координаты вектора нормали колеблющиеся от -1 до 1.
Например:
Нарисуем квадрат и зададим нормаль перпендикулярную к нему.

glBegin(GL_QUADS); //рисуем квадрат
 glNormal3f(0,0,1); //задаём нормаль
 glVertex3f(-1,1,0); //первая вершина
 glVertex3f(1,1,-0); //вторая вершина
 glVertex3f(1,-1,-0); //третья вершина
 glVertex3f(-1,-1,0); //четвёртая вершина
glEnd;
Нормаль можно задавать, как и от грани, так и от вершин, но для этого функцию надо вызывать перед рисованием каждой вершины.
glBegin(GL_QUADS); //рисуем квадрат
 glNormal3f(0,0,1); //задаём нормаль
 glVertex3f(-1,1,0); //первая вершина
 glNormal3f(0,0,1); //задаём нормаль
 glVertex3f(1,1,-0); //вторая вершина
 glNormal3f(0,0,1); //задаём нормаль
 glVertex3f(1,-1,-0); //третья вершина
 glNormal3f(0,0,1); //задаём нормаль
 glVertex3f(-1,-1,0); //четвёртая вершина
glEnd;
Никакой разницы не будет. Нормали от вершин следует задавать для получения сглаженной фигуры (не рубленной). Увидеть разницу между сглаженной моделью и рубленной, в примере предыдущего урока необходимо добавить в конец процедуры FormCreate:
glShadeModel(GL_FLAT) //Режим без сглаживания 
//или
glShadeModel(GL_SMOOTH) //Сглаживание. По умолчанию установлен режим GL_SMOOTH.

glShadeModel(GL_SMOOTH)

glShadeModel(GL_FLAT)

Для того чтобы лучше понять что такое нормаль, я создал пример иллюстрирующий работу нормали.


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

В следующем уроке мы узнаем, что такое материалы и освещение в OpenGL.

Зарегистрируйтесь или авторизуйтесь, чтобы скачать.

Источник: www.thedelphi.ru
Автор: Клящицкий Виталий
Опубликовано: 20 Мая 2012
Просмотров: 23179

Урок 3 - Объёмные фигуры Урок 5 - Материалы и освещение

Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.



аватар Добавил(а): gasmator [Новичок] Дата: 2013-05-11
подскажите почему у меня фигуры получаются прозрачными




аватар Добавил(а): postfedor [Новичок] Дата: 2015-09-18