Morgen,
ich hab gerade ein Recht interessantes Whitepaper im NVIDIA-SDK gefunden, indem es darum geht wie man das Verhalten von Blut(oder ähnlichem)
auf einer Oberfläche auf der GPU berechnen kann. In diesem Paper steht follgendes :
Zitat:
The height map is defined in the unused b component of the gravity map.
(die Gravity map ist eine Textur) so wie ich den Rest des Papers verstanden habe, wird in jedem Frame die Heighmap(die die Höhe der Flüssigkeit angibt) neu berechnet und somit müsste auch die Textur von dem Shader jeden Frame aktuallisiert werden. Das beiligende BSP nutzt leider HLSL und DX9 daher werde ich daraus nicht wirklich schlau. Also meine Frage ist :
1.Kann man auch mit glSlang in Texturen schreiben (wenn ja : wie) ?
2.Gibt es überhaupt eine möglichkeit werte aus einem Shader im nächsten Frame weiterzuverwenden ?
mfG
Thomas
_________________ Bevor du definierst, was etwas ist, versichere dich seiner Existenz.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Ich hab mir das Whitepaper vom Bloodshader auch angesehen, aber da steht doch nirgendwo drinne dass in irgendeine Textur etwas reingeschrieben wird, denn das geht so ohne weiteres nicht (und wenn ich mich irre, dann zitiere doch mal die Stelle aus dem Paper wo drinnesteh dass sie in die Textur schreiben).
Um mittels DX9 HLSL oder glSlang (wobei glSlang mehr kann) eine Textur zu verändern muss man momentan nämlich einen indirekten Weg über Offscreen-Puffer (PBuffer) gehen und diese dann in jedem Frame als Textur hochladen. Es geht also schon, bloß nicht direkt.
Und wenn die Heightmap wirklich in jedem Frame neuberechnet werden sollte, dann würde man das wohl eher auf der CPU machen, da obiger Umweg nicht das Wahre ist.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Aha, dann wirds aber wohl so gemacht wie ich oben gesagt habe. Eine Heightmap ist ja im Normalfall nicht sonderlich groß, und muss dann ja auch nicht Frame für Frame berechnet werden. Sowas macht man dann wie gesagt meist auf der GPU, denn wenn man Texturen per Shader erstellen will (die man später auslesen will, also nicht zu verwechseln mit prozeduralen Shadern die man nur anzeigt) muss man dass über einen Offscreen-Puffer machen, was dann aber im Endeffekt meist aufwendiger ist als der Weg über die CPU.
Gut zu wissen.Ich glaub ich werd mal gucken, was ne mehr Zeit braucht GPU und PBuffer oder CPU.
Noch eine kleine Frage am Rande :
Was ist ein Offscreen-Buffer ? (Eine Textur, die jeden Frame auf die Grafikkarte geladen wird ???)
_________________ Bevor du definierst, was etwas ist, versichere dich seiner Existenz.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Offscreenpuffer werden unter OpenGL als Pixelpuffer offengelegt. Das ist quasi ein eigener (komplett eigenständiger) Renderkontext der im VRAM liegt und wie ein normaler RC genutzt werden kann. Der kann dann später auch als Textur benutzt werden.
Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.