我刚刚开始学习着色器/ hlsl等,所以请原谅这个可能很愚蠢的问题.
我正在关注微软的DirectX教程(教程(链接),代码(链接)).据我所知,他们将POSITION定义为浮点值的3元素数组:
// Define the input layout
D3D11_INPUT_ELEMENT_DESC layout[] =
{
{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
{ "COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
};
Run Code Online (Sandbox Code Playgroud)
理所当然,每个顶点位置都有3个浮点值:x,y和z.但现在在查看Vertex着色器时,位置突然出现float4类型,而不是float3:
//--------------------------------------------------------------------------------------
// Vertex Shader
//--------------------------------------------------------------------------------------
VS_OUTPUT VS( float4 Pos : POSITION, float4 Color : COLOR )
{
VS_OUTPUT output = (VS_OUTPUT)0;
output.Pos = mul( Pos, World );
output.Pos = mul( output.Pos, View );
output.Pos = mul( output.Pos, Projection );
output.Color = Color;
return output;
}
Run Code Online (Sandbox Code Playgroud)
我知道float4基本上是一个同质的坐标,需要进行转换.由于这是一个位置,我希望Pos(Pos.w,如果你愿意)的第四个值为1.
但这种转换究竟是如何运作的呢?我刚刚在C++代码中将POSITION定义为3个浮点数,现在我突然在Vertex着色器中使用了float4.
在我天真的时候,我原本期望发生以下两件事之一:
为什么这些替代/错误都不会发生?DirectX如何以及为什么将我的float3坐标自动转换为w = 1的float4?
谢谢!
| 归档时间: |
|
| 查看次数: |
3661 次 |
| 最近记录: |