3.1. Интерактивная компьютерная графика Одно из основных достоинств компьютерной технологии состоит в том, что она позволяет пользователю оперативно взаимодействовать с компьютером в процессе решения определенной проблемы. При этом со стороны компьютера роль средства "общения" предоставляется дисплею, на экране которого компьютер демонстрирует результат своей работы. Отсчет современной эры интерактивной компьютерной графики следует вести от проекта Sketchpad, выполненного под руководством Айвена Сазерленда (Ivan Sutherland). В основе проекта лежала на удивление простая и эффективная идея - пользователь видит на экране дисплея изображение, сформированное компьютером, и реагирует на него, передавая компьютеру информацию через различные устройства ввода. В ответ на поступившую информацию - команды и данные - компьютер изменяет изображение, и цикл повторяется вновь. Эта идея используется повсеместно практически во всех современных программах - от программ, создающих среду для разработки программ, до интерактивных экспонатов в музеях, отвечающих на вопросы посетителей или демонстрирующих нечто в ответ на запрос посетителя.
За те 35 лет, которые прошли со времени появления работы Сазерленда, и аппаратные, и программные средства подобных систем значительно усовершенствовались, но фундаментальные идеи интерактивной компьютерной графики, введенные им в научный оборот, остались прежними. Эти идеи охватывают широкий круг вопросов, начиная от концепции взаимодействия человека с компьютером и заканчивая методами структурирования графических данных, обеспечивающими эффективную реализацию таких систем.
В этой главе я использую подход, слегка отличный от подхода к изложению материала в других главах. Хотя в большинстве современных графических API, a OpenGL в этом смысле не исключение, основное внимание уделяется методам реалистического тонирования изображения, возможность взаимодействия с пользователем является одной из важнейших функций большинства приложений. Но должен отметить, что OpenGL не располагает средствами непосредственной поддержки этого режима. Главная причина подобной "забывчивости" разработчиков OpenGL кроется в том, что они стремились обеспечить максимальную "переносимость" API с одной платформы на другую, т.е. позволить системе работать в самых различных операционных средах. Поэтому функции создания окон и ввода информации от пользователя не включены в состав API, а отданы "на откуп" операционной системе. Хотя такое решение и обеспечило переносимость самых сложных алгоритмов формирования изображения с одной платформы на другую, оно в то же время затрудняет обсуждение вопросов взаимодействия с пользователем, так как при этом приходится учитывать специфику каждой отдельной операционной системы. Кроме того, поскольку большинство программ должно располагать хотя бы минимальным интерфейсом с подсистемой окон, нам не удастся избежать обсуждения специфики операционных систем, если, конечно, наша цель - создание нетривиальных законченных программных продуктов. Если средства взаимодействия вынесены за пределы графического API, то прикладному программисту волей-неволей приходится самостоятельно постигать тайные пружины конкретной операционной системы.