Hy大家。我开始重新编写我的引擎,将其转换为directx 11.我现在试图使基础工作,但这个错误真的阻止我。 我创建了一个基本着色器,一个普通和视图的简单点积。我知道它没有错误编译,但它dosnt的作品。 它只是使输入网格变形。我开始在vs2012中进行调试,发现像素着色器正在输入所有的NaN。我附加了两个屏幕和着色器代码,如果有人可以提供任何想法,那么它将会非常有用。DirectX 11着色器错误。像素着色器只接收NaN
的Vertex Shader
//----------------------------------------------------------------------------
// Constant Buffer Variables
//----------------------------------------------------------------------------
cbuffer ConstantBuffer : register(b0)
{
matrix World;
matrix View;
matrix Projection;
//float3 CameraPos;
float Power;
}
//---------------------------------------------------------------------------
struct VS_INPUT
{
float4 Pos : POSITION;
float3 Normal : NORMAL;
};
struct VS_OUTPUT
{
float4 Pos : SV_POSITION;
float3 Normal : TEXCOORD0;
};
//--------------------------------------------------------------------------
// Vertex Shader
//-------------------------------------------------------------------------------
VS_OUTPUT VS(VS_INPUT input)
{
VS_OUTPUT output = (VS_OUTPUT)0;
output.Pos = mul(input.Pos, World);
output.Pos = mul(output.Pos, View);
output.Pos = mul(output.Pos, Projection);
output.Normal = mul(float4(input.Normal, 1), World).xyz;
//output.wNormal = input.Normal;
return output;
}
而这里的Pixel Shader
//------------------------------------------------------------------------------
// Constant Buffer Variables
//------------------------------------------------------------------------------
cbuffer ConstantBuffer : register(b0)
{
matrix World;
matrix View;
matrix Projection;
float Power;
}
//------------------------------------------------------------------------------
struct VS_OUTPUT
{
float4 Pos : SV_POSITION;
float3 wNormal : TEXCOORD0;
};
//-----------------------------------------------------------------------------
// Pixel Shader
//-----------------------------------------------------------------------------
float4 PS(VS_OUTPUT input) : SV_Target
{
//return pow(dot(input.wNormal,float3(0,0,0)),Power); // fixed camera, just for now
return float4(0.1,0.6,0.1,1);
}
,最后,我创建了一个XML文件结构为我着色器,我然后解析,不知道它是否有关,但
<?xml version="1.0" encoding="utf-8"?>
<vs path = "D:\\Documentos\\Visual Studio 2012\\Projects\\Fusion Engine\\Tests\\ConstantLighting_VS.hlsl" name ="VS" target = "vs_4_0">
</vs>
<ps path = "D:\\Documentos\\Visual Studio 2012\\Projects\\Fusion Engine\\Tests\\ConstantLighting_PS.hlsl" name ="PS" target = "ps_4_0">
<val1 type = "scalar" value = "0.456645" name = "Power"/>
</ps>
他们似乎是正确的,顶点着色器将位置相应地相乘,但它将正常情况拧紧。只有尽管如此,像素着色器得到NaN的 我会尽力的,但是我在这里复制从教程,代码:HTTP://code.msdn.microsoft.com/windowsdesktop/Direct3D-Tutorial-Win32-829979ef和辅导工作。 –
我试过了,仍然是一样的错误。 –