我正在学习DirectX的所有MS教程,我注意到它们总是将World、View和Projection矩阵传递给技术,然后在顶点着色器中对它们进行乘法运算。
有必要这样做吗?而不是在绘制之前乘以矩阵,然后将单个WVP矩阵传递给着色器?这样,每帧只需要一次矩阵乘法,而不是每个顶点都需要一次,对吗?
提前感谢您的回答。
编辑: 附上示例代码
MS教程:
为什么不这样做:
有必要这样做吗?而不是在绘制之前乘以矩阵,然后将单个WVP矩阵传递给着色器?这样,每帧只需要一次矩阵乘法,而不是每个顶点都需要一次,对吗?
提前感谢您的回答。
编辑: 附上示例代码
MS教程:
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;
}