Soft4Pc
Пятница, 10.05.2024, 00:25
Приветствую Вас Гость | RSS

Меню сайта


Adobe Photoshop [9]
Delphi [10]
Cisco [1]
Иностранные языки [1]
C# / C++ [0]

Интересные Ссылки

Последние статьи

Нестыковки "идеальной" игры
(Комментариев:0)


Критическая уязвимость в Adobe Reader
(Комментариев:5)


Советы по оптимизации Windows Vista
(Комментариев:2)


Десять причин, по которым Linux суждено одержать победу над Windows [Jack Wallen]
(Комментариев:0)


Десять непреложных законов безопасности
(Комментариев:0)


Два Windows на одном компьютере
(Комментариев:0)


Уменьшение времени загрузки программ в Windows
(Комментариев:0)


Наш опрос
Как вы нас нашли?
Всего ответов: 8

FAQ (вопрос/ответ)
Как качать с Ifolder.Ru
Как качать с Letitbit
Как качать с UPLOADBOX.COM
Как качать с uploadbox.ru
Как качать с Rapidshare.com

Праздники сегодня
Праздники сегодня

Главная » Статьи » Обучение » Delphi

Урок 3. Минимальная программа OpenGL [Фрукт]

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

Пример 1 

unit Unit1;
interface

uses
  Windows, Messages, Forms, Classes, Controls, ExtCtrls, ComCtrls,
  StdCtrls, Dialogs, SysUtils,  
  OpenGL;

type
  TfrmGL = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormDestroy(Sender: TObject);

  private
    hrc: HGLRC;  // ссылка на контекст воспроизведения                   
  end;

var
  frmGL: TfrmGL;

implementation

{$R *.DFM}

{=======================================================================
Рисование картинки}
procedure TfrmGL.FormPaint(Sender: TObject);
begin
 wglMakeCurrent(Canvas.Handle, hrc);

 glClearColor (0.5, 0.5, 0.75, 1.0); // цвет фона
 glClear (GL_COLOR_BUFFER_BIT);      // очистка буфера цвета

 wglMakeCurrent (0, 0);
end;

{=======================================================================
Формат пикселя}
procedure SetDCPixelFormat (hdc : HDC);
var
 pfd : TPixelFormatDescriptor;
 nPixelFormat : Integer;
begin
 FillChar (pfd, SizeOf (pfd), 0);
 nPixelFormat := ChoosePixelFormat (hdc, @pfd);
 SetPixelFormat (hdc, nPixelFormat, @pfd);
end;

