Разберем еще одну версию нашей первой программы, использующей 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 формы.