Рис. 2.23. Цветовой куб

а) 6)

Рис 2.24. Формирование цвета: а - наложение первичных цветов; б - вычитание первичных цветов

Графическое программирование

2.4.1. Цветовая система RGB

В этом разделе мы рассмотрим, как выполняются манипуляции с цветом в графических системах с точки зрения программиста, т.е. какие функции для этого имеются в составе API. Существуют два довольно сильно отличающихся подхода к программным манипуляциям с цветом. Мы будем рассматривать только цветовую модель RGB, поскольку она играет решающую роль в дальнейшем обсуждении вопросов моделирования освещения и реализации тонирования объектов сцены. По сравнению с моделью цветовых индексов, которая будет рассмотрена в следующем разделе, RGB-модель более сложная в аппаратной реализации, поскольку требует большего объема памяти, но в связи с тем, что стоимость памяти непрерывно снижается, это уже можно не считать ее существенным недостатком. В современных графических API стало возможным обеспечить правильную цветопередачу, причем аппаратно удается использовать алгоритмы аппроксимации, позволяющие достаточно приблизиться к полноценной RGB-модели отображения.

Концептуально в RGB-системе наложения цветов должны существовать три раздельных буфера кадра- по одному на каждый из первичных цветов. В каждом буфере за определенным пикселем на экране закреплен фиксированный адрес в памяти (рис. 2.25). В типовой системе, имеющей разрешение 1280x1024 пикселей, каждый из них описывается тремя байтами (24 битами): по одному байту соответственно на красный, зеленый и синий цвета. В результате буфер кадра должен иметь объем порядка 3 Мбайт, причем весь буфер должен считывать-ся с частотой регенерации. До последнего времени необходимость в таком буфере являлась одним из наиболее существенных препятствий во внедрении графических систем с правильной цветопередачей.

Цветовая система RGB

Рис. 2.25. Цветовая система RGB

Программисту желательно было бы иметь возможность задавать цвет в виде определенного числа и не думать о том, каким образом соответствующая информация будет храниться в буфере кадра. Если считать, что на каждый цвет отводится по 1 байту, то в распоряжении программиста есть 2'4 возможных цветов (иногда говорят, что имеется 16 M цветов, понимая под M число 10242). В других графических системах используется 12 и более битов на каждый цвет, но существуют и системы с 4 битами на цвет. Поскольку все графические API желательно делать аппаратно-независимыми, то программисту нужно позволить специфицировать цвет независимо от объема памяти, отводимой в буфере кадра на каждый пиксель. Все остальные операции, связанные с приведением кода цвета к формату конкретной системы отображения, должны взять на себя драйверы и аппаратные средства. Наиболее естественным было бы воспользоваться моделью цветового куба и специфицировать цвет в виде трех действительных чисел в диапазоне от 0 до 1.0. В OpenGL эта идея реализуется следующим образом. Для того чтобы задать красный цвет, вызывается функция glColor3f ( )"opengl5_82.html">⇐ Предыдущая| |Следующая ⇒