2017-10-05 4 views
0

Ich sehe, dass HSLS hat float und eine Zahl nach float (1-4) und eine Menge von Feldern (r, rr, rrrr, arar, ...) (I Sehen Sie diese Felder mit Hilfe von HLSL Tool Dank Tim Jones: D - Ich kann mir nicht vorstellen (vorerst) wie können wir HSLS ohne dieses Tool programmieren).HSLS float1, ..., float4 und seine Felder

Ich versuche, Referenzen über diesen Datentyp und sein Feld zu finden, aber ich kann nichts darüber finden (warum die Zahl 1-4 und die Bedeutungen seiner Felder. In C++ float ist nur float-Nummer, hier, was Schwimmer)

Unten ist mein bisher erzielten Fortschritte:

nach this article

Schwimmer - 32-Bit-Fließkommawert.

Zum Beispiel ist hier eine 4-Komponenten vorzeichenbehaftete normalisierte Float-Variable-Deklaration.

snorm float4 fourComponentIEEEFloat;

Es ist nicht meine Frage beantworten: Was bedeutet dieser Code

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); 
} 

meine ich etwas, dass float2 (gl_LocalInvocationID.xy) verstehen kann, ist 2 Schwimmer

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

ist gleich

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

Aber ich weiß nicht, ob es richtig ist, neben, wie über Felder r, rr, rrrr, arar, ... Ich erwähne früher.

Danke fürs Lesen.

Antwort

1

Diese Felder sind keine echten Felder, aber Quellenregister Swizzling (doc).

Ein float4 ist ein Vier-Komponenten-Float-Vektor, wobei die Komponenten x, y, z und w sind. Da float4 auch oft als Farbe verwendet wird, können diese Komponenten auch durch r, g, b und a adressiert werden (So ist .xyzw äquivalent zu .rgba).

Quelle Swizzling ermöglicht es Ihnen, tauschen, zu reduzieren oder Komponenten Inline wiederholen, wenn Sie also nur die xy-Komponente Ihres float3 vec benötigen, können Sie nur vec.xy wie float2(vec.x, vec.y) anstatt etwas schreiben. Wenn Sie die Farbkanäle Ihres float4 color für einige Berechnungen austauschen möchten, können Sie einfach color.bgra schreiben, um beispielsweise die rote und die blaue Komponente zu vertauschen. Und schließlich können Sie auch Kanäle duplizieren, z. B. vec.xxxx, um eine float4 mit vec.x in allen vier Komponenten zu erhalten. Kombinieren dieser Methoden ist auch erlaubt, wie vec.yzxx.