Показать сообщение отдельно
Старый 27.11.2011, 04:39   #13
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Directx 9 текстурирование объекта несколькими текстурами

про перемножение да. тоесть при перемножении я получаю новую матрицу, которая означает позицию чилда. Но как же вытащить 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;
}
(Offline)
 
Ответить с цитированием