Определение цвета точки. Текстурные карты и свойства материалов — КиберПедия 

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Определение цвета точки. Текстурные карты и свойства материалов

2022-10-29 43
Определение цвета точки. Текстурные карты и свойства материалов 0.00 из 5.00 0 оценок
Заказать работу

В таких задачах компьютерной графики как получение изображений фотографического качества (проще говоря то, чем занимаются 3ds max, Maya и прочие), имитирующих реальные объекты, жизненно необходимы материалы. Будем полагать, что основным методом закраски у нас будет алгоритм Фонга (Phong shading) с интерполяцией нормалей (т.к. основным объектом будем считать треугольник, с заданными нормалями в вершине).

В закраске по Фонгу используются следующие св-ва материала:

  • Цвет в области тени (Ambient color). Берется с учетом фонового освещения сцены.
  • Рассеянный цвет (Diffuse color). Берется отдельно для каждого источника света, пропорционально косинусу угла между нормалью в точке и вектором на источник света .
  • Цвет блика (Specular color). Берется отдельно для каждого источника света, пропорционально косинусу угла между вектором отражения взгляда наблюдателя в точке и вектором на источник света в определенной степени .

Дополнительно используются следующие свойства:

  • Плотность материала (Opacity). Параметр обратный прозрачности. 1 – материал не пропускает свет, 0 – материал полностью прозрачен.
  • Степень отражения (Reflection). 1 – материал отражает весь свет.
  • Сила блика (Specular amount). Дополнительный коэффициент для цвета блика.
  • Степень блика (Specular level). Определяет какой будет блик - точечный (большая степень), или широкий (степень близка к нулю).
  • Коэффициент преломления (Refraction level). Насколько луч изменит свой угол при прохождении полупрозрачного материала. Угол находится из известного оптического закона: отношение косинуса угла падающего света к косинусу угла преломленного света, равно отношению оптических плотностей (в данном случае коэффициенту преломления).
  • Степень шероховатости (Bump amount). См. далее.

Для нахождения векторов отраженного луча и преломленного луча необходимо вспомнить геометрию.

Отраженный луч. Находим - проекцию на , вектор отраженного луча получается как .

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

Назад | Содержание | Вперед

Цвет в компьютерной графике

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

Само понятие цвета тесно связано с тем, как человек (человеческий взгляд) воспринимает свет; можно сказать, что цвет зарождается в глазу.

Субхарактеристики цвета:

Цветовой тон – ярковыраженность красного(R), зелёного(G) или синего(В) –это основная цветовая характеристика.

Насыщенность – степень разбеленности, степень осветления цветового фона.

Светлота - интенсивность (мощность) цвета.

lдомин. – характеризует цветовой тон

Цвет, который может быть заменен lдомин. называется спектральным.

- насыщенность

Ахроматическое изображение – это черно-белое изображение.

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

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

На рисунке представлены графики функций чувствительности для всех трех типов колбочек. Видно, что у одной из них пик чувствительности приходится на волны с короткой длиной волны (синий цвет), у другой – на волны средней длины волны (желто-зеленый цвет), а у третьей – на волны с большой длиной волны (красный цвет).

Существует трёхкомпонентная гипотеза: любой цвет (оттенок) можно получить из 3-х компонентов R,G,B.

15 Преобразования координат и проекции

В OpenGL используются как основные три системы координат: левосторонняя, правосторонняя и оконная. Первые две системы являются трехмерными и отличаются друг от друга направлением оси z: в правосторонней она направлена на наблюдателя, а в левосторонней – в глубь экрана. Расположе-ние осей x и y аналогично описанному выше. Левосторонняя система используется для задания значений параметрам команды gluPerspective(), glOrtho(), которые будут рассмотрены ниже, а правосторонняя или мировая система координат во всех остальных случаях. Отображение трехмерной информации происходит в двумерную оконную систему координат.

Для задания различных преобразований объектов сцены в OpenGL используются операции над матрицами, при этом различают три типа матриц: видовая, проекций и текстуры. Все они имеют размер 4x4. Видовая матрица определяет преобразования объекта в мировых координатах, такие как параллельный перенос, изменение масштаба и поворот. Матрица проекций задает как будут проецироваться трехмерные объекты на плоскость экрана (в оконные координаты), а матрица текстуры определяет наложение текстуры на объект.

