Существует еще одно пространство координат, называемое локальное пространство координат поверхности. Это система координат, которая меняется с каждой точкой поверхности объекта и предполагает, что в текущей точке поверхности будут (0, 0, 0), а пока не измененная нормаль поверхности в каждой точке имеет координаты (0, 0,1). Это очень удобная система координат для метода бугристой поверхности. Но перед вычислением освещения нужно убедиться в том, что и направление освещения, и направление обзора, и вычисленная изменяющая нормаль также определены в этой системе координат. Если изменяющая нормаль определена в локальном пространстве координат поверхности, это означает, что нужно преобразовать векторы освещения и обзора в это пространство координат. Как это сделать, рассказывается в дальнейшем.

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

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

Для этого приложение должно посылать еще один атрибут вершины, значение тангенса. Значения тангенсов должны быть согласованы по всей поверхности объекта. По определению, вектор тангенса будет лежать в плоскости поверхности ^перпендикулярно нормали поверхности. Если тангенсы согласованы, они помогут согласовывать и локальные пространства координат. Вычислив векторное произведение вектора тангенса и нормали поверхности, получим третий вектор, перпендикулярный первым двум. Третий вектор называется бинормаль и его можно вычислить в вершинном шейдере. Вместе эти три вектора являются ортонормиро-ванными, и на их основе можно выполнять преобразования из пространства координат объекта в локальное пространство координат поверхности. Так как данная ■конкретная система координат определена с тангенциальным вектором как одним из базовых, эту систему координат иногда называют касательное пространство.

Преобразование из пространства координат объекта в локальное пространство координат поверхности показано на рис. 11.3. Вектор пространства координат объекта (0Л Оу, Ог) преобразуется в локальное пространство умножением на матрицу, в которой содержится тангенциальный вектор (Тп Ту, Г2) в первой строке, вектор бинормали (Дг, Вг) во второй строке и нормаль поверхности (JV*, Ny, Nz) в третьей строке. Можно использовать этот способ для преобразования и вектора освещения, и вектора обзора. Преобразованные векторы будут интерполированы в пределах примитива, а интерполированные векторы затем используются во фрагментном шейдере для вычисления отражения с помощью уже измененной нормали.


⇐ вернуться назад | | далее ⇒