Урок 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


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

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



Добавил(а): 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
/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
А у меня форма чёрная запускается



Добавил(а): SteelFlame Дата: 2018-07-27
Что такое 1.формат пиксела 2. тип - HGLRC


  1. Allended
    Allended 4 months ago
    Welcome to the world of adult Dating loveawake.ru
  2. alkanna
    alkanna 3 months ago
    100 Mg Viagra Price Walmart Inimeneidigh [url=https://xbuycheapcialiss.com/]cialis online ordering[/url] diunny Cvs Online Pharmacy Tadacip
  3. GqtHP
    GqtHP 3 months ago
    Pills prescribing information. Brand names. <a href="https://prednisone4u.top">where can i get prednisone online</a> in the USA. Actual news about medicines. Get now.
    [url=http://lenabondareva.com/2018/12/04/philadelphia-flutist-announces-recital-and-music-lessons-for-children-and-adults/#comment-947]Best news about medicines.[/url] [url=https://quizzma.com/permit-test-answers/#comment-21286]All information about drug.[/url] [url=https://mr-kids.com/archives/3040#comment-4742]All trends of drug.[/url] 10bd897
  4. vjcfqdlvcf
    vjcfqdlvcf a month ago
    Урок 1 - Инициализация OpenGL - The Delphi
    [url=http://www.g5rgx14ph4ipp581o89a535wg58npg86s.org/]uvjcfqdlvcf[/url]
    vjcfqdlvcf http://www.g5rgx14ph4ipp581o89a535wg58npg86s.org/
    <a href="http://www.g5rgx14ph4ipp581o89a535wg58npg86s.org/">avjcfqdlvcf</a>
  5. SandraPlecy
    SandraPlecy a month ago
    Russian actor Panin is seen on an erotic resource loveawake.ru
  6. bmhnpqkbg
    bmhnpqkbg a month ago
    Урок 1 - Инициализация OpenGL - The Delphi
    [url=http://www.g1h53su3u28055ushk6kl8yb7b075qb2s.org/]ubmhnpqkbg[/url]
    <a href="http://www.g1h53su3u28055ushk6kl8yb7b075qb2s.org/">abmhnpqkbg</a>
    bmhnpqkbg http://www.g1h53su3u28055ushk6kl8yb7b075qb2s.org/
  7. ksfdlkisv
    ksfdlkisv 30 days ago
    Урок 1 - Инициализация OpenGL - The Delphi
    [url=http://www.g4z3y7c0kw29p3dzb61fyngov7729185s.org/]uksfdlkisv[/url]
    ksfdlkisv http://www.g4z3y7c0kw29p3dzb61fyngov7729185s.org/
    <a href="http://www.g4z3y7c0kw29p3dzb61fyngov7729185s.org/">aksfdlkisv</a>
  8. dycrogwxv
    dycrogwxv 23 days ago
    Урок 1 - Инициализация OpenGL - The Delphi
    dycrogwxv http://www.gue3on804c25t47n8b55tn3xrhg91h55s.org/
    <a href="http://www.gue3on804c25t47n8b55tn3xrhg91h55s.org/">adycrogwxv</a>
    [url=http://www.gue3on804c25t47n8b55tn3xrhg91h55s.org/]udycrogwxv[/url]
  9. lxcinivvbv
    lxcinivvbv 18 days ago
    Урок 1 - Инициализация OpenGL - The Delphi
    lxcinivvbv http://www.gfk56r3j4z83228bj2w61t9j4c9cea9ns.org/
    [url=http://www.gfk56r3j4z83228bj2w61t9j4c9cea9ns.org/]ulxcinivvbv[/url]
    <a href="http://www.gfk56r3j4z83228bj2w61t9j4c9cea9ns.org/">alxcinivvbv</a>
  10. lziprzctxh
    lziprzctxh 17 days ago
    Урок 1 - Инициализация OpenGL - The Delphi
    [url=http://www.gh030ryl02hqn5p2f36eo39q72yc347ss.org/]ulziprzctxh[/url]
    lziprzctxh http://www.gh030ryl02hqn5p2f36eo39q72yc347ss.org/
    <a href="http://www.gh030ryl02hqn5p2f36eo39q72yc347ss.org/">alziprzctxh</a>
  11. ttzpghjbp
    ttzpghjbp 17 days ago
    Урок 1 - Инициализация OpenGL - The Delphi
    [url=http://www.g22xmq9r6fnu4lt1kv8022121ubk9x73s.org/]uttzpghjbp[/url]
    <a href="http://www.g22xmq9r6fnu4lt1kv8022121ubk9x73s.org/">attzpghjbp</a>
    ttzpghjbp http://www.g22xmq9r6fnu4lt1kv8022121ubk9x73s.org/
  12. alkanna
    alkanna 13 days ago
    [url=https://gcialisk.com/]is generic cialis available[/url]
  13. kymwjoxmny
    kymwjoxmny 12 days ago
    Урок 1 - Инициализация OpenGL - The Delphi
    <a href="http://www.gq2k86rq2f6hop869134350vgamkz6y1s.org/">akymwjoxmny</a>
    kymwjoxmny http://www.gq2k86rq2f6hop869134350vgamkz6y1s.org/
    [url=http://www.gq2k86rq2f6hop869134350vgamkz6y1s.org/]ukymwjoxmny[/url]
  14. qmqtplifxe
    qmqtplifxe 10 days ago
    Урок 1 - Инициализация OpenGL - The Delphi
    <a href="http://www.g1e0hd1791wp2h021p69dj7k31got9tes.org/">aqmqtplifxe</a>
    qmqtplifxe http://www.g1e0hd1791wp2h021p69dj7k31got9tes.org/
    [url=http://www.g1e0hd1791wp2h021p69dj7k31got9tes.org/]uqmqtplifxe[/url]
  15. poqrcjqnec
    poqrcjqnec 9 days ago
    Урок 1 - Инициализация OpenGL - The Delphi
    [url=http://www.gsj70n5686xlf459zfv5749gfn1sr02us.org/]upoqrcjqnec[/url]
    poqrcjqnec http://www.gsj70n5686xlf459zfv5749gfn1sr02us.org/
    <a href="http://www.gsj70n5686xlf459zfv5749gfn1sr02us.org/">apoqrcjqnec</a>
  16. vkhjovyfx
    vkhjovyfx 5 days ago
    Урок 1 - Инициализация OpenGL - The Delphi
    [url=http://www.ghi847di3t4hwfe91v58s7x2642qdy65s.org/]uvkhjovyfx[/url]
    vkhjovyfx http://www.ghi847di3t4hwfe91v58s7x2642qdy65s.org/
    <a href="http://www.ghi847di3t4hwfe91v58s7x2642qdy65s.org/">avkhjovyfx</a>
  17. fdwwqckm
    fdwwqckm a day ago
    Урок 1 - Инициализация OpenGL - The Delphi
    <a href="http://www.ghh6b77v99d4k769808x4o0od1wk9jhcs.org/">afdwwqckm</a>
    fdwwqckm http://www.ghh6b77v99d4k769808x4o0od1wk9jhcs.org/
    [url=http://www.ghh6b77v99d4k769808x4o0od1wk9jhcs.org/]ufdwwqckm[/url]
Отменить.