Тип Tcolor и цвет в OpenGL
Разберем еще одну версию нашей первой программы, использующей OpenGL - пример из подкаталога Ex32. Здесь на форму помещена кнопка, при нажатии которой появляется стандартный диалог Windows выбора цвета. После выбора окно окрашивается в выбранный цвет, для чего используются команды OpenGL. Поскольку такой прием мы активно будем применять в будущем, разберем подробно, как это делается.
Цвет, возвращаемый диалогом, хранится в свойстве color компонента класса TColorDialog. Согласно справке, значение $00FFFFFF этого свойства соответствует белому цвету, $00FF0000 - синему, $0000FF00 - зеленому, $000000FF - красному. To есть для выделения красной составляющей цвета необходимо вырезать первый слева байт, второй байт даст долю зеленого, третий - синего. Максимальное значение байта - 255, минимальное - ноль. Цвета же OpenGL располагаются в интервале от нуля до единицы.
В нашем примере я ввел пользовательскую процедуру, определяющую тройку составляющих цветов для OpenGL по заданному аргументу типа TColor:
procedure TfrmGL. ColorToGL (с: TColor; var R, G, В: GLFloat);
begin
R: = {c mod $100) / 255;
G: = ((c div $100) mod $100) / 255;
В: = (с div $10000) / 255; end;
Из аргумента вырезаются нужные байты и масштабируются в интервал [0; 1]
Замечание
Те же действия можно сделать и другим, более "продвинутым" способом:
R =(cand$FF)/255;
G. = ((c and $FFOO) shr 8) / 255,
В: = ((c and $FFOOOO) shr 16) / 255
Эта процедура используется в обработчике нажатия кнопки:
If ColorDialogl. Execute then begin
ColorToGL (ColorDialogl. Color, R, G, В);
Refresh;
end;
В примере для простоты окно перекрашивается обычным для Delphi способом - через вызов метода Refresh формы.
Содержание раздела