0

我一直在使用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;
}

几天来我一直在为这个问题挠头,但我不知道是什么原因造成的,甚至不知道哪些代码是相关的。PIX 显示世界、视图和投影矩阵似乎存在并且正在被应用,尽管很明显有些事情是不正确的。

谢谢你。

4

2 回答 2

1

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

于 2012-01-31T15:00:51.343 回答
0

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

于 2012-01-31T11:43:19.220 回答