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

1

11.05.2011, 21:58

rgba Werte als Vertex Positionen

Hallo,
Ich arbeite an einem Projekt bei dem große Datenmengen in Echtzeit visualisiert werde sollen. Klar dass ich da nicht um Shaderprogrammierung rumkomme. Versuche mich deshalb in HLSL zu arbeiten.
Im Moment ist der Stand so: ich habe eine Textur generiert bei der die Rot Channel jeden Pixels meine Daten als Wert zwischen 0 und 1 enthalten. Ein Shader verwendet die Farbwerte jedes Pixels dazu, Partikel an der entsprechenden X-Positionen zu generieren. Habe dazu die Tex2Dlod Funktion verwendet.
Das war allerdings erst der erste Schritt um überhaupt den Shader kennen zu lernen. Was ich eingetlich mit den Daten machen möchte ist folgendes: Die rot Werte in der Datentextur stehen für Positionen. Dabei beschreibt jeder ungerade Wert eine Start-Position und jeder gerade eine End-Position. Am Ende sollen also Partikel/Objekte unterschiedlicher Länge entlang der x Achse aufgetragen werden.
Was würdet ihr als nächstes machen um da hin zu kommen?
Ist es Sinnvoll ein einheitliches Mesh zu nehmen und es jedes mal im Shader mit den Positions Daten zu transformieren?
Für die einzelnen Partikel die jetzt schon an den richtigen Positionen sind wird ein großes einheitliches Mesh (x mal ein Quad aus 4 Vertices) verwendet um die vielen Partikel zu bilden.
Oder besser erst das Mesh entsprechend der Start End Positionen bauen und im Shader nur noch die Positionen zuweisen?
Und überhaupt könnt ich Hilfe beim Code gebrauchen. :whistling:

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

12.05.2011, 17:31

Mir ist nach deiner Beschreibung nicht ganz klar was genau du erreichen willst. Meinst du mit "jedem ungeraden Wert" jeden zweiten Texel oder tatsächlich einen ungeraden Rotwert!? Was genau soll es bedeuten dass "Partikel unterschiedlicher Länge entlang der x-Achse aufgetragen" werden!? Was für eine Version von Direct3D verwendest du eigentlich!?

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

12.05.2011, 19:33

Mir wird auch nicht ganz klar was du vor hast. Du willst Positionsdaten in einer Textur speichern? Erläuter doch mal im groben was dein Vorhaben genau ist;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

4

12.05.2011, 22:16

Hey danke für eure antworten. ich möchte genom daten visualisieren. da hat man zum teil milliarden datenpunkte je nach auflösung des ganzen. das ganze soll möglichst in echtzeit visualisiert sein (frei beweglich im 3d raum und interaktiv). habe dazu sämtliche start und end possitionen der gene aus einer datenbank extrahiert und dieselbigen in die rot channel der pixel einer textur gepackt. dabei ist pixel 1 start position gen 1, pixel 2 end pos gen 2, pixel 3 start pos gen 3 usw... hier habe ich mit vvvv gearbeitet. vvvv ist eine modulare programiersprache die HLSL shader Bausteine besitzt. Hier speise ich die Datentextur ein und wie gesagt bin ich im moment soweit dass tatsächlich partikel an den entsprechenden positionen gerendert werden. jetzt frage ich mich nur wie ich den shader am besten dazu bringe mir mithilfe der positions daten die gene richtig auf dem gesamtgenom (als x-achse anzusehen) darzustellen. man hat mir gesagt ;) hier im forum könnte mir am ehesten mit dem shader spezifischen proplem geholfen werden :)
werde die tage noch den code soweit posten..

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

12.05.2011, 22:27

Ok, das klingt irgendwie so als wolltest du eigentlich einfach nur Instancing!?
Außerdem bleibt weiterhin die Frage offen welche Direct3D Version du denn verwendest.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (12.05.2011, 22:47)


6

13.05.2011, 00:22

Im Prinzip ja, jetzt wo du es sagst.
vielleicht finde ich unter dem begriff auch noch mehr referenz...

die shader laufen unter directx9 und shader model 3.
ist es das was du mit version meintest?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

13.05.2011, 01:44

Ja, ab Shader Model 3 gibts Hardware Instancing. D.h. du kannst mit zwei Streams arbeiten. In einen VertexBuffer (+ IndexBuffer) legst du dein Model ab (was auch immer das dann genau ist). In einen zweiten VertexBuffer packst du die Instanzdaten, also Position, Farbe, etc. jeder zu zeichnenden Instanz. Über eine entsprechende VertexDeclaration sowie einen entsprechenden VertexShader setzt du die Daten dann für jede Instanz zusammen. Über SetStreamSourceFreq() sagst du D3D dann praktisch dass für jeden Vertex aus dem zweiten Stream alles einmal gezeichnet werden soll. Genaueres findest du hier.

Werbeanzeige