{=======================================================================
{Создание формы}
procedure TfrmGL.FormCreate(Sender: TObject);
begin
 SetDCPixelFormat(Canvas.Handle);
 hrc := wglCreateContext(Canvas.Handle);
end;

{=======================================================================
Конец работы приложения}
procedure TfrmGL.FormDestroy(Sender: TObject);
begin
 wglDeleteContext(hrc);
end;

end.
Список uses дополнен модулем OpenGL — это программист должен сделать сам.
Раздел private описания класса формы содержит строку
hrc: HGLRC;  // ссылка на контекст воспроизведения

Обработчик события onCreate формы содержит следующие строки:
SetDCPixelFormat(Canvas.Handle);      //задаем формат пиксела
hrc := wglCreateContext(Canvas.Handle);//создаем контекст воспроизведения
Первая строка — обращение к описанной в этом же модуле пользовательской процедуре, задающей формат пиксела:

procedure SetDCPixelFormat (hdc : HDC);
var
 pfd : TPixelFormatDescriptor;
 nPixelFormat : Integer;
begin
 FillChar (pfd, SizeOf (pfd), 0);
 nPixelFormat := ChoosePixelFormat (hdc, @pfd);
 SetPixelFormat (hdc, nPixelFormat, @pfd);
end;



Во второй строке обработчика OnCreate, как ясно из комментария, задается величина типа HGLRC, т. е. создается контекст воспроизведения. Аргументом функции wglCreateContext является ссылка на контекст устройства, на который будет осуществляться вывод. Сейчас устройством вывода служит окно формы. Для получения этого контекста OpenGL необходима величина типа HDC. Здесь, как и во многих других примерах, мы используем факт, что Canvas.Handle и есть ссылка на контекст устройства, связанная с окном формы.

Функция wglCreateContext физически размещается в файле opengl32.dll, а прототип ее находится в файле windows.pas. В этот файл также помещены прототипы всех функций и процедур, имеющих отношение к реализации OpenGL под Windows, а прототипы собственно команд OpenGL расположены в файле opengl.pas.

Функции и процедуры, имеющие отношение только к Windows-версии OpenGL, обычно имеют приставку wgl, как, например, wgicreatecontext, но могут и не иметь такой приставки, как, например, SwapBuffers. Собственно команды OpenGL имеют приставки gl или glu в зависимости от размещения в библиотеках opengl32.dll и glu32.dll, соответственно.
Итак, контекст воспроизведения создан, и теперь можно осуществлять вывод командами OpenGL. Обработка события onPamt выглядит следующим образом:


wglMakeCurrent (Canvas.Handle, hrc); // установить контекст
glClearColor (0.5, 0.5, 0.75, 1.0); // цвет фона
glClear (GL_COLOR_BUFFER_BIT); // очистка буфера цвета
wglMakeCurrent (0,0); // освободить контекст
Первая строка делает контекст воспроизведения текущим, т. е. занимает его для последующего вывода. Далее задаем цвет фона. Следующую строку будем понимать как очистку экрана и окрашивание его заданным цветом. После работы освобождаем контекст.
Обработка события onDestroy формы состоит из одной строки:
wglDeleteContext(hrc);


Тем самым мы по завершении работы приложения удаляем контекст воспроизведения, освобождая память.

Вернемся к команде glclearcolor, определяющей цвет фона. У нее четыре аргумента, вещественные числа, первые три из которых задают долю красного, зеленого и синего в результирующем цвете. Согласно справке, все четыре аргумента функции glclearcolor имеют тип GLclampf, соответствующий вещественным числам в пределах от нуля до единицы.
Категория: Delphi | Добавил: LimansK (09.09.2009)
Просмотров: 719 | Комментарии: 1 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Логин:
Пароль:

Реклама
Заработок на сайте uCoz

Web-IP.ru - Система Активной Рекламы

Контекстная Реклама на Link.ru

WMmail.ru - сервис почтовых рассылок



Graffiti Decorations(R) Studio (TM) Site Promoter

Первая бесплатная система раскрутки сайта

Последние файлы

Hamachi 2.0.1.66
(Комментариев:48)
(Загрузок:357)


Генератор Календарей 2.27
(Комментариев:3)
(Загрузок:288)


Desktop Icon Toy 4.0
(Комментариев:1)
(Загрузок:288)


Vista Codec Package 5.4.6
(Комментариев:1)
(Загрузок:260)


SnagIt_9.0.1.122_Rus
(Комментариев:1)
(Загрузок:349)


CleanCenter v.2.4.1.1
(Комментариев:1)
(Загрузок:1)


Arachnophilia 5.4.2382
(Комментариев:0)
(Загрузок:270)


GameGain 2 2.10
(Комментариев:0)
(Загрузок:281)


CDBurnerXP 4.2.6
(Комментариев:1)
(Загрузок:352)


EVEREST Ultimate Edition 5.30 Build 1900
(Комментариев:1)
(Загрузок:291)


Поиск по Сайту

Друзья сайта
  • Destination.ucoz.net

  • N.S.P. WMmail.ru - сервис почтовых рассылок
    hackersoft - ჰაკერული პროგრამები Этот сайт защищен «Site Guard»
         Обмен Ссылками

    Статистика
    Rambler's Top100
    CY and PR
    webgari.com Рейтинг сайтов
    Besucherzahler russian mail order brides
    счетчик посещений

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    Зарег. на сайте
    Всего: 25126
    Новых за месяц: 7
    Новых за неделю: 1
    Новых вчера: 0
    Новых сегодня: 0
    Из них
    Администраторов: 1
    Модераторов: 2
    Проверенных: 1
    Обычных юзеров: 25122

    Сегодня нас посетили :

    Soft4PC.3dn.ru © 2024
                                                     Все материалы размещенные на сайте пренадлежат их владельцам и предоставляются исключительно в ознакомительных целях. 
                                                    Администрация этого сайта не несет ответственность за использование материалов,ссылок и информации находящихся на этом сайте. 
                                                           !!! Все авторские права принадлежат только настоящим владельцам всех файлов которые публикуются на этом сайте!!!