我正在阅读有关 DirectX 的所有 MS 教程,我注意到它们总是将世界、视图和投影矩阵传递给该技术,然后在顶点着色器中将它们相乘。
是否有理由这样做,而不是在绘制之前将矩阵相乘,然后将单个 WVP 矩阵传递给着色器?这样矩阵将每帧相乘一次,而不是每个顶点一次,对吧?
提前致谢。
编辑:使用示例代码更新
微软教程:
matrix World;
matrix View;
matrix Projection;
struct VS_INPUT
{
float4 Pos : POSITION;
float4 Color : COLOR;
};
struct VS_OUTPUT
{
float4 Pos : SV_POSITION;
float4 Color : COLOR;
};
PS_INPUT VS( VS_INPUT input )
{
VS_OUTPUT output;
output.Pos = mul( input.Pos, World );
output.Pos = mul( output.Pos, View );
output.Pos = mul( output.Pos, Projection );
output.Color = input.Color;
return output;
}
为什么不这样:
matrix WVP;
struct VS_INPUT
{
float4 Pos : POSITION;
float4 Color : COLOR;
};
struct VS_OUTPUT
{
float4 Pos : SV_POSITION;
float4 Color : COLOR;
};
PS_INPUT VS( VS_INPUT input )
{
VS_OUTPUT output;
output.Pos = mul( input.Pos, WVP );
output.Color = input.Color;
return output;
}