Soft4Pc
Пятница, 10.05.2024, 12:33
Приветствую Вас Гость | 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

Урок 6. Двумерные построения. Точка [Фрукт]
Необходимо отметить, что в OpenGL левый нижний угол области вывода имеет координаты [-1; —1], правый верхний — [1, 1].
Нарисуем на экране пять точек, четыре по углам окна и одну в центре:

Пример :



Quote

unit Unit1;

interface

uses 
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 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);

glViewPort (0, 0, ClientWidth, ClientHeight); // область вывода

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

glPointSize (20); // размер точек 
glColor3f (1.0, 0.0, 0.5); // текущий цвет примитивов 
glBegin (GL_POINTS); // открываем командную скобку 
glVertex2f (-1, -1); 
glVertex2f (-1, 1); 
glVertex2f (0, 0); 
glVertex2f (1, -1); 
glVertex2f (1, 1); 
glEnd; // закрываем командную скобку

SwapBuffers(Canvas.Handle); // содержимое буфера - на экран 
wglMakeCurrent(0, 0); 
end;

{===================================================Формат пикселя} 
procedure SetDCPixelFormat (hdc : HDC); 
var 
pfd : TPixelFormatDescriptor; 
nPixelFormat : Integer; 
begin 
FillChar (pfd, SizeOf (pfd), 0); 
pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER; 
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. 

Обработчик события OnPaint формы дополнился следующими строками: 
glViewPort (0, 0, ClientWidth, ClientHeight); // область вывода 
glPointSize (20); // размер точек 
glColorSf (1.0, 1.0, 1.0); // цвет примитивов 
glBegin (GL_POINTS); // открываем командную скобку 
glVertex2f (-1, -1); // левый нижний угол 
glVertex2f (-1, 1); // левый верхний угол 
glVertex2f (0, 0); // центр окна 
glVertex2f (1, -1); // правый верхний угол 
glVertex2f (1, 1); // правый нижний угол 
glEnd; // закрываем командную скобку 
SwapBuffers(Canvas.Handle); // содержимое буфера - на экран

Первая строка задает область вывода указанием координат левого нижнего и правого верхнего углов (в пикселах, в оконных координатах). Если третий параметр процедуры glviewport записать как round (clientwidth / 2), то картинка вдвое сузится, но окрашено будет все окно. 
Следующие две строки программы определяют параметры выводимых точек, размер и цвет. 
На примере команды glColorSf разберем синтаксис команд OpenGL. 
Из справки по этой команде ясно, что она принадлежит к целому набору команд glColor с различными окончаниями: 3b, 4i и прочие. Цифра в окончании соответствует количеству требуемых аргументов, а следующая цифрой буква показывает требуемый тип аргументов. То есть gicoior3f требует в качестве аргументов тройку вещественных (float) чисел, а glColor3i — тройку целых (int) чисел. 
Аналогичный синтаксис мы встретим у многих других команд OpenGL. 
Здесь же, в справке, выясняем, что при записи функции в вещественной форме аргументы лежат в интервале [0; 1], а в целочисленной форме — линейно отображаются на этот интервал, т. е. для задания белого цвета целочисленная форма команды будет выглядеть так: 
glColor3i (2147483647, 2147483647, 2147483647); // цвет примитивов 
где максимальное 8-битное целое без знака соответствует предельному значению интервала. 
Почти всегда предпочтительно использовать команду в вещественной форме, поскольку OpenGL хранит данные именно в вещественном формате. Исключения оговариваются в файле справки. 
Если имя команды заканчивается на v (векторная форма), то аргументом ее служит указатель на структуру, содержащую данные, например, массив. То есть, например, если последние три символа в имени команды 3fv, то ее аргумент — адрес массива трех вещественных чисел. Использование такой формы команды является самым оптимальным по скоростным характеристикам. 
Далее в программе следуют функции (командные скобки) glBegin и glEnd, между которыми заключены собственно процедуры рисования. 
Разберемся подробнее с функциями glBegin и glEnd ввиду их особой важности: большинство графических построений связано с использованием именно этой пары функций. 
Во-первых, необходимо уяснить, что это командные скобки библиотеки OpenGL, не заменяющие операторные скобки языка Pascal и не имеющие к ним никакого отношения. Ошибка при использовании командных скобок не распознается компилятором. Если в программе написана неправильная вложенность командных скобок OpenGL, то ошибка проявится только в процессе диалога приложения с сервером. 
Во-вторых, внутри этих скобок могут находиться любые операторы языка Pascal и почти любые функции OpenGL (вернее, очень многие). Включенные в скобки команды OpenGL отрабатываются так же, как и за пределами этих скобок. Главное назначение командных скобок — это задание режима (примитива) для команд glvertex (вершина), определяющих координаты вершин для рисования примитивов OpenGL. 
В рассмотренном примере аргументом функции glBegin взята символическая константа GL_POINTS. Из файла справки выясняем, что в этом случае все встретившиеся до закрывающей скобки glEnd вершины (аргументы glvertex) задают координаты очередной отдельной точки. Команду glvertex мы взяли в форме с двумя вещественными аргументами. 
Мы собирались нарисовать четыре точки по углам окна и одну в центре, поэтому между командными скобками располагаются пять строк с вызовом glvertex, аргументы которых соответствуют положениям точек в системе координат области вывода библиотеки OpenGL. 
Сейчас обратите внимание на то, что вместе с изменением размеров окна рисуемое изображение также изменяется: точки всегда рисуются на своих местах относительно границ окна. Следующее замечание тоже очень важно: обработчик события onResize формы тот же, что и у события onPaint.

Категория: Delphi | Добавил: LimansK (09.09.2009)
Просмотров: 677 | Рейтинг: 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)
(Загрузок:350)


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
                                                     Все материалы размещенные на сайте пренадлежат их владельцам и предоставляются исключительно в ознакомительных целях. 
                                                    Администрация этого сайта не несет ответственность за использование материалов,ссылок и информации находящихся на этом сайте. 
                                                           !!! Все авторские права принадлежат только настоящим владельцам всех файлов которые публикуются на этом сайте!!!