Курсовая работа
на тему:
«Построение реалистичныхтрёхмерных изображений в стандарте OpenGL»
Введение
Компьютернаяграфика в настоящее время уже вполне сформировалась как наука. Существуетаппаратное и программное обеспечение для получения разнообразных изображений –от простых чертежей до реалистичных образов естественных объектов. Компьютернаяграфика используется практически во всех научных и инженерных дисциплинах длянаглядности восприятия и передачи информации. Знание её основ в наше времянеобходимо любому учёному или инженеру. Она властно вторгается в бизнес,медицину, рекламу, индустрию развлечений и многие другие области.
Вкомпьютерной графике имеется уникальная возможность получить в собственноераспоряжение очень точного и исполнительного помощника, который может создатьлюбые рисованные картинки, – нужно только проинструктировать его, как этосделать.
Дляпрограммирования графики можно использовать одну из стандартных библиотек, темболее, что их достаточно много. Графический стандарт OpenGL, разработан и утверждёнв 1992 году девятью ведущими фирмами, среди которых: Digital Equipment Corporation, Evans & Sutherland, Hewlett-Packard Co., IBM Corp., Intel Corp., Intergraph Corp., Silicon Graphics Inc., Sun Microsystems Inc. и конечно же Microsoft Corp.
В основустандарта была положена библиотека IRIS GL, разработанная Silicon Graphics. Это достаточно простаяв изучении и использовании графическая система, обладающая при этомпоразительно широкими возможностями: стабильность, надёжность, переносимость,простота использования.
Построение реалистических изображений
Построение реалистических изображений включает всебя как физические, так и психологические процессы. Свет, после взаимодействияс окружающей средой попадает в глаз, где вырабатываются электроимпульсы,воспринимаемые мозгом. Восприятие – это приобретаемое свойство. Из опытовизвестно, что чувствительность глаза к яркости света изменяется пологарифмическому закону. Причем глаз приспосабливается к средней яркостиобозреваемой сцены, поэтому область с постоянной яркостью на темном фонекажется ярче или светлее, чем на светлом. Это явление называется одновременнымконтрастом(рис. 1).
/>
Рис. 1.Эффект одновременногоконтраста
Яркость центрального квадрата на обоих рисункахравна 0.5, а охватывающего – 0.8 на левом и 0.2 на правом рисунке. Похожее наодновременный контраст явление существует и для цветов.
Еще одним свойством глаза, имеющим значение длякомпьютерной графики, является то, что границы областей постояннойинтенсивности кажутся более яркими, в результате чего такие областивоспринимаются как имеющие переменную интенсивность. Это явление называетсяэффектом полос Махаособенно хорошо заметно на полутоновых поверхностях,заданных многоугольниками. Увеличивая количество граней многоугольников, егоможно ослабить, но полностью устранить нельзя (рис. 2). Это тольконесколько вопросов, возникающих при создании реалистических изображений. Мы жезаймемся вопросами закрашивания видимых поверхностей. Внешний вид поверхностизависит от вида источника света, которым освещается объект, от свойствповерхности (цвет, текстура, отражательная способность), а также от положения иориентации поверхности относительно источника света и других поверхностей.Источник света может представлять собой точечный источник, подобный солнцу илилампе накаливания, или же распределенный источник, аналогичный группе лампдневного света. На практике во многих случаях присутствует также естественныйсвет, падающий с самых разных направлений.
/>
Рис. 2.Эффект полос Маха
Наиболее простым для моделирования источникомявляется рассеянный естественный свет, т. к. он обеспечивает постоянноеосвещение всех поверхностей независимо от их ориентации. К сожалению, такойсвет дает весьма нечеткие изображения, поскольку достаточно редки ситуации,когда освещение обеспечивается только естественным светом. При естественномосвещении две смежные стороны куба должны быть закрашены одинаково, а их общееребро должно быть неразличимо.
Более сложным (с точки зрения моделирования), нозато более реальным, является точечный источник, при использовании которогоосвещенность поверхности зависит от ее ориентации: если лучи направленыперпендикулярно к поверхности – она освещена ярко. Чем меньше угол падениялучей, тем меньше освещенность. Такое изменение освещенности позволяетэффективно распознавать трехмерную структуру объекта.
Повышение реалистичности изображения может бытьдостигнуто путем воспроизведения теней, которые отбрасывает объект,освещенный точечным источником света. Тени не только повышают реалистичностьизображения, но и являются дополнительным средством для распознавания глубины.
Еще одним способом повышения реалистичностиизображения является воспроизведение свойств поверхности. Одниповерхности являются матовыми и рассеивают отраженный свет по разнымнаправлениям; другие – обладают блеском и отражают свет только в некоторыхнаправлениях. Поверхности могут быть полупрозрачными, т.е. пропускать частьсвета и одновременно отражать другую часть.
Другим свойством поверхности является их текстура.Очень редко поверхности бывают совершенно гладкими, однако именно такими ихмоделируют с помощью многоугольников и параметрических поверхностей. Аналогичнаповерхность редко бывает окрашена равномерно: чаще на ней бывает какой либоузор. Реалистичность изображения можно повысить путем нанесения узора наповерхность.
Само перечисление способов построенияреалистичных изображений говорит о том, какой большой объем работы необходимопроделать, чтобы получить что-нибудь, в самом деле, стоящее. И это было быдействительно так если бы не библиотека OpenGL, которая берет на себябольшую часть «черновой» работы.
Освещение объектов
Световая энергия, падающая на поверхность,частично поглощается и превращается в тепло, а частично отражается ипропускается. Объект можно увидеть, только если он отражает или пропускаетсвет. Количество поглощенной, отраженной или пропущенной энергии зависит отдлины волны света. Если объект поглощает лишь определенные длины волн, то усвета, исходящего от объекта, изменяется распределение энергии – объектвыглядит цветным. Цвет объекта определяется поглощаемыми длинами волн. Свойстваотраженного света зависят от строения, направления и формы источника света, атакже от ориентации и свойств поверхности. Отраженный от объекта свет можетбыть диффузным или зеркальным. Свойством диффузного отражения, т.е.равномерного по всем направлениями рассеивания света, обладают матовыеповерхности. При этом кажется, что поверхности имеют одинаковую яркостьнезависимо от угла обзора. Для таких поверхностей справедлив закон,устанавливающий соответствие между количеством отраженного света и косинусомугла между направлением L на точечный источник света и нормалью к поверхности (рис. 3),т.е. количество отраженного света не зависит от положения наблюдателя, аопределяется материалом объекта и длиной волны света. Для представлениядиффузного отражения от цветных поверхностей расчеты проводятся отдельно дляосновных составляющих цвета.
/>
Рис. 3.Падающий свет и нормаль кповерхности
Зеркальное отражение происходит от внешнейповерхности объекта. Если осветить ярким светом яблоко, то в результатезеркального отражения возникнет световой блик, а свет, отраженный от остальнойчасти яблока, появится вследствие диффузного отражения. При этом в том месте,где находится световой блик, яблоко кажется не красным, а скорее белым, т.е.окрашенным в цвет падающего света. Если изменить положение головы, то сместитсяи световой блик. Это объясняется тем, что блестящие поверхности неодинаковоотражают свет по всем направлениям. От идеально отполированной поверхности светотражается только в том направлении, для которого углы падения и отражениясовпадают. Это означает, что наблюдатель сможет увидеть зеркально отраженныйсвет только в том случае, если угол α равен нулю (рис. 4). Такимобразом, интенсивность зеркального отражения зависит от угла падения, длиныволны падающего света и свойств вещества.
/>
Рис. 4.Зеркальное отражение
Поверхности могут обладать не только свойствамизеркального и диффузного отражения, но и свойствами направленного и диффузногопропускания. Направленное пропускание света происходит сквозь прозрачныевещества (например, стекло). Через них обычно хорошо видны предметы, даже,несмотря на то, что лучи света, как правило, преломляются, т.е. отклоняются отпервоначального направления. Диффузное пропускание света происходит сквозьпросвечивающие материалы (например, замерзшее стекло), в которых поверхностныеили внутренние неоднородности приводят к беспорядочному перемешиванию световыхлучей. Поэтому когда предмет рассматривается через просвечивающее вещество, егоочертания размыты.
Очевидно, что если имеется не один, а несколькоисточников света, то каждая из перечисленных составляющих от каждого источникасуммируется. Все из перечисленных свойств моделей освещенности нашли своеотражение, с той или иной степенью полноты, в OpenGL.
Перечислим те параметры, которые необходимоучитывать при расчете освещенности: текущий вектор нормали, свойства материала,параметры источника света, параметры модели освещения. Рассмотрим каждый из нихболее подробно с точки зрения поддержки этих параметров вOpenGL.
Нормали
В самом общем случае нормаль к поверхностипредставляет ее локальную кривизну, и, следовательно, направление зеркальногоотражения (рис. 5) Применительно к нашим знаниям можно сказать, чтонормалью называется вектор, определяющий ориентацию грани (рис. 6). Векторнормали является одной из характеристик, ассоциированных с каждой вершиной, идляего определения в OpenGL предусмотрены специальные команды:
void glNormal3 [b s i f d] (type coords)
void glNormal3 [b s i f d]v (type coords)
которые присваивают значения координат, заданныхпараметрами coords, вектору нормали. Аргументы типов GLbyte, GLshortи GLintпреобразуются в формат сплавающей точкой и ограничиваются диапазоном [-1.0, 1.0]. В общем случаенормаль, определяемая этими командами, не имеет единицы длины. Однако есливключен режим нормализации (выполнена команда glEnable с аргументом GL_NORMALIZE), то нормали,определенные при помощи этой команды, нормализуются после трансформации. По умолчаниюнормализация заблокирована, а вектор нормали имеет координаты (0.0, 0.0, 1.0).
/> />
Рис. 5.Векторы нормали Рис. 6.Грань и нормаль к ней
Изменять параметры вектора текущей нормали можнов любой момент времени. И, управляя их текущими значениями, можно добиватьсяочень интересных эффектов, в частности, при освещении объектов.
Свойства материала
Различные материалы по-разному отражают свет.Металл это делает хорошо, а пластиковые поверхности обычно выглядят тусклыми. Крометого, некоторые поверхности сами излучают свет, например, фосфор. Задавая различныепараметры материала, можно управлять тем, насколько блестящим он будетвыглядеть, и будет ли он сам излучать свет. На рис. 7 изображены 24чайника, освещаемые одним источником света.
/>
Рис. 7 Объекты с различными свойствамиматериала
Что здесь для нас интересно? Прежде всего – самисвойства. В приведенном фрагменте мы устанавливали рассеянный, диффузный изеркальный цвета материала, причем, только для его лицевой поверхности. Можноли задавать какие-нибудь еще параметры? Для ответа на этот вопрос рассмотримкоманды:
void glMaterial [i f] (GLenum face, GLenumpname, GLtype* params)
и
void glMaterial [i f] v (GLenum face, GLenumpname, GLtype* param)
которые позволяют определить различные свойстваматериала. Какие именно – зависит от используемых параметров. Параметрыматериала, как и во многих других случаях, различаются для лицевой и обратнойповерхностей. Параметры лицевой поверхности используются для точек, линий,битовых массивов и всех многоугольников, когда заблокировано двустороннееосвещение или только для лицевых, если двустороннее освещение разрешено.Параметры для обратных поверхностей определяют затенение невидимыхмногоугольников, только когда разрешено двустороннее освещение. К какимповерхностям применяются задаваемые параметры, определяется аргументом face:
GL_FRONT лицевые
GL_BACK обратные
GL_FRONT_AND_BACK и те и другие
Аргумент рnameопределяет, какиепараметры материала будут обновляться и может принимать только одно значение – GL_SHININESS, задающее степеньзеркального отражения материала для первой версии команды и следующие значениядля второй:
Параметр Значение GL_AMBIENT
Параметр paramsсодержит четыре целых или вещественных значения цветов RGBA, которые определяют рассеянный цвет материала. По умолчанию значение рассеянного цвета равно (0.2, 0.2, 0.2, 1.0) GL_DIFFUSE
Параметр paramsсодержит четыре целых или вещественных значения RGBA, которые определяют цвет диффузного отражения материала. По умолчанию значение диффузного цвета равно (0.8, 0.8, 0.8, 1.0) GL_SPECULAR
Параметр paramsсодержит четыре целых или вещественных значения RGBA, которые определяют цвет зеркального отражения материала. По умолчанию значение зеркального цвета равно (0.0, 0.0, 0.0, 1.0)
Последний аргумент – param (s) содержит значение(я),которые присваиваются соответствующему параметру.
Из приведенного описания видно, что, задаваяпараметры материала, можно управлять тем, насколько блестящим будет выглядетьматериал и будет ли он самостоятельно излучать свет. Другими словами, можноопределять отражающие свойства материала. Наиболее часто учитываемыми вразличных моделях являются диффузный и зеркальный отраженный свет, посколькудиффузное отражение придает объекту его естественный цвет, а зеркальноеопределяет отражающие свойства поверхности: на очень блестящей поверхностизеркальное отражение приводит к появлению резко очерченных бликов, а для менееблестящих объектов выглядит более тускло.
Таким образом, чтобы объект выглядел блестящим,необходимо сузить угол зеркального отражения, а для тусклых поверхностейнаоборот расширить его. Используемые при моделировании математическиезависимости показывают, что интенсивность отраженного света определяется неуглом отражения, а косинусом этого угла. Например, для модели Фонга зависимостьимеет вид
Is= w (i, λ) cosnα,
где w (i, λ) – кривая отражения, представляющая отношение зеркальноотраженного света к падающему как функцию угла падения i и длины волны λ, а n – степень, аппроксимирующаяпространственное распределение зеркально отраженного света. Зачем я все этоописываю? Дело в том, что в OpenGL имеется возможность косвенного управления угломзеркального отражения. Осуществляется это при помощи параметра GL_SHININESS, позволяющего определятьименно значение n.
Каждый параметр устанавливается отдельным вызовом команды и,следовательно, не зависит от остальных. Сложность здесь только одна – какопределить необходимые значения задаваемых цветов, чтобы получить поверхностьтого материала, который требуется. Наряду с только что рассмотренной командой,для установки параметров материала в OpenGL реализована еще одна:
void glColorMaterial (GLenum face, GLenummode)
У этой команды аргумент faceможет принимать те же значения, что и в команде glMaterial*,а аргумент mode –только значенияGL_AMBIENT_AND_DIFFUSE, GL_AMBIENT, GL_EMISSION, GL_DIFFUSE и GL_SPECULAR. По умолчанию используетсяGL_AMBIENT_AND_ DIFFUSE. Если разрешен режим GL_COLOR_MATERIAL (вызовом команды glEnable с соответствующимаргументом), то параметры поверхностей материала, заданные аргументами mode и face, принимают значениятекущего цвета. В этом случае можно изменять параметры материала для каждойвершины, используя только команду glColor*, без дополнительного вызова glMaterial*, что в некоторых случаяхявляется более удобным.
Грани
Граньюназывается сторона многоугольника. Причем вкачестве многоугольника могут выступать как простейший треугольник, так исложный многоугольник. Единственным условием для них является то, чтомногоугольник любой степени сложности должен лежать в одной плоскости. Отсюдаочевидно, что трехмерные объекты состоят из нескольких плоских многоугольников.И для того, чтобы изобразить «гладкий» конус потребуется достаточно большоечисло плоских многоугольников. Каждый многоугольник имеет две стороны, т.е. двеграни, – лицевую и обратную. И на обеих можно «рисовать». Причем, если мы «рисуем»на лицевой грани, а она в данный момент не видна, то мы только тратим время.Очевидно, что только одна грань может быть видима в окне в текущий моментвремени. Для того чтобы не тратить время на воспроизведение невидимых граней,во всех графических системах реализованы механизмы, позволяющие различатьлицевые и обратные грани. Естественно, что такой механизм есть и в OpenGL. Причем, в отличие отмногих других систем, – очень гибкий. При рассмотрении многоугольных примитивовуже говорилось о важности порядка обхода вершин. И связано это именно с гранями– лицевой и обратной. На рис. 8, на котором представлены два возможныхспособа обходя вершин.
/>
Рис. 8.Обход вершин по часовойстрелке и против
После того как многоугольник спроецирован в окно,библиотека OpenGL «смотрит», в какой последовательности обходятся вершинымногоугольника: если они обходятся по часовой стрелке, то видимой является однаиз граней; если против часовой стрелки, то другая. Библиотека OpenGL, в отличие от многихдругих графических библиотек, позволяет программисту самому определять, какуюгрань считать лицевой, а какую обратной. Осуществляется это при помощи команды
void glFrontFace (Glenum mode)
которая позволяет определить, какая грань беретсяв качестве лицевой, в зависимости от направления обхода многоугольника – почасовой стрелке или против. Направление обхода задается параметром mode, который может приниматьзначения GL_CW – по часовой стрелке и GL_CCW – против часовой стрелки (установлено по умолчанию).
Кроме возможности самостоятельного определениятипа грани – лицевая или обратная, OpenGL предоставляет также механизм, позволяющийисключить из процесса вывода грани одного типа.
void glCullFace (GLenum mode)
эта команда позволяет указать грань – лицевую илиобратную. В качестве граней могут использоваться треугольники, квадраты,многоугольники или прямоугольники. Являются они лицевыми или обратными,задается командой glFrontFace. Какие грани будут отображаться, задается параметром mode, который может приниматьодно из двух значений: GL_FRONT – для лицевых и GL_BACK – для обратных граней(последнее используется по умолчанию).
Для того чтобы разрешить OpenGL отбирать изображаемыеграни, необходимо выполнить команду glEnable с аргументом GL_CULL_FACE. Блокировка этого режимакак обычно осуществляется командой glDisable с тем же аргументом.
На рис. 9 представлено окно приложения Faces, для случая, когданаправления обхода вершин и режима выбора граней используются значения поумолчанию. Режим отбора граней – заблокирован.
/>
Рис. 9. Объект, у которого видны и лицевая и обратнаяграни.
Источник света
Рассмотрим, как и какие параметры источника светаможно устанавливать. Начнем с команды glLight*, значения аргументов которой зависят от того,работаем мы с ее скалярной или векторной версией.
void glLight[if] (GLenum light, GLenum pname,GLfloat param)
Аргумент light определяет номеристочника света, общее число которых зависит от реализации. В качестве значенияэтого параметра следует использовать символическое имя GL_LIGHTi, где i лежит в диапазоне от 0до GL_MAX_LIGHTS, которое не может бытьбольше восьми. Аргумент pname является символической константой, определяющейустанавливаемый параметр:
GL_SPOT_EXPONENT Параметр param содержит единственное целое или вещественное значение, которое задает распределение интенсивности света. Доступны значения из диапазона [0, 128]. Эффективность интенсивности света ослабевает пропорционально косинусу угла между направлением от источника и нормалью в вершине (рис. 3). Чем больше это значение, тем более сфокусирован источник света. По умолчанию установлено значение 0, что соответствует рассеянному свету GL_SPOT_CUTOFF Параметр param является целым или вещественным значением, которое определяет максимальный угол разброса источника света. Доступны значения из диапазона [0, 90] и 180. По умолчанию используется значение 180, что соответствует рассеянному свету
Аргумент param определяет значение,которое устанавливается для параметра pname источника light.
После того как установлены параметры источниковсвета, эти источники можно включать и выключать в любое время. Источник света i включается иливыключается командами glEnable или glDisable с аргументом GL LIGHTi, который определяетсякак GL_LIGHTi = GL_LIGHT0 + i.
Определение параметров источников света во многомподобно установке свойств материала. Каждый параметр задается отдельно, а есликакой-либо не определен явным образом, то он все равно участвует в процессеосвещения со значением, установленным по умолчанию. Отличающиеся параметрыинтуитивно понятны, и на первом этапе работы с источниками света некоторыетрудности может вызвать только тот, который определяет максимальный уголразброса, – GL_SPOT_CUTOFF. Но и он становится совершенно понятным, если посмотреть на рис. 10:чем больше это значение, тем более «рассеянным» становится свет от источника.
/>
Рис. 10. Углы разброса источника света
/>
Рис. 11. Три видимых источника света и один невидимый – фоновый
Возможности OpenGL по поддержке режимаосвещения не ограничиваются заданием параметров материала и источников света.Имеется возможность определить модель освещения.
Модель освещения
Параметры модели освещения задаются командами
void gILightModelfi f] (GLenum pname, GLenumparam)
void glLightModel [i f] v (GLenum pname, contstGLtype* params)
Аргумент pname определяет единственноезначение параметра модели освещения и может принимать следующие значения:GL_LIGHT_MODEL_LOCAL_VIEWER Параметр param содержит единственное булевское значение, определяющее местоположение наблюдателя. Если param=FALSE, то направление обзора считается параллельным оси – z и направленным вдоль нее, независимо от действительного положения в видовых координатах. В противном случае (TRUE) предполагается, что наблюдатель находится в начале видовой системы координат. По умолчанию параметр param установлен в FALSE GL_LIGHT_MODEL_TWO_SIDE
Параметр paramпредставляет единственное булевское значение, которое определяет расчет освещенности многоугольников для одной или двух граней. Это не влияет на расчет освещенности для точек, линий или битовых массивов. Если param=FALSE, то задано одностороннее освещение, и в уравнении освещения используются только параметры лицевой грани материала. В противном случае (TRUE) задается двухстороннее освещение. В этом случае освещенность вершин обратной грани многоугольников рассчитывается на основе параметров обратной грани материала, и их нормали направлены в противоположные стороны. Освещенность вершин лицевой грани многоугольника всегда рассчитывается на основе параметров лицевой грани материала без изменения их нормалей. По умолчанию FALSE
Аргумент param определяет значение,которое присваивается параметру модели освещения, заданному параметром pname.
Подведем некоторый итог. В режиме RGBA цвет освещенной вершиныопределяется суммой интенсивностей эмиссии материала, рассеянного отраженияматериала и полной фоновой интенсивности модели освещения. Вклад каждогоисточника света складывается из трех составляющих: фоновой, диффузной изеркальной. Фоновая составляющая складывается из фонового отражения материала ифоновой интенсивности света. Диффузная составляющая определяется диффузнымотражением материала, диффузной интенсивностью источника света инормализованным вектором нормали. И, наконец, зеркальная составляющаяопределяется зеркальным отражением материала, зеркальной интенсивностьюисточника света и нормализованными векторами от вершины к источнику света и кнаблюдателю. Вклад всех трех составляющих уменьшается в зависимости отрасстояния до источника, от направления на него, экспоненциального разброса иугла разброса источника света. Компонент альфа результирующего цветаустанавливается в значение альфа диффузного отражения материала.
Кроме рассмотренных возможностей моделированияосвещения объектов, которые непосредственно поддерживаются OpenGL, для придания большейреалистичности следует учитывать также такие факторы, как прозрачностьнекоторых материалов и, наоборот, полную непрозрачность, которая приводит кпоявлению теней. Эти возможности OpenGL непосредственно не поддерживаются, и их учетполностью ложится на плечи программистов. Рассмотрим некоторые аспекты этихвопросов.
Поверхности, пропускающие свет
реалистический изображение нормаль свет
Как уже отмечалось в начале главы, поверхностимогут обладать не только свойствами зеркального и диффузного отражения, но ианалогичными свойствами пропускания. Направленное (зеркальное) пропусканиесвета происходит сквозь прозрачные вещества, например, воду или стекло. Черезних предметы обычно видны хорошо, несмотря на то, что лучи света отклоняются отсвоего первоначального направления (рис. 12). Если же свет при пропусканиичерез вещество рассеивается, то мы имеем диффузное пропускание. Такие веществакажутся полупрозрачными или матовыми, а объект, если смотреть на него сквозьтакое вещество, будет выглядеть нечетким или искаженным.
/>
Рис. 12. Эффект преломления
Именно с преломлением луча связан тот факт, чтоторчащая из воды палка кажется согнутой. Преломление рассчитывается по законуСнеллиуса, который утверждает, что падающий и преломленный лучи лежат в однойплоскости, а углы падения и преломления связаны соотношением:
η1sinθ=η2sinθ’
где η1 и η2 – показателипреломления двух сред, θ – угол падения, а θ’ – угол преломления(рис. 13). Обратите внимание что ни одно вёщество не пропускает весьпадающий свет – часть его всегда отражается.
/>
Рис. 13. Геометрия преломления
Как видно, учитывать эффекты преломления (даженаправленного) достаточно сложно. Но если эту сложность преодолеть, тозатраченное время с лихвой окупается чувством удовлетворения от полученныхрезультатов. В простейшем случае прозрачные поверхности строятся отдельно отвсех остальных, и в буфер записывается линейная комбинация двух ближайшихповерхностей. При этом результирующая интенсивность рассчитывается по формуле
I = tI1+(1-t) I2 0≤t≤1
где I1 – видимая поверхность, I2 — поверхность,расположенная непосредственно за ней, t – коэффициент прозрачности I1.
/>
Рис. 13. Учет эффекта прозрачности материала
Тени
Все согласятся, что изображение с тенями выглядитгораздо реалистичнее. Если положения наблюдателя и источника света совпадают,то теней не видно, но они появляются при перемещении наблюдателя в любую другуюточку. Наблюдения и жизненный опыт подсказывают, что тень состоит из двухчастей: полутени и полной тени. Полная тень – это центральная темная, резкоочерченная часть, а полутень – окружающая ее более светлая часть. Распределенныеисточники света создают как тень, так и полутень. В полной тени свет вообщеотсутствует, а полутень освещается частью распределенного источника. Сложностьвычислений зависит от положения источника. Проще всего, когда источникнаходится в бесконечности, а тени определяются с помощью ортогональногопроецирования. Сложнее если источник расположен на конечном расстоянии, но внеполя зрения, – здесь необходима перспективная проекция. И самый трудный случай –когда источник находится в поле зрения, ведь при этом необходимо делитьпространство на секторы и искать тени отдельно для каждого из них. Всеприведенные рассуждения легко распространить на несколько источников света.Очевидно, что при этом возрастает только сложность учета всех факторов.
Списоклитературы
1. Ю. Тихомиров. «Программированиетрёхмерной графики». С.-Петербург БХВ-Петербург. 2001 г. (256 с.)
2. Роджерс Д. «Алгоритмическиеосновы машинной графики». Пер. с англ. – Москва: Мир 1989 г. (512 с.)
3. Роджерс Д., Адамс Дж.«Математические основы машинной графики». Пер.с англ. – Москва: Машиностроение 1980 г.(240 с.)