Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

idontknow

unregistriert

1

22.04.2013, 20:05

DX1 HeightMap in Textur rendern

Moin!

Ich will ne Heightmap in eine Textur rendern, d.h. die Textur sollte kein kompliziertes Format haben weile s ja reine Höhendaten sind. Hab mir also als Format R8_UINT ausgesucht und eine Textur als auch ein Rendertarget erstellt.

Allerdings habe ich jetzt ein kleines "Problem" beim Pixelshader. Bisher habe ich da als Output ausschließlich die Frabe (float4 Color : SV_Target0). SV_Target[n] muss allerdings ein 4-Komponenten Vektor vom Typ float sein, d.h. an dem Typ kann ich nicht rumspielen.

Das ganze verwirrt mich jetzt etwas. Ist in einem Pixelshader als Ausgabewert immer float4 bla : SV_Target[n] Pflicht (für die Farbausgabe!)? Und wenn dem so ist wie rendere ich dann in eine Textur die als Format eben weniger Komponenten hat (in meinem Fall wäre ja ein 1-komponenten Vektor wünschenswert)?

Gruß
idk

CentuCore

Frischling

Beiträge: 43

Wohnort: Wien

  • Private Nachricht senden

2

22.04.2013, 21:57

COLOR. bzw. SV_Target, ist wie ich verstanden habe immer ein float4.
Um nun nur in einen Kanal zu schreiben, bei dir R, kannst du folgendes verwenden:

HLSL-Quelltext

1
return float4(red, 0.0f, 0.0f, 0.0f); //r, g, b, a

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

23.04.2013, 10:26

Das ganze verwirrt mich jetzt etwas. Ist in einem Pixelshader als Ausgabewert immer float4 bla : SV_Target[n] Pflicht (für die Farbausgabe!)? Und wenn dem so ist wie rendere ich dann in eine Textur die als Format eben weniger Komponenten hat (in meinem Fall wäre ja ein 1-komponenten Vektor wünschenswert)?


Seit ps_4_0 bist du nicht mehr festgelegt auf float4.

Um nun nur in einen Kanal zu schreiben, bei dir R, kannst du folgendes verwenden:

HLSL-Quelltext

1
return float4(red, 0.0f, 0.0f, 0.0f); //r, g, b, a



Oder:

HLSL-Quelltext

1
2
3
4
5
6
7
8
// ...
float4 main() : SV_Target
{
  // ...
  float4 heightMapValue = HeightTexture.Sample(XYZSampler, uv);
  // ...
  return heightMapValue.xxxx;
}
@D13_Dreinig

Werbeanzeige