9987

Основные концепции графического программирования

Реферат

Информатика, кибернетика и программирование

Основные концепции графического программирования Вопросы Графические библиотеки Системы координат Окно и видовой экран Примитивы Ввод графики Дисплейный файл Матрица преобразования Удаление невидимых линий и поверхностей Визуал

Русский

2013-03-19

207.5 KB

41 чел.

Основные концепции графического программирования

Вопросы

3.1 Графические библиотеки

3.2 Системы координат

3.3 Окно и видовой экран

3.4 Примитивы

3.5 Ввод графики

3.6 Дисплейный файл

3.7 Матрица преобразования

3.8 Удаление невидимых линий и поверхностей

3.9 Визуализация

3.10 Графический интерфейс пользователя

3.11 Система X window

Интерактивное манипулирование формами составляет значительную часть работы с системами CAD/CAM/CAE. Следовательно, важнейшей составляющей таких систем является программное обеспечение, создающее графическое изображение на экране монитора. Поэтому нам необходимо изучить терминологию и основные понятия графического программирования.

3.1 Графические библиотеки

Термин «программирование на компьютере» (computer programming) раньше означал написание «сочинения» на языке компьютерных команд в соответствии с предопределенными правилами грамматики. В ответ на вводимые числа выполняемое «сочинение» порождало ожидаемые числа и символы на терминале или в файле данных. В наши дни на входе и выходе «сочинений» все чаще находится графическая информация. Такое программирование называется графическим (graphics programming), а область его применения − компьютерной графикой (computer graphics).

Помимо основного программного обеспечения, необходимого для обычного программирования (операционная система, редактор и компилятор), графическое программирование требует наличия специальных графических программ. Графические программы делятся на два класса: драйверы устройств и графические библиотеки.

Драйвер устройства может рассматриваться как набор аппаратно-зависимых кодов, непосредственно управляющих процессором графического устройства таким образом, что электронный пучок оказывается направленным в нужное место. Драйверы обязательно являются аппаратно-зависимыми, то есть жестко привязанными к конкретным графическим процессорам. Примерно то же самое можно сказать об ассемблере, конкретный вид которого может выполняться только на процессорах одной и той же модели. То же происходит, если графическая программа использует драйвер устройства непосредственно (рисунок 3.1). Такую графическую программу при переходе на другое графическое устройство придется переписывать с использованием новых команд драйвера. Более того, команды драйвера устройства весьма примитивны, поэтому такая программа была бы очень длинной, если бы она должна была решать какую-либо сложную задачу. К тому же программа эта получилась бы плохо читаемой.

Программисты предпочитают писать программы на языках высокого уровня. Графическое программирование не могло стать исключением, особенно если представить все неудобства, связанные с использованием команд драйвера низкого уровня. Поэтому с графическими устройствами стали поставляться библиотеки, получившие название графические (graphics libraries). Графическая библиотека, как, например, и математическая, представляет собой набор подпрограмм, предназначенных для решения определенных задач. Конкретная подпрограмма может изображать на экране прямую, круг или иной объект. Графическая библиотека основывается на командах драйвера устройства (рисунок 3.2). Каждая подпрограмма создается с использованием поддерживаемого набора команд драйвера. Например, подпрограмма, изображающая круг, может быть составлена из отдельных команд драйвера, рисующих на экране точки или короткие отрезки.

Подпрограммы графической библиотеки могут использоваться точно так же, как подпрограммы математической. Нужная подпрограмма вызывается из основной программы аналогично тому, как вызываются функции синуса и косинуса, когда программисту требуется вычислить их значения. Одна из проблем использования подпрограмм графической библиотеки связана с тем, что их названия и способы вызова (входные и выходные аргументы) у каждой библиотеки свои. Это не создавало бы трудностей, если бы одна графическая библиотека могла работать со всеми существующими устройствами, что теоретически было бы возможным, если бы все существующие драйверы устройств поддерживали ее. Однако по некоторым причинам производители программного обеспечения не хотят или не могут создать графическую библиотеку, которая могла бы работать со всеми драйверами, а потому у каждой библиотеки имеется свой круг поддерживаемых драйверов. Следовательно, такая библиотека может работать лишь с ограниченным набором графических устройств, а графические программы, рассчитанные на работу с множеством устройств, приходится переписывать с использованием нескольких библиотек.