Для того, чтобы выбрать, какую матрицу надо изменить, используется команда

void glMatrixMode (GLenum mode)

вызов которой со значением параметра mode равным GL_MODELVIEW, GL_PROJECTION, GL_TEXTURE включает режим работы с видовой, проекций и матрицей текстуры соответственно. Для вызова команд, задающих матрицы того или иного типа необходимо сначала установить соответствую-щий режим.

Для определения элементов матрицы текущего типа вызывается команда

void glLoadMatrix[f d](GLtype *m)

где m указывает на массив из 16 элементов типа float или double в соответствии с названием команды, при этом сначала в нем должен быть записан первый столбец матрицы, затем второй, третий и четвертый.

Команда

void glLoadIdentity (void)

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

void glPushMatrix (void)

void glPopMatrix (void)

Они записывают и восстанавливают текущую матрицу из стека, причем для каждого типа матриц стек свой. Для видовых матриц его глубина равна как минимум 32, а для двух оставшихся типов как минимум 2.

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

void glMultMatrix[f d] (GLtype *m)

где m должен задавать матрицу размером 4x4 в виде массива с описанным расположением данных. Однако обычно для изменения матрицы того или иного типа удобно использовать специальные команды, которые по значениям своих параметров создают нужную матрицу и перемножают ее с текущей. Чтобы сделать текущей созданную матрицу, надо перед вызовом этой команды вызвать glLoadIdentity().

В целом, для отображения трехмерных объектов сцены в окно приложения

используется следующая последовательность действий:

Координаты Видовые Ус Усеченные

объекта координаты координаты

 

Нормализованные

Оконные

координаты координаты

Рассмотрим каждое из этих преобразований отдельно.

Видовое преобразование

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

(x’, y’, z’, 1)T = M * (x, y, z, 1)T

где M – матрица видового преобразования. Перспективное преобразование и проектирование производится аналогично. Сама матрица может быть создана с помощью следующих команд:

void glTranslate[f d](GLtype x, GLtype y, GLtype z)

void glRotate[f d](GLtype angle, GLtype x, GLtype y, GLtype z)

void glScale[f d](GLtype x, GLtype y, GLtype z)

glTranlsate..() производит перенос объекта, прибавляя к координатам

его вершин значения своих параметров.

glRotate..() производит поворот объекта против часовой стрелки на угол angle (измеряется в градусах) вокруг вектора (x,y,z).

glScale..() производит масштабирование объекта (сжатие или растяжение), домножая соответствующие координаты его вершин на значения своих параметров.

Все эти преобразования будут применяться к примитивам, описания которых будут находиться ниже в программе. В случае если надо, например, повернуть один объект сцены, а другой оставить неподвижным, удобно сначала сохранить текущую видовую матрицу в стеке командой glPushMatrix(), затем вызвать glRotate..() с нужными параметрами, описать примитивы, из которых состоит этот объект, а затем восстановить текущую матрицу командой glPopMatrix().

Кроме изменения положения самого объекта иногда бывает нужно изменить положение точки наблюдения, что однако также приводит к изменению видовой матрицы. Это можно сделать с помощью команды

void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz)

где точка (eyex,eyey,eyez) определяет точку наблюдения, (centerx, centery, centerz) задает центр сцены, который будет проектироваться в центр области вывода, а вектор (upx,upy,upz) задает положительное направление оси у, определяя поворот камеры. Если, например, камеру не надо поворачивать, то задается значение (0,1,0), а со значением (0,-1,0) сцена будет перевернута.

Фактически, эта команда совершает перенос и поворот объектов сцены, но в таком виде задавать параметры бывает удобнее.

 

Проекции

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

void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far)

void gluOrtho2D (GLdouble left, GLdouble right, GLdouble bottom, GLdouble top)

Первая команда создает матрицу проекции в усеченный объем видимости (параллелограмм видимости) в левосторонней системе координат. Параметры

команды задают точки (left, bottom, -near) и (right, top, -near), которые отвечают левому нижнему и правому верхнему углам окна вывода. Параметры near и far задают расстояние до ближней и дальней плоскостей отсечения по дальности от точки (0,0,0) и могут быть отрицательными.

Во второй команде, в отличие от первой, значения near и far устанавливаются равными –1 и 1 соответственно.

Перспективная проекция определяется командой

