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

Урок 5. Тип TColor и цвет в OpenGL Delphi Обучение уроки [фрукт]

Разберем еще одну версию нашей первой программы, использующей OpenGL

Пример 2


unit Unit1;

interface

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

type
  TfrmGL = class(TForm)
    btnColor: TButton;
    ColorDialog1: TColorDialog;
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure btnColorClick(Sender: TObject);

  private
    hrc : HGLRC;
    R, G, B : GLFloat;
    procedure ColorToGL (c : TColor; var R, G, B : GLFloat);
  end;

var
  frmGL: TfrmGL;

implementation

{$R *.DFM}

{=======================================================================
Перевод цвета из TColor в OpenGL}
procedure TfrmGL.ColorToGL (c : TColor; var R, G, B : GLFloat);
begin
 R := (c mod $100) / 255;
 G := ((c div $100) mod $100) / 255;
 B := (c div $10000) / 255;
end;

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

 glClearColor (R, G, B, 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);
 Randomize;
 R := random;
 G := random;
 B := random;
end;

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

procedure TfrmGL.btnColorClick(Sender: TObject);
begin
 If ColorDialog1.Execute then begin
    ColorToGL (ColorDialog1.Color, R, G, B);
    Refresh;
 end;
end;

end.



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

Цвет, возвращаемый диалогом, хранится в свойстве color компонента класса TColorDiaiog. Согласно справке, значение $OOFFFFFF этого свойства соответствует белому цвету, $OOFFOOOO — синему, $OOOOFFOO — зеленому, $OOOOOOFF — красному. То есть для выделения красной составляющей цвета необходимо вырезать первый слева байт, второй байт даст долю зеленого, третий — синего. Максимальное значение байта — 255, минимальное — ноль. Цвета же OpenGL располагаются в интервале от нуля до единицы.

Введена пользовательская процедура, определяющая тройку составляющих цветов для OpenGL по заданному аргументу типа 

TColor:
procedure TfrmGL.ColorToGL (с : TCoior; var R, G, В : GLFloat); begin
R := (c mod $100) / 255;
G := «c div $100) mod $100) / 255;
В := {с div $10000) / 255; end;

Из аргумента вырезаются нужные байты и масштабируются в интервал [0; 1].

Те же действия можно сделать и другим, более "продвинутым" способом

R .= (с and $FF) / 255;
G := ((с and $FFOO) shr 8) / 255;
В := ((с and $FFOOOO) shr 16) / 255.

Эта процедура используется в обработчике нажатия кнопки:
If ColorDialogl.Execute then begin
ColorToGL (ColorDialogl.Color, R, G, B);
Refresh; end;
В примере для простоты окно перекрашивается обычным для Delphi способом — через вызов метода Refresh формы.


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


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


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


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


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


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


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


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


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


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


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

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