Чтобы обойти эту проблему, разработчики графических библиотек могли бы использовать одинаковые наборы подпрограмм с одинаковыми названиями, аргументами и возможностями. Тогда графические программы не требовали бы изменения на уровне исходного кода даже при изменении графических устройств. Одним из примеров такого подхода является графическая система CORE, предложенная в 1977 г. группой SIGGRAPH (Special Interest Group on Computer Graphics) Ассоциации вычислительной техники (Association for Computing MachineryACM). Однако графическая система CORE не предоставляет достаточного набора команд для использования всех возможностей растровых устройств, потому что эти устройства не были широко распространены во времена разработки системы. Примерно в то же время Международная организация стандартизации (International Standards OrganizationISO) разработала систему графического ядра (Graphics Kernel SystemGKS). GKS считается стандартом в двухмерной графике, а позже эта система была расширена до GKS с поддержкой трехмерной графики.

И у CORE, и у GKS есть определенные недостатки в отношении динамического отображения и гибкого взаимодействия с пользователем. Поэтому организация ISO предложила еще один стандарт, получивший название − иерархическая система программирования интерактивной графики (Programmer's Hierarch Interactive Graphics SystemPHIGS). Этот стандарт стал стандартом де факто для большинства графических рабочих станций. Затем он был расширен и получил название «расширение PHIGS для X» (PHIGS extension to X − РЕХ), потому что в него были включены функции работы с окнами системы X window. Графические программы, написанные на РЕХ, в сетевой среде могут использоваться независимо от типа рабочей станции. Это достоинство было унаследовано у системы X window, о которой будет коротко рассказано в конце главы. Коммерческая графическая библиотека OpenGL развивалась независимо от организаций по стандартизации, однако с течением времени она набирает все большую популярность благодаря гибкости в управлении рабочими станциями и персональными компьютерами в сетевой среде. OpenGL − расширение графической библиотеки GL (фирменной графической библиотеки для компьютеров Silicon Graphics). Благодаря популярности компьютеров Silicon Graphics в областях, связанных с компьютерной графикой, библиотека OpenGL постепенно приобретает статус графического стандарта де факто.

3.2 Системы координат

Для вывода изображения объекта на экран графического устройства необходимо решить две основные задачи:

  •  указать положение всех точек объекта в пространстве;
  •  определить положение их образов на мониторе.

Для задания положения точек в пространстве и на мониторе используются системы координат. Важно понимать, как связаны между собой различные системы координат. Особенно это важно для проектирования трехмерного объекта на плоский экран. Проекция на экране строится по тем же законам, что и проекция реального объекта на сетчатке человеческого глаза.

Система координат устройства (device coordinate system) определяет положение точки на экране. Эта система состоит из горизонтальной оси  и вертикальной оси . Начало отсчета в системе координат устройства может выбираться произвольно. Осей  и  достаточно для задания положения любой точки экрана. Положение любой точки задается двумя целыми числами  и , равными числу пикселов между началом координат и точкой по осям    и . Однако одна и та же точка может задаваться разными парами  и в зависимости от положения начала координат, направления осей и масштаба. Эти параметры для разных графических устройств устанавливаются достаточно произвольно. Поэтому аппаратные координаты в графической программе могут потребовать изменения при смене графического устройства.

Виртуальная система координат устройства (virtual device coordinate system) позволяет избежать описанной проблемы. Виртуальная система координат устройства фиксирует точку отсчета, направление и масштаб осей для всех рабочих станций. Слово «виртуальный» означает, что данная система отсчета существует только в воображении программиста. Обычно начало отсчета располагается в левом нижнем углу экрана, ось  откладывается вправо, а ось  вверх. Обе координаты могут изменяться в диапазоне от нуля до единицы. Точка, положение которой задается в виртуальной системе координат, на любом экране будет попадать в одно и то же место. Это дает программисту возможность единообразно определять формы, не заботясь о конкретных системах координат устройств. Графическая программа передает виртуальные координаты подпрограмме драйвера устройства, которая преобразует их в координаты конкретного устройства.

Виртуальная и обычная системы координат устройства позволяют задавать положение точки на плоском экране. Для работы с трехмерными объектами требуется использование трехмерных координат. Основных трехмерных систем координат всего три: внешняя система координат (world coordinate system), система координат модели (model coordinate system) и система координат наблюдателя (viewing coordinate system).

Внешняя, или мировая система координат (world coordinate system), − это опорная система, используемая для описания интересующего нас мира. Внешней она является по отношению к объектам этого мира. Например, такая система может использоваться для описания расположения и ориентации парт, стульев и доски, если интересующий нас мир представляет собой класс.

Форма объекта определяется координатами всех или некоторых характеристических точек объекта по отношению к системе координат, связанной с ним, − системой координат модели (model coordinate system). Координаты точек объекта, определенные таким образом, не изменяются даже тогда, когда объект перемещается или вращается в пространстве. Они действительно зависят только от формы объекта. Система координат модели перемещается вместе с тем объектом, к которому она привязана. Поэтому форма каждого объекта определяется в его собственной системе координат модели.

Расположение и ориентация любого объекта задаются относительным положением и ориентацией модельной системы координат данного объекта по отношению к внешней системе координат. Относительное расположение и ориентация систем координат определяются матрицей преобразования. Наличие внешней системы координат и модельных систем для всех объектов полностью определяет мир, то есть расположение и форму всех объектов данного мира. Другими словами, применение матриц преобразования позволяет получить координаты любой точки любого объекта во внешней системе.

Проектирование трехмерных объектов или их точек на монитор осуществляется подобно тому, как проектируются на сетчатку человеческого глаза объекты реального мира. В компьютерной графике используется два вида проекций: перспективная и параллельная (рисунок 3.3).

Оба вида требуют задания двух точек: точки зрения и точки наблюдения. Точка зрения (viewpoint) − это глаз наблюдателя. Точка наблюдения (viewsite) − это точка объекта, определяющая направление «луча зрения». Вектор, проведенный от точки зрения к цели, задает направление наблюдения.

В перспективной проекции (perspective projection) все точки рассматриваемого объекта соединяются с центром проекции, который обычно лежит на линии, соединяющей точку зрения и цель. Точки пересечения этих линий с экраном образуют проекцию. Экран располагается между точкой зрения и целью. В параллельной проекции (parallel projection) линии от всех точек объекта проводятся в направлении наблюдателя параллельно направлению наблюдения, а точки пересечения этих линий с экраном формируют проекцию. Экран, как и в перспективной проекции, располагается перпендикулярно направлению проектирования. Такая проекция называется ортогональной.

Процедура расчета точек проекции с использованием матриц преобразования выглядит следующим образом. Сначала координаты проецируемой точки преобразуются из модельных в мировые при помощи матрицы преобразования, определяющей переход от модели, к которой относится точка, к мировой системе координат. Эта операция называется преобразованием модели (model transformation). Затем координаты этой точки преобразуются из мировой системы координат в систему координат наблюдателя . Эта операция называется преобразованием наблюдения (wing transformation). Наконец, в системе координат наблюдателя координаты преобразуются в значения и по формулам вида:

; ,      (3.1)

где − расстояние между точкой наблюдения и началом виртуальной системы координат; − расстояние между точкой наблюдения и плоскостью экрана.

Координаты и преобразуются затем в виртуальные координаты устройства. Эта операция называется преобразованием проекции (projection transformation). Наконец, виртуальные координаты устройства преобразуются в обычные подпрограммой драйвера. Результат показан на рисунке 3.4.

Все эти преобразования обычно выполняются внутри графической библиотеки, а программисту приходится только указывать сведения, необходимые для проведения преобразований. Например, трансляции и повороты объектов учитываются при преобразовании модели, положение точки зрения, точки наблюдения и вектора вертикали − при преобразовании наблюдения, а тип проекции, расположение центра проекции и экрана − при преобразовании проецирования. Однако графические библиотеки примитивного уровня могут потребовать от программиста самостоятельного написания кода для всех этих преобразований.

3.3 Окно и видовой экран

Термин «окно» (window) в сетевой компьютерной среде обозначает область экрана монитора рабочей станции, посредством которого пользователь взаимодействует с вычислительными ресурсами, подключенными к той же сети. В компьютерной графике этот термин имеет иное значение. Окно − это область пространства, проецируемая на монитор. Объекты, находящиеся вне окна, на мониторе не появляются. В этом смысле оно подобно окну дома, через которое человеку, сидящему внутри дома, видна лишь часть внешнего мира. Вероятно, эта аналогия была основанием для выбора соответствующего термина. Окно обычно определяется как прямоугольник, лежащий на экране и заданный значениями и в системе координат просмотра. Видимая область пространства, называемая просматриваемым объемом (viewing volume), зависит от типа проекции. Для параллельной проекции эта область имеет форму параллелепипеда, а для перспективной − форму пирамиды (рисунок 3.5).

Просматриваемый объем при проектировании может давать довольно сложное изображение, поскольку в него могут попадать ненужные объекты, расположенные вблизи наблюдателя или вдали от него. Иногда бывает удобно ограничить этот объем двумя плоскостями, из которых одна располагается ближе, а другая – дальше (рисунок 3.6). Для параллельной проекции ближняя и дальняя плоскости определяются так же, как и для перспективной.

Видовой экран (viewport) это область экрана, где будет отображаться проецируемое изображение (рисунок 3.7). В эту область проецируется просматриваемый объем, определяемый «обычным» окном. Отображение состоит из трансляции и масштабирования, учитывающих расстояние между центром видового экрана и центром монитора, а также разницу размеров окна и видового экрана. Другими словами, значения  и , полученные по формулам (3.1), должны быть увеличены или уменьшены таким образом, чтобы центр окна попадал в центр видового экрана, а не в центр монитора. Кроме того, они должны быть подвергнуты масштабированию, чтобы четыре граничные точки окна стали четырьмя граничными точками видового экрана. Соотношение сторон у окна должно быть таким же, как у видового экрана, в противном случае изображение будет искажено, и круг, например, превратится в эллипс.

3.4 Примитивы

Примитивы (primitives) это элементы графики, которые могут отображаться графической библиотекой. В каждой библиотеке набор примитивов свой, поэтому в данном разделе мы рассмотрим только наиболее общие примитивы, поддерживаемые большинством графических библиотек.

Для отображения отрезка прямой (линии – line) необходимо задание координат двух его концов. В большинстве графических библиотек координаты концов могут задаваться в трехмерном пространстве; проецирование на плоскость экрана осуществляется автоматически. Можно указывать атрибуты отрезка: тип (сплошная, пунктирная, штрихпунктирная и т.д), толщину, цвет и другие. Для систем автоматизированной разработки чертежей поддержка этих типов линий совершенно необходима, поскольку они часто используются в машиностроительных и архитектурных чертежах и электрических схемах.

В библиотеках GKS, PHIGS и OpenGL одной из базовых функций является ломаная (polyline), представляющая собой набор соединенных друг с другом отрезков. Координаты концов отрезков, составляющих ломаную, задаются в виде матрицы. В случае ломаной, состоящей всего из одного отрезка, в матрицу помещаются координаты двух его концов.

Примеры использования функций построения ломаной из библиотек PHIGS и OpenGL приведены ниже.

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

Атрибутами многоугольника могут быть цвет внутренней области (цвет заполнения), а также тип, ширина и цвет ломаной, ограничивающей эту область. Хотя функция построения многоугольников может использоваться и для построения кругов и прямоугольников, в большинстве графических библиотек существуют специальные функции, требующие гораздо меньше входных параметров (например, центр и радиус круга или два конца диагонали прямоугольника). Тем не менее, внутри библиотек эти функции реализованы через функцию построения многоугольников.

Маркеры обычно используются для выделения точек на графиках. Тип маркера указывается в качестве атрибута. Полимаркер, как и отрезок, является стандартным объектом в GKS и PHIGS. OpenGL не поддерживает маркеры явно, однако предоставляет механизм сохранения маркеров в растровых файлах и выведения их на экран. Благодаря этому графическая программа, построенная на OpenGL, гораздо лучше переносится на различные платформы.

Большинство графических библиотек поддерживают два вида текста: текст для пояснений (экранный или двумерный текст) и трехмерный текст. Текст для пояснений всегда располагается в плоскости экрана, поэтому его форма не искажается вне зависимости от угла, на который он повернут. Трехмерный текст может быть расположен на любой плоскости в трехмерном пространстве. Его положение и ориентация задаются в мировых координатах. Для текста любого вида необходимо задание таких параметров, как шрифт, отношение высоты к ширине и угол наклона букв, а также положение и направление строки текста. Текст может быть представлен символами двух видов: аппаратными и программными. Программный шрифт строится соответствующими графическими программами, заранее сохраняемыми в памяти компьютера. Построение его занимает больше времени, чем построение символов аппаратного шрифта, но зато форма может быть гораздо более замысловатой. Символы аппаратного шрифта состоят из отдельных отрезков, формирующих буквы.

3.5 Ввод графики

Как уже отмечалось, графической программе может требоваться поддержка ввода графических элементов, таких как точки, отрезки и многоугольники, а не только чисел и текстовых строк. Например, если пользователь хочет вычислить площадь многоугольника на экране или увеличить его размеры, он должен сначала указать интересующий его многоугольник среди прочих объектов, видимых на экране. Для ввода графики используется два вида физических устройств: локатор (устройство ввода координат) и кнопка. Локатор (locator) передает графической программе информацию о своем положении, то есть о положении курсора. Кнопка (button) сообщает о действиях пользователя (включении и выключении) в месте текущего положения курсора. В наши дни наиболее популярным устройством графического ввода является мышь, которая выполняет обе функции. Шарик в нижней части корпуса мыши позволяет вводить координаты, а кнопки наверху корпуса передают программе действия пользователя.

Устройство графического ввода может работать в трех режимах: опрос, запрос и выбор. В режиме опроса (sampling) осуществляется постоянное считывание состояния устройства ввода, прежде всего положения локатора. Например, если вы свободно рисуете на экране, перемещая мышь, она работает в режиме опроса. Перемещение мыши приводит к непрерывному перемещению курсора по экрану. В режиме запроса (requesting) положение локатора считывается только при отправке запроса, которая обычно производится при нажатии на кнопку мыши. Чтобы прояснить различие между режимами опроса и запроса, рассмотрим процесс построения многоугольника путем графического задания координат его вершин при помощи мыши. В этом случае мы перемещаем мышь до тех пор, пока курсор не окажется в нужном месте, после чего нажимаем кнопку. Курсор перемещается по экрану согласно движениям мыши, которая находится при этом в режиме опроса. Координаты вершин передаются графической программе в режиме запроса. У этих режимов есть общее свойство: графической программе передаются координаты мыши или курсора. В режиме выбора (picking) устройство графического ввода идентифицирует элемент экрана, на который указывает курсор в момент нажатия кнопки. Графические элементы можно идентифицировать по именам, присвоенным им программистом во время составления программы. Режим выбора очень удобен при редактировании чертежа, уже имеющегося на экране (например, для удаления многоугольников или изменения координат их вершин).

3.6 Дисплейный файл

Дисплейный файл (display list)это группа команд графической библиотеки, сохраненная для последующего выполнения. Большинство команд графических библиотек могут либо помещаться в дисплейный файл, либо выполняться немедленно. Дисплейный файл обеспечивает удобство и эффективность упорядочения и обработки команд библиотеки. Рассмотрим, например, перемещение изображения дома по экрану. Предположим, что рисунок состоит из нескольких сотен отрезков. Если бы эти отрезки существовали по отдельности, нам пришлось бы написать команду перемещения несколько сотен раз − для каждого из них. Однако если команды построения отрезков, образующих рисунок, объединены в дисплейный файл, команду перемещения достаточно написать только один раз. Чтобы поместить графические элементы в дисплейный файл, нужно открыть этот файл перед первой командой, которая должна в него попасть, и закрыть его после последней команды.

Дисплейный файл OpenGL ориентирован на оптимизацию производительности, в частности, при работе по сети, но не за счет производительности на отдельном компьютере. Оптимизация обеспечивается благодаря тому, что дисплейный файл хранится в виде списка команд, а не в виде динамической базы данных. Другими словами, созданный дисплейный файл изменить уже нельзя. Если бы его можно было изменять, производительность упала бы из-за накладных расходов на поиск внутри списка и управление памятью. Изменение отдельных частей дисплейного файла потребовало бы перераспределения памяти, что могло бы привести к ее фрагментации. Дисплейные файлы, как правило, работают так же быстро, как и обычные последовательности команд, не объединенные в группы. В случае OpenGL дисплейные файлы могут значительно повысить производительность, в особенности при передаче подпрограмм OpenGL по сети, поскольку файлы эти хранятся на сервере, благодаря чему сокращается сетевой трафик. К созданному дисплейному файлу могут быть применены следующие операции:

  •  множественное выполнение (multiple execution) − один и тот же файл можно выполнять много раз;
  •  иерархическое выполнение (hierarchical execution) − иерархическим называется дисплейный файл (родительский), вызывающий другие дисплейные файлы (дочерние). Иерархические дисплейные файлы удобны для объектов, состоящих из отдельных компонентов, особенно если некоторые компоненты входят в объект в нескольких экземплярах;
  •  удаление (deletion) − дисплейный файл может быть удален.

3.7 Матрица преобразования

Преобразование систем двумерных или трехмерных координат является основой компьютерной графики. Преобразования трехмерных координат необходимы при переходе от модели объекта к мировой системе координат (система координат трехмерной сцены), к системе координат наблюдателя. Поскольку трехмерная сцена может меняться, но содержать одни и те же модели объектов, постольку наблюдатель может перемещаться в пространстве (или просто закрывать поочередно то левый, то правый глаз). Графическая система должна уметь очень быстро выполнять трехмерные преобразования. Математика для данных целей предлагает аппарат аффинных преобразований (на плоскости или в пространстве).

Допустим, в нашем распоряжении точка , заданная в модельной системе координат точкой . Очевидно, что точка существует и в мировой системе координат. Но в этой системе координат точке соответствуют координаты . Переход от модельной системы координат к мировой системе задается матрицей преобразования , которая при преобразовании координат каждой точки одного пространства (системы координат) в другое пространство остается постоянной. Записывается данное преобразование выражением вида:

.    (3.2)

Как видно из выражения (3.2), хотя связываемые пространства являются трехмерными, матрица содержит четыре строки и четыре столбца, а векторы координат содержат четвертый элемент. Он необходим для определения операции сдвига систем координат.

Использование матричных преобразований позволяет представить конечную матрицу преобразования как произведение матриц простейших преобразований координат: смещения координат вдоль оси , , , поворотов систем координат вокруг соответствующих осей координат, в виде:

.     (3.3)

Матрица − матрица масштабирования осей координат имеет вид:

.        (3.4)

Здесь значения , и определяют соответствие масштабов осей координат.

Матрицы смещения координат вдоль ортогональных направлений пространства задаются следующим образом:

;        (3.5)

;        (3.6)

.        (3.7)

Здесь коэффициенты , и определяют величину смещения новой системы координат относительно начала координат исходной системы.

Наконец, матрицы вращения координат на угол записываются в виде:

;       (3.8)

;       (3.9)

.       (3.10)

Аналогичный вид матриц преобразований имеют и матрицы преобразований на плоскости. В этом случае размерность всех матриц уменьшается на одну строку и столбец.

Большинство графических библиотек выполняют преобразования координат самостоятельно, а программисту остается задать только смещение и поворот для интересующего его объекта. Однако проектировщику все равно нужно знать законы преобразований, чтобы рисовать объекты в нужных местах без проб и ошибок, в особенности, если эти объекты перемещаются достаточно сложным образом.

Получив мировые координаты всех точек объекта в его текущем положении, необходимо вычислить координаты этих точек в системе координат наблюдателя. Перевод координат из одной системы в другую называется отображением (mapping). Отображение между мировой и наблюдательской системами координат обычно также осуществляется графической библиотекой самостоятельно, по заданным программистом координатам точки зрения, точки наблюдения и направлению вектора вертикали (в мировых координатах).

3.8 Удаление невидимых линий и поверхностей

Проекция на экран станет более наглядной, если будет содержать только видимые линии и поверхности. Удаление невидимых линий (hidden-line removal) заключается в блокировании отображения отрезков, скрытых от наблюдателя, а удаление невидимых поверхностей (hidden-surface removal) есть то же самое по отношению к поверхностям. Удаление невидимых линий иллюстрирует рисунок 3.8. Очевидно, что эта процедура значительно облегчает восприятие объекта.

Опубликовано множество программных алгоритмов удаления невидимых линий и поверхностей. Их авторы пытаются повысить вычислительную эффективность и расширить диапазон объектов для применения своих алгоритмов. Однако лучше всего удаление реализуется посредством графического устройства, которое называется z-буфером, поэтому в настоящее время исследования на эту тему практически не ведутся.

Алгоритм удаления невидимых граней (back-face removal algorithm) основан на том, что грань объекта может быть видимой только в том случае, если вектор внешней нормали к этой грани направлен в сторону наблюдателя. В противном случае грань будет невидима. Например, верхняя грань бруска, изображенного на рисунке 3.9, считается видимой, если скалярное произведение вектора внешней нормали и вектора , проведенного из любой точки на грани к наблюдателю, положительно. Математически это записывается так:

  •  если , поверхность видима;
  •  если , поверхность проецируется в отрезок;
  •  если , поверхность невидима.

Этот алгоритм легко применить к объекту, ограниченному плоскими поверхностями, поскольку вектор нормали постоянен в пределах поверхности. Однако к вогнутому объекту алгоритм неприменим, поскольку грань, направленная к наблюдателю, может быть закрыта другой гранью того же объекта. Та же проблема возникает в случае нескольких выпуклых объектов, которые могут закрывать грани друг друга. Следовательно, алгоритм удаления невидимых граней применим только к одному выпуклому объекту. Более того, алгоритм применим к объектам, для которых вектор внешней нормали определяется однозначно.

Если поверхности объекта не являются плоскими, значение будет меняться пределах одной грани в зависимости от выбранной точки. Одновременно может меняться и знак произведения . Это означает, что у одной и той же грани будут как видимые, так и невидимые участки. Поэтому грань должна быть разделена на две части вдоль кривой, на которой выполняется равенство . Эта кривая называется силуэтной линией (silhouette line). После разделения грани вдоль силуэтной линии знак  будет постоянным на каждой из частей грани. Процедура может показаться легкой, но рассчитать силуэтную линию очень сложно, а из-за этого теряется главное преимущество алгоритма удаления невидимых граней − простота реализации.

После того как все грани классифицируются как видимые или невидимые, на экран выводятся ребра видимых граней, в результате чего получается рисунок без невидимых линий. Если же нужно получить рисунок без невидимых поверхностей, видимые поверхности заливаются выбранными цветами.

3.9 Визуализация

Изображения без невидимых линий и поверхностей в большинстве случаев передают форму объекта достаточно хорошо. Однако для некоторых приложений желательно иметь возможность строить более реалистичные изображения. Особенно важную роль реалистичность играет в «виртуальной реальности» − относительно новой технологии, позволяющей имитировать на компьютере реальные ситуации. Например, вы можете занести в компьютер сведения о внутреннем и внешнем виде проектируемого здания, а затем пройтись по нему и вокруг него, чтобы прочувствовать, как оно будет выглядеть на самом деле. Это средство может оказаться очень полезным для принятия решения о вложении денег в постройку здания.

Для имитации реальной сцены нужно воспроизвести эффекты, создаваемые светом, падающим на поверхности объектов. Этот процесс называется визуализацией или тонированием (rendering). Вообще говоря, все, что мы видим, − это отражение света от поверхностей, а по этому отраженному свету мы определяем форму, текстуру и цвет объекта. В усовершенствованных графических библиотеках обычно имеются некоторые средства визуализации. Для их применения достаточно задать фасетированную модель объекта, условия освещенности и свойства поверхностей (например, блестящие или тусклые). Однако для правильного использования технологий визуализации необходимо иметь представление об их основах. Даже задать правильные значения параметров функций визуализации без достаточно хорошего знания техники визуализации непросто. Поэтому в настоящем разделе мы коротко опишем две основные технологии визуализации: затушевывание (shading) и трассировка лучей (ray tracing). Подробное описание технологий визуализации можно найти в большинстве книг по компьютерной графике.

3.10 Графический интерфейс пользователя

Как отмечалось ранее, важной особенностью существующих программ CAD/САМ/CAE является взаимодействие с пользователем посредством графического ввода и графического вывода. Другими словами, программное обеспечение должно иметь возможность открывать окна (области взаимодействия) для отображения меню или значков, а также сопоставлять пунктам меню и значкам какие-либо функции. Программное обеспечение, предоставляющее такие возможности, называется графическим интерфейсом пользователя (graphical user interfaceGUI). Программист может построить самодельный графический интерфейс на базе конкретной графической библиотеки. Этот интерфейс будет обладать недостатком, связанным с невозможностью перенести его на рабочие станции, не поддерживающие использованную графическую библиотеку. Поэтому интерфейс придется переписывать заново для каждой новой графической рабочей станции.

Чтобы избежать этой проблемы, программисты строят графический интерфейс на базе системы X window, которая в настоящее время поддерживается большинством графических рабочих станций. Два типичных интерфейса пользователя, основанных на X window, называются Open Look и OSF/Motif. Open Look поддерживался корпорацией Sun Microsystems, а OSF/Motif − всеми прочими производителями, включая IBM, Hewlett-Packard, DEC и Tektronix.

Программист, пишущий приложение с использованием Open Look или OSF/Motif, может обращаться к функциям диспетчера окон для выполнения таких операций, как открытие окон, построение меню и выполнение задач, вызываемых пунктами меню.

Open Look и Motif хороши для разработки приложений по той причине, что они основаны на системе X window, достоинства которой рассмотрены ниже.

3.11 Система X window

Разработка системы X window (или просто X) началась в 1983 г. в Массачусетском Технологическом институте под кодовым названием «проект Афина». Оконный интерфейс разрабатывался на основе операционной системы под названием W, которая была создана в начале 80-х. годов в Стенфордском университете В 1986 г. вышла первая коммерческая версия системы X window, которая называлась Х10. Позднее было объявлено о выпуске X11R5.

Система X window позволяет приложению открывать и закрывать окна на рабочих станциях, подключенных к сети. Операции ввода и вывода также могут осуществляться на любой рабочей станции. Слово «окно» имеет в этом подразделе несколько иное значение, нежели в подразделе 3.3. Здесь под окном понимается отдельная область экрана рабочей станции, через которую пользователь взаимодействует с вычислительными ресурсами сети. Например, пользователь может открыть два окна на рабочей станции INDIGO2 и использовать одно из окон в качестве портов ввода и вывода для программы, выполняемой на компьютере SUN. Одновременно второе окно может использоваться для ввода и вывода программы, выполняемой на INDIGO2.

Для выполнения задач такого рода система X window должна уметь принимать запросы от клиентов, посылать запросы на другие рабочие станции и выполнять графические операции ввода-вывода с окнами экрана. Окно может быть расположено на любом компьютере сети. На рабочей станции, где должно быть открыто окно, должен работать сервер X window, способный выполнять операции с графикой. Запросы клиента пишутся с использованием специальных функций, которые хранятся в библиотеке Xlib. Библиотека Xlib должна быть установлена и на той рабочей станции, где выполняется приложение. Пересылка запроса по сети осуществляется основным кодом системы X window.

PAGE   \* MERGEFORMAT 16


Приложение

Драйвер

Устройство ввода-вывода

Рисунок 3.1 − Непосредственное использование драйвера устройства

Приложение

Графическая библиотека

Устройство ввода-вывода

Драйвер

исунок 3.2 − Использование графической оболочки

Точка

наблюдения

Точка зрения

Центр

проекции

Точка

наблюдения

Точка зрения

Центр

проекции

Экран

Экран

Рисунок 3.3 − Два вида проекций: перспективная и параллельная

y

x

z

u

v

u

v

y

x

z

Значение координаты в системе модели

Значение координаты в мировой системе

Значение координаты в системе наблюдателя

Виртуальные координаты устройства

Координаты устройства

Рисунок 3.4 − Преобразования между системами координат

Преобразование модели

Преобразование просмотра

Преобразование

проецирования

Точка зрения

Центр проекции

Экран

Окно

Точка наблюдения

Просматриваемый объем

x

y

z

Рисунок 3.5 − Окно и просматриваемый объем для перспективной проекции

Рисунок 3.6 − Ближняя и дальняя плоскости

Дальняя плоскость

Ближняя плоскость

Экран

Окно

Просматриваемый объем

Дисплей

Видовой экран 1

Видовой экран 2

Рисунок 3.7 − Видовые экраны

Рисунок 3.8 − Изображение до и после удаления невидимых линий

EMBED Equation.3  

EMBED Equation.3  

Рисунок 3.9 − Векторы, определяющие видимость грани


 

А также другие работы, которые могут Вас заинтересовать

17684. Принцип Ферма. Закон заломлення 49.85 KB
  Принцип Ферма. Закон заломлення. Світло при поширенні з однієї точки в іншу вибирає шлях якому відповідає найменший час поширення. Припустимо що показник заломлення середи змінюється у просторі неперервно і достатньо повільно так що умови використання геометричної о
17685. Принципи дії поляризаторів двопроменезаломлюючі, відбиваючі, інтерференційні дихроїчні 323.4 KB
  Принципи дії поляризаторів: двопроменезаломлюючі відбиваючі інтерференційні дихроїчні. Поляризатори виділяють лінійну складову ел. маг. хвилі. Якість поляризатора визначається за степеню поляризації p=ImaxImin/ImaxImin. Двопроменезаломлюючі. Двоякопреломля...
17686. Роздільна здатність телескопу та мікроскопу 523.26 KB
  Роздільна здатність телескопу та мікроскопу. Границі роздільної здатності оптичних приладів. Роздільна здатність оптичних приладів обмежується дифракцією Фраунгофера на їх вхідній апертурі оскільки при цьому кожна точка об’єкта зображується дифракційною карти
17687. Розсіювання світла в мутних середовищах (αλ, α ~λ, αλ,) 88.38 KB
  Розсіювання світла в мутних середовищах. Мутне середовище – середовище в якому містяться завислі частинки. Розсіювання світла у мутному середовищі можна описати на основі теорії дифракції світла на діелектричних частинках. Розглянемо три випадки відн
17688. Розсіяння Мендельштама-Брілюена 25.17 KB
  Розсіяння МендельштамаБрілюена Розсіюванням Мандельштама Брілюена називають розсіювання оптичного випромінювання конденсованими середовищами твердими тілами і рідинами в результаті його взаємодії з власними пружними коливаннями цих середовищ. Воно супроводжує...
17689. Самофокусування світла 33.92 KB
  Самофокусування світла Самофокусування світла – це ефект самовпливу що виникає при розповсюдженні в нелінійному середовищі інтенсивного світлового пучка що має обмежений поперечний переріз. Розглянемо феноменологічне матеріальне рівняння де – поляризованість...
17690. Скін-ефект. Аномальний скін-ефект 18.65 KB
  Скінефект. Аномальний скінефект Проникнення єлектронномагнітної хвилі в тонкий поверхневий шар металу є частковим випадком скінефекту. Сам шар у який проникає електромагнітне поле називається скіншаром. Напруженість поля в скіншар зменшується експоненційно таки
17691. Теорія випромінювання Ейнштейна 19.17 KB
  Теорія випромінювання Ейнштейна Це по суті новий теоретичний вивід формули Планка. Нехай значення енергії які може набувати атом чи будьяка атомна система. Розглянемо багато однакових атомів у світловому полі яке є ізотропним і неполяризованим. Нехай і – кіль...
17692. Товсті та тонкі голограми 96.74 KB
  Товсті та тонкі голограми. Голографія набір технологій для точного запису відтворення і переформатування хвильових полів. Це спосіб одержання обємних зображень предметів на фотопластинці голограми за допомогою когерентного випромінювання лазера. Голограма фік