void gluPerspective (GLdouble angley, GLdouble aspect, GLdouble znear, GLdouble zfar)

которая задает усеченный конус видимости в левосторонней системе координат. Параметр angley определяет угол видимости в градусах по оси у и должен находиться в диапазоне от 0 до 180. Угол видимости вдоль оси x задается параметром aspect, который обычно задается как отношение сторон области вывода. Параметры zfar и znear задают расстояние от наблюдателя до плоскостей отсечения по глубине и должны быть положительными. Чем больше отношение zfar/znear, тем хуже в буфере глубины будут различаться располо-женные рядом поверхности, так как по умолчанию в него будет записываться ‘сжатая’ глубина в диапазоне от 0 до 1 (см. следующий пункт).

Область вывода

После применения матрицы проекций на вход следующего преобразования подаются так называемые усеченные (clip) координаты, для которых значения всех компонент (xc, yc, zc, wc)T находятся в отрезке [-1,1]. После этого находятся нормализованные координаты вершин по формуле:

(xn, yn, zn)T = (xc/wc , yc/wc, zc/wc)T

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

void glViewPort (GLint x, GLint y, GLint width, GLint height)

Значения всех параметров задаются в пикселах и определяют ширину и высоту области вывода с координатами левого нижнего угла (x,y) в оконной системе координат. Размеры оконной системы координат определяются текущими размерами окна приложения, точка (0,0) находится в левом нижнем углу окна.

Используя параметры команды glViewPort(), вычисляются оконные координаты центра области вывода (ox,oy) по формулам ox=x+width/2, oy=y+height/2.

Пусть px=width, py=height, тогда можно найти оконные координаты каждой вершины:

(xw, yw, zw)T = ((px/2) xn+ ox , (py/2) yn+ oy, [(f-n)/2] zn+(n+f)/2)T

При этом целые положительные величины n и f задают минимальную и максимальную глубину точки в окне и по умолчанию равны 0 и 1 соответственно. Глубина каждой точки записывается в специальный буфер глубины (z-буфер), который используется для удаления невидимых линий и поверхностей. Установить значения n и f можно вызовом функции

void glDepthRange (GLclampd n, GLclampd f)

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

 

 

Аксонометрическая проекция

           Аксонометрическая проекция – разновидность параллельной проекции. Для нее все лучи проецирования располагаются под прямым углом к плоскости проецирования (рис. 2.16). Зададим положения плоскости проецирования с помощью двух углов --  и . Расположим камеру так, чтобы проекция оси z на плоскости проецирования X0Y была бы вертикальной линией (параллельной оси 0Y).

 
Для того чтобы найти соотношения между координатами (x,y,z) и (X,Y,Z) для любой точки в трехмерном пространстве, рассмотрим преобразования системы координат (x,y,z) в систему (X,Y,Z). Зададим такое преобразование двумя шагами.

           1 шаг. Поворот системы координат относительно оси z на угол . Такой поворот осей описывается матрицей:  

.

2 шаг. Поворачиваем систему координат  относительно оси  на угол - получаем координаты  (X, Y, Z).  Матрица поворота:

 

 

 

Преобразование координат выражаем произведением матриц В и А:

 

 

В А=  = .

 

 

Запишем преобразование для координат проекции в виде формул:

           X=x cos  – y sin ,

           Y=x sin cos  + y*cos cos  – z*sin ,

           Z=x sin sin + y cos sin  + z*cos .

ПЕРСПЕКТИВНАЯ ПРОЕКЦИЯ

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

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

               

          

 

Учитывая также координату Z:

 

          

 

 

В матричной форме преобразования координат можно записать так:

 

          

 

 

 

 

Обратите внимание на то, что здесь коэффициенты матрицы зависят от координаты  (в знаменателе дробей). Это означает, что преобразование координат является нелинейным (а точнее, дробно-линейным), оно относится к классу проективных преобразований.

           Теперь рассмотрим общий случай – для произвольных углов наклона камеры (  и ) также как и для параллельной аксонометрической проекции.

 

           Пусть () – координаты для системы координат, повернутой относительно начальной системы () на углы  и . Тогда:

               

 

Запишем преобразования координат перспективной проекции в виде:

 

          

 

