我一直在使用directx11编写程序,我编写了一个操作视图矩阵的基本相机类。当我测试程序时,结果是场景不移动,但是当我移动相机时,它具有切断在任意位置可见的效果。我附上一些照片来表明我的意思。
我的像素着色器暂时只输出红色像素。
我的顶点着色器基于SDK示例:
cbuffer cbChangeOnResize : register(b1)
{
matrix Projection;
};
cbuffer cbChangesEveryFrame : register(b2)
{
matrix View;
matrix World;
};
struct VS_INPUT
{
float4 Pos : POSITION;
float2 Tex : TEXCOORD0;
};
struct PS_INPUT
{
float4 Pos : SV_POSITION;
float2 Tex : TEXCOORD0;
};
PS_INPUT TEX_VS(VS_INPUT input)
{
PS_INPUT output = (PS_INPUT)0;
output.Pos = mul(input.Pos, World);
output.Pos = mul(output.Pos, View);
output.Pos = mul(output.Pos, Projection);
output.Tex = input.Tex;
return output;
}
cbuffer cbChangesEveryFrame : register(b2)
{
matrix View;
matrix World;
};
struct VS_INPUT
{
float4 Pos : POSITION;
float2 Tex : TEXCOORD0;
};
struct PS_INPUT
{
float4 Pos : SV_POSITION;
float2 Tex : TEXCOORD0;
};
PS_INPUT TEX_VS(VS_INPUT input)
{
PS_INPUT output = (PS_INPUT)0;
output.Pos = mul(input.Pos, World);
output.Pos = mul(output.Pos, View);
output.Pos = mul(output.Pos, Projection);
output.Tex = input.Tex;
return output;
}
我一直在讨论这个问题几天,但我不知道是什么导致了这个问题,甚至是哪些代码都是相关的。 PIX显示世界,视图和投影矩阵似乎存在并正在应用,尽管很明显有些事情是不对的。
谢谢。
答案 0 :(得分:1)
你可以使用row_major修饰符而不是在将它们传递到着色器之前转置矩阵
答案 1 :(得分:0)
数学失败,我已经将视图矩阵而不是其转置发送到着色器。