Ahh, я думаю, это имеет смысл. Поскольку w componentenet не инициализирован, функция mul() не будет выполнена.
Чтобы избежать этого можно инициализировать вектор следующим образом:
float4 PosImageSpace = (float4)0;
Я по-прежнему рекомендую вам попробовать компиляции шейдеров с помощью FXC в режиме отладки, как вы можете получить гораздо лучшие описания ошибок таким образом. Вы даже можете настроить пользовательский шаг сборки, который позволяет щелкнуть файл .fx правой кнопкой мыши и скомпилировать его, не компилируя все решение/проект.
Чтобы скомпилировать шейдер с помощью FXC в конфигурации отладки:
fxc /Od /Zi /T fx_3_0 /Fo Directional_Lighting_Shader_Defaul.fxo Directional_Lighting_Shader_Defaul.fx
Вы можете найти FXC в C: \ Program Files \ Microsoft DirectX SDK \ Utilities \ Bin
Чтобы настроить пользовательские сборки шаг в Visual Studio check this sample from the DirectX SDK, а также check this site
Также проверьте this article on msdn об использовании fxc.
Какая ошибка вы получаете? Он прекрасно компилируется здесь. – Tchami
C: \ Dokumente унд Einstellungen \ Администратор \ Desktop \ Program \ 3д \ Litte3DEngine2 \ Bin \ Release \ Shader \ Directional_Lighting_Shader_Default.fx (91): ID3DXEffectCompiler :: CompileEffect: Был ошибка компиляции выражение: ID3DXEffectCompiler: Компиляция не удалось – gufftan
линии 91 : PixelShader = compile ps_3_0 PS(); – gufftan