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

Gotbread

Alter Hase

  • »Gotbread« ist der Autor dieses Themas

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

1

19.12.2008, 21:41

Partikelengine auf der GPU

Hallo

Wie der Titel schon sagt, möchte ich eine Partikelengine auf der GPU laufen
lassen.

hab schon einige beispiele gefunden nur dummerweise ohne beispielcode
und genauen erlöuterungen.

Vorne weg: ist das möglich nur mit DirectX9, also ohne Geometry Shader?
Habe ein Vid gesehen was angeblich nur mit dx9 auskam...

Als nächstes: kann man irgentwie eine textur als vertexbuffer interpretieren?
also wenn die textur z.b. [x, y, z, color] enthällt daraus einen vertex machen

Und noch eine frage zu SetTexture: wenn die zu setzende und die momentan
gesetzte textur beide im videospeicher sind, wieviel performance braucht
ein wechsel? eigentlich müsste man ja nur z.b. ein paar zeiger austauschen, also die textur nicht komplett transferieren?

hoffe auf viele antworten
MfG Gotbread
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

Das Gurke

Community-Fossil

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

2

19.12.2008, 21:47

Link zu einer Beispielimplementierung in OpenGL

Ist sicherlich keine "wirkliche" Antwort auf deine Frage, schoss mir beim Lesen des Threads aber durch den Kopf. Im schlimmsten Fall hilft es dir halt nicht ^^

Gotbread

Alter Hase

  • »Gotbread« ist der Autor dieses Themas

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

3

19.12.2008, 22:20

mein dx9 mag leider kein geometry shader :(

kann man nicht
-irgentwie ein vertexbuffer und eine textur wie eine union an der selben
stelle im videospeicher erstellen?
-im vertexshader speicherzugriffe machen?
-die daten in der graifkarte kopieren?
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

20.12.2008, 02:05

Re: Partikelengine auf der GPU

Zitat von »"Gotbread"«


Vorne weg: ist das möglich nur mit DirectX9, also ohne Geometry Shader?
Habe ein Vid gesehen was angeblich nur mit dx9 auskam...


Ja natürlich ist das möglich. Die Vertexposition ist die fester Bestandteil der Ausgabe vom Vertexprogramm.

Zitat von »"Gotbread"«


Als nächstes: kann man irgentwie eine textur als vertexbuffer interpretieren?
also wenn die textur z.b. [x, y, z, color] enthällt daraus einen vertex machen


Stichwort: Vertextexture.

Zitat von »"Gotbread"«


Und noch eine frage zu SetTexture: wenn die zu setzende und die momentan
gesetzte textur beide im videospeicher sind, wieviel performance braucht
ein wechsel? eigentlich müsste man ja nur z.b. ein paar zeiger austauschen, also die textur nicht komplett transferieren?


Wenn die Texturen schon runtergeladen wurden ist das mit sicherheit wesentlich performanter als der komplette Transfer zum Video RAM. Allerdings sind Statechanges trotzdem relativ teuer.
@D13_Dreinig

Gotbread

Alter Hase

  • »Gotbread« ist der Autor dieses Themas

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

5

20.12.2008, 13:20

Zitat von »"David_pb"«


Stichwort: Vertextexture.


das hat mich doch endlich weitergebracht :D

ich weiß nicht ob das der richtige weg ist, aber ich würde es so versuchen:

-vertextextur erzeugen
-vertexbuffer als dummy-vertexshader-auslöser erzeugen,
jeder vertex enthällt eine position auf der textur
-den buffer rendern
-im vertexshader die position aus der textur herraussuchen und ersetzen

geht das so ungefähr?
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

20.12.2008, 15:03

So grundlegend geht das.
@D13_Dreinig

Gotbread

Alter Hase

  • »Gotbread« ist der Autor dieses Themas

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

7

20.12.2008, 18:28

habs mal versucht umzusetzen aber das hat nicht so geklappt

(in pseudocode)

-A32B32G32R32F - textur erzeugen 32*32 pixel
-in die ersten 3 pixel [x, y, z, color] eines dreiecks reinsschreiben
-vertexbuffer erstellen, ebenfalls [x, y, z, color] mit 3 vertices
-x als texturkoodinaten setzen (0/32, 1/32, 2/32)
-y z und w auf null
-vertexshader setzen und vertexbuffer rendern

klappt aber nicht der bildschirm ist weiß :evil:

vertexshader:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
float4x4 WorldMatrix;
float4x4 ViewMatrix;
float4x4 ProjMatrix;
float4x4 WorldViewMatrix;

sampler2D tex;
float4 vs_main(float4 pos : POSITION) : POSITION
{
    pos.w = 0.f;
    pos = tex2Dlod(tex, pos);
    pos = mul(pos, WorldMatrix);
    pos = mul(pos, ViewMatrix);
    pos = mul(pos, ProjMatrix);
    return pos;
}
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

Werbeanzeige