2012-01-31 78 views
0

我一直在用directx11编写一个程序,并且我已经编写了一个基本的摄像头类来处理视图矩阵。当我测试程序时,结果是场景不移动,但是当我移动相机时,它具有切断在任意位置可见的效果。我附上了一些照片来展示我的意思。 摄像头不寻常的行为,DX11

我已经离开我的像素着色器,现在只输出红色像素。

我的顶点着色器是基于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; 
} 

我一直在抓我的头一对夫妇对这个问题的天,但我不知道是什么原因造成这一点,或甚至哪些代码是相关的。 PIX表明,世界,视图和投影矩阵似乎存在并且正在被应用,虽然很明显某些事情是不正确的。

谢谢。

+0

移动是其渲染的场景的一部分似乎是正确的相机时,我注意到,那就是,有可能确定观看平截头体似乎在移动。这就是为什么在我的第二张照片中部分场景被切断。但是,场景渲染不正确。这就好像观看平截头体与相机的位置是分开的,尽管我认为两者都锁定在原点上。 – fabspro 2012-01-31 11:30:18

+0

数学失败,我已经将视图矩阵而不是它的转置发送给着色器。 – fabspro 2012-01-31 11:42:46

回答

1

您可以通过他们的内部着色器之前使用,而不是转置矩阵row_major修改

+0

谢谢,我已经看过了,这是一个更好的方法 – fabspro 2012-01-31 16:07:12

+0

并证实,它的作品非常漂亮。谢谢! – fabspro 2012-01-31 16:09:55

0

数学失败,我发送了视图矩阵,而不是它的转置到着色器。