|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 30.05.2005, 14:14 Titel: Rendertarget blurren? |
|
|
Hey.
Ich hab eine Textur, mit D3DUSAGE_RENDERTARGET angelegt, um hinein rendern zu können. Diese hat ihre Daten (also das einzelne Mipmaplevel) in einer IDirect3DSurface9.
Wie kann ich jetzt die Textur, nachdem ich hinein gerendert habe, verwischen.
Ich könnte mithilfe von IDirect3DDevice9::GetRenderTargetData die Daten in eine andere Surface kopieren, diese locken, jeden Pixel einzeln verändern, unlocken und in die RenderTarget-Surface zurück kopieren. Aber das ist total lahm.
Die Textur selbst kann ich nicht locken, da mit D3DPOOL_DEFAULT angelegt, was notwendig ist um D3DUSAGE_RENDERTARGET zu tuen.
Weiß einer wie ich das Ding halbwegs flott verwischen kann?
Danke
-Homeless_Punkdrummer _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 30.05.2005, 14:32 Titel: |
|
|
wenn du so motion blur machen willst, muss du einfach ein bidl ganz normal in ein Rendertarget renern, und dann halbtransparent anzeigen. Wenn du das mit mehreren Bilder machst, und die imemr wieder mit ner transparnez von 90 oder so drüber kommen, bekommst du halt so nen motion blur effekt. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 30.05.2005, 14:43 Titel: |
|
|
Ahm, nee, ich will sie verwischen... das heißt, wie einen Unschärfealgorithmus drüberziehen... Aber dafür muss ich erstmal an die Pixel rankommen! _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 01.06.2005, 07:48 Titel: |
|
|
So würde es über die FixedFunctionPipeline gehen, üblicherweise macht man es aber per Shader (zumindest Heut zu Tage)
CPP: | RenderSceneToTarget: textur1
...
Textur BlurTextur(Textur textur, int Blurwert)
{
Textur tmp = textur;
Textur endTextur;
for(int i=0; i<BlurWert; i++)
{
endTextur = RendereTexturVersetztAufTargetMit20ProzentTransparenz(tmp, 1PixelNachRechtsVerschoben);
endTextur = RendereTexturVersetztAufTargetMit20ProzentTransparenz(endTextur, 1PixelNachRechts*2.0);
endTextur = RendereTexturVersetztAufTargetMit20ProzentTransparenz(endTextur, 1PixelNachRechts*3.0);
endTextur = RendereTexturVersetztAufTargetMit20ProzentTransparenz(endTextur, 1PixelNachRechts*-2.0);
endTextur = RendereTexturVersetztAufTargetMit20ProzentTransparenz(endTextur, 1PixelNachRechts*-3.0);
endTextur = RendereTexturVersetztAufTargetMit20ProzentTransparenz(endTextur, 1PixelNachLinksVerschoben);
endTextur = RendereTexturVersetztAufTargetMit20ProzentTransparenz(endTextur, 1PixelNachLinksVerschoben*2.0);
endTextur = RendereTexturVersetztAufTargetMit20ProzentTransparenz(endTextur, 1PixelNachLinksVerschoben*3.0);
endTextur = RendereTexturVersetztAufTargetMit20ProzentTransparenz(endTextur, 1PixelNachLinksVerschoben*-2.0);
endTextur = RendereTexturVersetztAufTargetMit20ProzentTransparenz(endTextur, 1PixelNachLinksVerschoben*-3.0);
tmp = endTextur;
}
return tmp;
} |
dürfte so richtig sein _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 01.06.2005, 18:22 Titel: |
|
|
Und das ist ein Shader? Kann ich doch auch hardcoden...
Aber genial, auf die Idee war ich noch gar net gekommen! THX _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 01.06.2005, 18:27 Titel: |
|
|
HomeLess_PunkDrummer hat Folgendes geschrieben: | Und das ist ein Shader? Kann ich doch auch hardcoden...
Aber genial, auf die Idee war ich noch gar net gekommen! THX |
Nein über shader würde es anders gehen (GLSL):
Vertexshader:
Code: | varying vec2 TexMapCoord0;
varying vec2 TexMapCoord1;
varying vec2 TexMapCoord2;
varying vec2 TexMapCoord3;
varying vec2 TexMapCoord4;
uniform vec4 PixelAspect;
vec2 xyOff;
void main()
{
gl_Position = ftransform();
xyOff.x = PixelAspect.x;
xyOff.y = PixelAspect.y;
TexMapCoord0 = gl_MultiTexCoord0.xy;
TexMapCoord1 = TexMapCoord0 + xyOff;
TexMapCoord2 = TexMapCoord0 + xyOff*2.0;
TexMapCoord3 = TexMapCoord0 - xyOff;
TexMapCoord4 = TexMapCoord0 - xyOff*2.0;
} |
FragmentShader:
Code: | uniform sampler2D texture0;
varying vec2 TexMapCoord0;
varying vec2 TexMapCoord1;
varying vec2 TexMapCoord2;
varying vec2 TexMapCoord3;
varying vec2 TexMapCoord4;
void main()
{
vec4 color;
color = texture2D(texture0, TexMapCoord0);
color += texture2D(texture0, TexMapCoord1);
color += texture2D(texture0, TexMapCoord2);
color += texture2D(texture0, TexMapCoord3);
color += texture2D(texture0, TexMapCoord4);
color *= 0.2;
gl_FragColor = color;
} |
PixelAspect wird im CCode berechnet:
Code: | PixelAspect.x = 1.0/TexturBreite;
PixelAspect.y = 1.0/TexturHoehe; |
_________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
HomeLess_PunkDrummer JLI Master Trainee
Alter: 36 Anmeldedatum: 28.11.2004 Beiträge: 583 Wohnort: Alter Joghurtbecher an der A4 Medaillen: Keine
|
Verfasst am: 01.06.2005, 18:46 Titel: |
|
|
Nee, ich schreib mir ne Funktion in den Scenemanager...
der auf Wunsch meines Kollegen mit dem ich das Spiel schreibe jetzt "cGrafik" heißt
Dafür habe ich verlangt dass wir Klassennamen nicht in Uppercase schreiben... das war ja belastend... _________________ "Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz." |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|