2017-10-05 83 views
0

我看到HSLS具有浮点数和浮点数(1-4)以及很多字段(r,rr,rrrr,arar,...)(I在HLSL Tool的帮助下看到这些字段感谢Tim Jones:D--我无法想象(现在)如何在不使用此工具的情况下对HSLS进行编程)。HSLS float1,...,float4及其字段

我试图找到关于这个数据类型及其字段的引用,但是我找不到任何关于它的信息(为什么数字1-4和它的字段的含义在C++中float只是float数,这里是什么是浮动)

下面是到目前为止我的进步:

根据this article

浮 - 32位浮点值。

例如,这是一个4分量有符号规范化的浮点型变量声明。

snorm float4 fourComponentIEEEFloat;

它没有回答我的问题:这是什么代码的含义是

RWTexture2D<float4> testTexture   : register(u0); 

[numthreads(@value(threads_per_group_x), @value(threads_per_group_y), @value(threads_per_group_z))] 
void main 
(
    uint3 gl_LocalInvocationID : SV_GroupThreadID, 
    uint3 gl_GlobalInvocationID : SV_DispatchThreadId 
) 
{ 
    testTexture[gl_GlobalInvocationID.xy].xyzw = float4(float2(gl_LocalInvocationID.xy)/16.0f, 0.0f, 1.0f); 
} 

我可能会稍微明白FLOAT2(gl_LocalInvocationID.xy)为2浮动

testTexture[gl_GlobalInvocationID.xy].xyzw = float4(float2(gl_LocalInvocationID.xy)/16.0f, 0.0f, 1.0f); 

等于

testTexture[gl_GlobalInvocationID.xy].xyzw = float4(gl_LocalInvocationID.x/16.0f, gl_LocalInvocationID.y/16.0f, 0.0f, 1.0f); 

但我不知道它是否正确,旁边,领域r,rr,rrrr,arar,...我之前提到过。

感谢您的阅读。

回答

1

这些字段是没有真正的字段,但源注册Swizzling(doc)。

A float4是一个四分量浮点矢量,其中的分量是x,y,z和w。由于float4通常也用作颜色,因此这些组件也可以通过r,g,b和a来解决(因此.xyzw等同于.rgba)。

来源混写,您可以交换,减少或重复组件内联,因此,如果您只需要在xy组件您float3 vec你可以只写vec.xy,而不是像float2(vec.x, vec.y)东西。如果您想为某些计算交换float4 color的颜色通道,则可以轻松地编写color.bgra来交换红色和蓝色分量。最后,您还可以复制频道,例如vec.xxxx以获得float4vec.x全部四个组件。也允许组合这些方法,例如vec.yzxx

相关问题