相机异常行为,DX11

时间:2012-01-31 04:41:57

标签: directx directx-11

我一直在使用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显示世界,视图和投影矩阵似乎存在并正在应用,尽管很明显有些事情是不对的。

谢谢。

2 个答案:

答案 0 :(得分:1)

你可以使用row_major修饰符而不是在将它们传递到着色器之前转置矩阵

答案 1 :(得分:0)

数学失败,我已经将视图矩阵而不是其转置发送到着色器。