Frage zu arrays in HLSL
-
Hallo zusammen
Ich bin gerade dabei HLSL zu erlernen und habe nun folgendes Problem:
Ich bin gerade dabei, einen Wassershader zu schreiben und möchte zur Laufzeit neue Wellen einfügen können. Nun ist es so, dass ich keine Möglichkeit von dynamischen Arrays in HLSL gefunden? Ich wäre auch schon mit statischen Arrays zufrieden, deren Grösse aber erst zur Laufzeit bekannt sein kann. Ich hatte dies folgendermassen versucht:int NumberOfWaves; float2 Direction[NumberOfWaves]; float Amplitude; float Frequency; float Velocity; float Time;
Hat aber leider nicht geklappt. :p
Weiss vielleicht jemand von euch, wie das geht?Lg Samuel
-
Du nimmst eine sinnvolle konstante maximale Wellenanzahl an und setzt die Amplituden der ueberfluessigen auf 0.
-
Ja so kann man es natürlich auch machen. Ich nehme an, dass dies bedeutet, dass HLSL keine dynamischen Arrays kennt? :p
Noch eine weitere Frage:
Ich habe teilweise recht lange Formeln und da ist es sehr mühsam und unübersichtlich ständig alle Variablennamen voll auszuschreiben. Trotzdem sollten diese nach aussen hin natürlich einen sinnvollen und selbsterklärenden Namen haben.Soviel ich weis, kann man dieses Problem auf folgende Weise lösen:
float Dir:Direction;
Auf diese Weise kann ich innerhalb von meinem Shader Dir verwenden und ausserhalb, Direction.Aber wie mache ich dies nun mit Arrays? Ich habs folgendermassen versucht:
float Dir[4]:Direction;
Zwar kompiliert dieser Code anstandslos, allerdings wird dafür zur Laufzeit eine Exception von der Effektklasse geworfen, weil die Typen nicht vom korrekten Typ zu sein scheinen...Wie macht man es richtig?
-
Ich nehme an, dass dies bedeutet, dass HLSL keine dynamischen Arrays kennt?
"Arrays" heissen im Shader "Texturen".
-
arrays sind nur statisch moeglich. man kann darauf im vertexshader dynamisch indizieren, in pixelshader wohl nur in den allerneusten versionen.
das beste ist fuer jede wellenanzahl eine permutation zu generieren.