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

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 5
Всего онлайн: 5
Зарегистрировано юзеров: 5860
Комментариев на сайте: 626
Новый юзер: Craigwoult



Последние комментарии
c
s1t1n прокомментировал "Урок 9 - Экспорт .3DS модели из 3DS max 2009 в OpenGL":
Отлично.
niaz-gtn прокомментировал "Урок 71 - Работа с сжатыми файлами":
7z.dll - приложите.



Мы в соцсетях
c
Delphi
Урок 1 - Инициализация OpenGL

  Этот курс уроков OpenGL предназначен для программистов, обладающих навыками разработки программ на Delphi.
Давайте разберемся, что такое OpenGL. Википедия гласит: OpenGL (Open Graphics Library — открытая графическая библиотека, графическое API) — спецификация, определяющая независимый от языка программирования платформонезависимый программный интерфейс для написания приложений, использующих двумерную и трёхмерную компьютерную графику.

  В этом уроке мы поймем, как инициализировать OpenGL в Delphi.
Итак, давайте начнем!

  Создадим новый проект (File->New->Application).
Теперь необходимо добавить в секцию uses Модуль OpenGL.
Далее нам надо задать формат пиксела, который будет использоваться в нашем приложении.
Для этого надо:

  • Создать глобальную переменную HRC с типом HGLRC;
var
 Form1: TForm1;
 HRC: HGLRC;
  • Создать процедуру SetDCPixelFormat.
procedure SetDCPixelFormat ( hdc : HDC );
var
 pfd : TPixelFormatDescriptor;
 nPixelFormat : Integer;
begin
 FillChar (pfd, SizeOf (pfd), 0);
 nPixelFormat := ChoosePixelFormat (hdc, @pfd);
 SetPixelFormat (hdc, nPixelFormat, @pfd);
end;
Всё! С форматом пиксела мы закончили.
Далее в обработчике событий Form1 onCreate будет наша инициализация OpenGL.
procedure TForm1.FormCreate(Sender: TObject);
begin
 SetDCPixelFormat(Canvas.Handle); //Применяем формат пиксела заданный ранее
 hrc := wglCreateContext(Canvas.Handle); //Выделяем контекст устройства
 wglMakeCurrent(Canvas.Handle, hrc);
end;
  В этой процедуре системе сообщается, что будет использоваться режим с поддержкой OpenGL. Аргументом функции wglCreateContext является ссылка на контекст устройства, на который будет осуществляться вывод. Сейчас устройством вывода служит окно формы. Для получения этого контекста OpenGL необходима величина типа HDC Здесь, как и во многих других примерах, мы используем факт, что canvas. Handle и есть ссылка на контекст устройства, связанная с окном формы. Сейчас если мы скомпилируем наш проект, то мы ничего не увидим (просто пустая форма).

Form1


  Ничего не происходит, потому что мы еще не рисовали наш буфер. Для этого в обработчике события Form1 onPaint запишем следующий код:
procedure TForm1.FormPaint(Sender: TObject);
begin
 glClearColor (0.5, 0.5, 0.75, 1.0); //Цвет фона
 glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); //Очистка буфера цвета и глубины

 wglMakeCurrent (0, 0);
end;
  Здесь стоит отметить, что первые 3 параметра функции glClearColor (R,G,B,A) задают оттенки красного, зелёного и синего результирующего цвета (в данном случае фиолетовый), а 4 параметр является альфа каналом (прозрачностью фона). Все эти параметры могут принимать значения от 0 до 1.

Теперь давайте скомпилируем наш проект:

Form1


Ура! У меня появилась форма, окрашенная в фиолетовый цвет. Если вы всё сделали правильно, то у вас должно получиться то же самое. Теперь можно поэкспериментировать с цветом формы.

В следующем уроке мы попытаемся нарисовать простые геометрические фигуры: точку, линию, треугольник, квадрат, куб и т.д.

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

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

Урок 2 - Простые примитивы

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



аватар Добавил(а): an1rk4 [Новичок] Дата: 2012-11-16
DC: HDC; в варах в уроке забыл прописать, ошибку выдавал на строке glClearColor (0.5, 0.5, 0.75, 1.0); //Цвет фона добавь поправку в урок)) еще бы неплохо объяснить что это за глобальные переменные DC: HDC и HRC: HGLRC; , с остальным вроде все понятно




аватар Добавил: Feraset [Новичок] Дата: 2012-11-18
WTF? Серый цвет на фоте как был так и остался. У меня Delphi 7




аватар Добавил: Feraset [Новичок] Дата: 2012-11-18
Паррдон цвет меняется но ток какойто непонятный RGB - Цвет меняет только <B> a RG как будто не причём




аватар Добавил: Klesh [Программист] Дата: 2012-11-18
an1rk4, переменная DC не используется в данном уроке, я просто забыл убрать её из исходника. Какую ошибку тебе выдаёт делфи?




аватар Добавил(а): Doggy [Новичок] Дата: 2013-01-11
прикольно!! а рисовать будем только на форме? можно же все это замутить и для панелей или Image или PaintBox? Это будет в др. уроках? Ща буду смотреть Спасибо




аватар Добавил: Klesh [Программист] Дата: 2013-01-12
Да, рисовать можно на всем у чего есть свойство Handle.




аватар Добавил(а): nucell [Новичок] Дата: 2013-01-18
Тупо белая форма... если что-то менять в glclearcolor толку ноль. Delphi 7




аватар Добавил(а): Епифан [Новичок] Дата: 2013-04-30
А как сделать вывод OpenGL на TPanel? или другие элементы формы?




аватар Добавил: Klesh [Программист] Дата: 2013-05-01
http://thedelphi.ru/opengl/oles2.php последний коментарий




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




аватар Добавил: Klesh [Программист] Дата: 2013-05-11
Это нормально, ничего не должно меняться, просто в OpenGL пиксель состоит из 4 компонентов. Нужно же чем то забить последний




аватар Добавил(а): Maks [Новичок] Дата: 2013-08-01
Конеш никаких комментариев практически нет...ничего не описано, мало пояснений. просто пишет автор ВСЕ и типо это нормально...и это уроки?




аватар Добавил(а): Daniel [Новичок] Дата: 2013-08-13
Всё очень печально... Даже скачанный пример не работает.В чём может быть причина?




аватар Добавил(а): Stormteller [Новичок] Дата: 2013-11-01
Что нужно изменить что бы рисовать на панели?




аватар Добавил: kordalk [Новичок] Дата: 2014-01-06
"Да, рисовать можно на всем у чего есть свойство Handle." Не на чем угодно. Рисовать можно на всех тех компонентах, которые унаследованы от TWinControl. К таким относятся: TForm, TPanel, TButton, TGroupBox и др. Если быть точнее, у тех компонентов свойство Handle которых, должно иметь тип HWND.




аватар Добавил(а): dimonsky [Новичок] Дата: 2017-07-03
ЗАпускается, но фоорма меняет цвет не каждый раз, а один из трех-четырех запусков.




аватар Добавил(а): dimonsky [Новичок] Дата: 2017-07-03
canvas.handle не работает. Вместо этого надо GetDC(panel1.handle).




аватар Добавил: N0E0O7 [Новичок] Дата: 2017-08-16
А у меня форма чёрная запускается