про перемножение да. тоесть при перемножении я получаю новую матрицу, которая означает позицию чилда. Но как же вытащить XYZ
X3025 Global variables are implicitly constant - это сообщение выдает компилятор шейдеров при компиляции шейдера. Что за хрень знает ктонить?
extern matrix WorldViewMatrix;
extern matrix WorldViewProjMatrix;
extern vector Color;
extern vector LightDirection;
static vector Black = {0.0f, 0.0f, 0.0f, 0.0f};
//
// Структуры
//
struct VS_INPUT
{
vector position : POSITION;
vector normal : NORMAL;
};
struct VS_OUTPUT
{
vector position : POSITION;
float2 uvCoords : TEXCOORD;
vector diffuse : COLOR;
};
//
// Точка входа
//
VS_OUTPUT Main(VS_INPUT input)
{
// Обнуляем члены выходной структуры
VS_OUTPUT output = (VS_OUTPUT)0;
// Преобразуем местположение вершины в однородное
// пространство отсечения
output.position = mul(input.position, WorldViewProjMatrix);
//
// Преобразуем вектор света и нормаль в пространство вида.
// Мы устанавливаем значение компоненты w равным нулю потому что
// мы преобразуем векторы. Предполагается, что в мировой матрице
// нет никакого масштабирования.
//
LightDirection.w = 0.0f;
input.normal.w = 0.0f;
LightDirection = mul(LightDirection, WorldViewMatrix);
input.normal = mul(input.normal, WorldViewMatrix);
//
// Вычисление одномерной координаты текстуры
// для мультипликационной визуализации
//
float u = dot(LightDirection, input.normal);
//
// Если u меньше нуля, считаем, что u равно нулю, поскольку
// отрицательные значения соответствуют углам между вектором света
// и нормалью большим 90 градусов. А если угол больше 90 градусов,
// значит поверхность не освещается
//
if(u < 0.0f)
u = 0.0f;
//
// Устанавливаем вторую координату текстуры на середину
//
float v = 0.5f;
output.uvCoords.x = u;
output.uvCoords.y = v;
// Сохраняем цвет
output.diffuse = Color;
return output;
}