Читайте также: |
|
Визуализация текстуры на грани F осуществляется пиксель за пикселем по всей грани. Для каждого пикселя нужно определить соответствующие текстурные координаты (s, t), получить значение текстуры и придать пикселю нужный цвет, заданный этой текстурой. Нахождение координат (s, t) следует проводить очень аккуратно.
На рис. 11.6 показана камера, делающая снимок грани F с наклеенной на нее текстурой, а также сам процесс визуализации. Строка развертки y заполняется от точки xleft до точки xright. Для каждого значения x вдоль строки развертки необходимо правильно вычислить положение на грани (на рисунке оно обозначено P (x, y)) и уже из него получить нужные текстурные координаты (s*, t*).
Если определено отображение «текстура-объект», то нам известны текстурные координаты для каждой вершины области F, как показано на рис. 11.7. В таком случае естественно вычислить координаты (sleft, tleft) и (sright, tright) для каждой строки развертки быстрым инкрементным методом (методом приращений), а затем, двигаясь вдоль строки развертки, интерполировать между этими значениями. Однако следует быть внимательными: обычные приращения от sleft до sright при прохождении строки развертки у от xleft до xright использовать нельзя, поскольку равные шаги по спроецированной грани не соответствуют равным шагам по трехмерной грани.
Рис. 11.8 иллюстрирует эту задачу. На рис. 11.8, а показана грань F, рассматриваемая из такой точки, что ее левое ребро находится ближе к наблюдателю, чем правое. На рис. 11.8, б показана проекция этой грани F’ на экран. Отметим для строки развертки y = 120 равноотстоящие точки на проекции F’, подразумевая последовательные пиксели на грани. Соответствующее расположение этих отметок на текущей грани показано на 11.8, а. Видно, что на дальнем конце грани F эти отметки располагаются ближе друг к другу, что является следствием обычного перспективного укорачивания.
Если для вычисления текстурных координат применим простую линейную интерполяцию с равномерными шагами по s и по t, то «возьмем образцы» текстуры в неверных точках и исказим результирующее изображение.
|
Для решения этой задачи найдем соответствующие текстурные координаты (s, t) в каждой точке визуализируемой грани методом инкрементной визуализации изображений. На рис. 11.9 показана грань. Концевые точки левого ребра спроецированной грани равны a и b. Данная грань простирается от xleft до xright вдоль строки развертки y. Необходимо найти соответствующие текстурные координаты (sleft, tleft) и (sright, tright) для привязывания их соответственно к точкам от xleft до xright, которые затем можно интерполировать вдоль строки развертки.
Рассмотрим нахождение sleft (y) значения sleftt вдоль строки развертки y. Известно, что текстурная координата sA привязана к точке a, а sB – к точке b, поскольку эти величины передаются через графический конвейер вместе с вершинами A и B. Если строка развертки y является частью f расстояния между ybott и ytop, так что , то соответствующая текстурная координата равна:
.
Аналогично может быть получено выражение для tleft. Отметим, что sleft и tleft имеют один и тот же знаменатель: линейная интерполяция между значениями
и .
Числители являются линейными интерполяциями текстурных координат, деленных на и . Эту технику иногда называют «линейной рациональной» визуализацией или «гиперболической интерполяцией». Для эффективного вычисления координат (s, t) по мере роста f необходимо сохранять значения
; ; ; ; ; ,
так как они остаются постоянными от пикселя к пикселю. Числитель и знаменатель могут быть найдены в приращениях для каждого y. Однако для нахождения sleft и tleft нам все же придется выполнить явное деление каждого значения y.
Пара координат (sright, tright) вычисляется аналогично. Знаменатели этих двух компонентов содержат величины и , которые получаются из проецированных точек и .
После нахождения (sleft, tleft) и (sright, tright) данную строку развертки можно закрашивать. Для каждого x от xleft до xright находятся координаты s и t – снова посредством гиперболической интерполяции.
Дата добавления: 2015-07-10; просмотров: 140 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Пример. | | | Взаимодействие текстуры с объектом |