Последовательность преобразования координат можно описать так:

 

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

           Для такой перспективной проекции плоскость проецирования перпендикулярна лучу, исходящему из центра () = (0,0,0) и наклоненному под углом  и . Если камеру отдалять от центра координат, то центральная проекция видоизменяется. Когда камера в бесконечности, центральная проекция вырождается в параллельную проекцию.

           Укажем основные свойства перспективного преобразования. В центральной проекции:

-- не сохраняется отношение длин и площадей;

--прямые линии изображаются прямыми линиями;

--параллельные прямые изображаются сходящимися в одной точке.

 

 

10 Лекции по компьютерной графике

3.1. Координаты и преобразования

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

Далее большими буквами x, y, z будут обозначаться обычные декартовые координаты, а маленькие буквы X, Y, Z будут использоваться для обозначения т.н. однородных координат.

3.2. Двумерные геометрические преобразования

Параллельный перенос

Параллельный перенос в плоском случае имеет вид:

 
 


x` = x + Dx

y` = y + Dy

[x’, y’] = [x, y] + [Dx, Dy]

           
     


P’ P T

или в векторной форме:

P` = P + T,

где P` = [x` y`] - вектор-строка преобразованных координат,

где x, y - исходные координаты точки,
Tx, Ty - величина сдвига по осям,
x`, y` - преобразованные координаты.
P = [x y] -- вектор-строка исходных координат,
P` = [x` y`] -- вектор-строка преобразованных координат,
T = [Tx Ty] -- вектор-строка сдвига.

Масштабирование

Преобразование масштабирования относительно начала координат имеет вид:

x` = x ·Sx

y` = y ·Sy или

 
 


Sx 0

[x`, y`] = [x, y] ·

0 Sy

P` P

S

или в матричной форме:

P` = P ·S,

где Sx, Sy -- коэффициенты масштабирования по осям, а

S - матрица масштабирования

Поворот

Преобразование поворота относительно начала координат имеет вид:

 
 


x`= x·cos(φ) – y·sin(φ)

y`= x·sin(φ) + y·cos(φ)

или

cos(φ) sin(φ)

[x`, y`] = [x, y] ·

–sin(φ) cos(φ)

P` P

R

Где R – матрица поворота

φ – положительный угол поворота

или в матричной форме:

P` = P ·R,  

Столбцы и строки матрицы поворота представляют собой взаимно ортогональные единичные векторы. В самом деле квадраты длин векторов-строк равны единице:

cosf·cosf+sinf·sinf = 1

 

(-sinf) ·(-sinf)+cosf·cosf = 1,

а скалярное произведение векторов-строк есть

cosf·(-sinf) + sinf·cosf = 0.

Так как скалярное произведение векторов A · B = | A | ·| B | ·cosy, где | A | - длина вектора A, | B | - длина вектора B, а y - наименьший положительный угол между ними, то из равенства скалярного произведения двух векторов-строк длины 1 следует, что угол между ними равен 90°.

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

       
 

 
     


 

 

cosf

-sinf

 

 

·

 

 

cosf sinf

 

 

=

 

 

1 0  

 

 

,

 

  -sinf cosf

 

т.е. это единичный вектор вдоль оси X.

Аналогично, произведение второго столбца на матрицу даст вектор [ 0 1 ]. Это позволяет сформировать матрицу, если известны результаты преобразования.

3.3. Преобразование в однородную систему координат

Как видно двумерные преобразования имеют различный вид. Сдвиг реализуется сложением, а масштабирование и поворот - умножением. Это различие затрудняет формирование суммарного преобразования и устраняется использованием двумерных однородных координат точки, имеющих вид:

[ X Y W ].

Здесь W - произвольный множитель не равный 0.

Двумерные декартовые координаты точки получаются из однородных делением на множитель W:

x = X / W, y = Y / W, W 0  

Однородные координаты можно представить как промасштабированные с коэффициентом W значения двумерных координат, расположенные в плоскости с Z = W.

В силу произвольности значения W в однородных координатах не существует единственного представления точки, заданной в декартовых координатах.

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

Будем брать W=1.

Параллельный перенос:

 
 


1 0 0

[X`, Y`, 1]=[X, Y, 1]· 0 1 0

Dx Dy 1

Перемножив, получим: [X + Dx, Y + Dy, 1].

Масштабирование:

P` = P·S; где

Поворот:

Рё = Р·R; где


Поделиться с друзьями:

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

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

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.164 с.