Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [DirectX] Teiltextur in neue Textur rendern (https://www.delphipraxis.net/114226-%5Bdirectx%5D-teiltextur-neue-textur-rendern.html)

.chicken 21. Mai 2008 19:04


[DirectX] Teiltextur in neue Textur rendern
 
Hi, ich bins wiedermal :)

Meine Vorhaben ist folgendes: Ich habe eine T2DXAnimatedSprite-Klasse, in der ich, bevor sie gerendert wird, die Textur so transformiere, dass nur ein bestimmtes Frame aus der Textur gerendert wird.
Jetzt würde ich diesen Texturausschnitt vor dem Rendervorgang gerne in eine neue Textur rendern, in der dann nur das bestimmte Frame ist. Dadurch hätte ich die Möglichkeit das Frame auch wieder zu transformieren.

Meine Frage: Ist das zu performance-lastig, oder geht das von der Geschwindigkeit her?
Zweite Frage: Wie mache ich das? Ich weiss wie ich in eine Textur rendern kann. Aber wie kriege ich es hin, dass die neue Textur dann nur das alte Frame enthält? Ich habe bisher nur die gesamte Welt in eine Textur gerendert.

JasonDX 21. Mai 2008 19:23

Re: [DirectX] Teiltextur in neue Textur rendern
 
Wenn du etwas nicht in den Backbuffer, sondern einen anderen Speicherbereich rendern willst, sei als Stichwort [msdn:506deaeee7="IDirect3DDevice9 SetRenderTarget"]SetRenderTarget[/msdn:506deaeee7] genannt. Damit kannst du auch eine andere Textur als Render-Ziel festlegen, und später wieder wie eine normale Textur darauf zugreifen.
Wie musst du denn dein Texturframe transformieren, dass dies nicht anders geht? (Ich wage zu behaupten, dass es Performancemäßig nicht der ideale Weg ist).

greetz
Mike

.chicken 21. Mai 2008 19:31

Re: [DirectX] Teiltextur in neue Textur rendern
 
Naja, z.B. wenn es dann eine bewegte Textur sein soll, dh. dass die Textur sich stetig in eine Richtung bewegt.
Dazu müsste ich es erst in eine neue Textur rendern, um die dann nochmal transformieren zu können.

Ja, wie gesagt ich weiss wie ich die Textur als Rendertarget festlege, das steht im Buch "DirectX9 in Delphi".
Aber wie ich dann NUR das alte Frame der Textur und das fontral darein rendere weiss ich nicht. Es wird ja zB immer durch die Kamera transformiert.

Naja performance-technisch könnte ich das ja testen, müsste aber die doppelte Menge an Renderzeit brauchen oder?

Ich müsste nur erstmal wiessen wie ich das nun hinkriege ;-)

JasonDX 21. Mai 2008 19:59

Re: [DirectX] Teiltextur in neue Textur rendern
 
Zitat:

Zitat von .chicken
Naja, z.B. wenn es dann eine bewegte Textur sein soll, dh. dass die Textur sich stetig in eine Richtung bewegt.
Dazu müsste ich es erst in eine neue Textur rendern, um die dann nochmal transformieren zu können.

Eine Textur legst du ja immer nur auf ein Primitive, den du transformierst wohin du ihn brauchst und dann renderst. Oder inwiefern meinst du "bewegen"?

Zitat:

Zitat von .chicken
Ja, wie gesagt ich weiss wie ich die Textur als Rendertarget festlege, das steht im Buch "DirectX9 in Delphi".
Aber wie ich dann NUR das alte Frame der Textur und das fontral darein rendere weiss ich nicht. Es wird ja zB immer durch die Kamera transformiert.

Und die Matrix für die Kamera kannst du setzen... Um genau zu sein kannst du sogar alle 3 Matrizzen auf die Identitätsmatrix setzen, und als Vertexbuffer 2 Dreiecke nehmen, die ein Rechteck ((-1, -1), (1, 1)) ergeben, auf die 4 Vertices die Texturkoordinaten legen, die dein Frame beschreiben, und anschließendden Vertexbuffer in die Textur rendern.

greetz
Mike

.chicken 21. Mai 2008 20:18

Re: [DirectX] Teiltextur in neue Textur rendern
 
Ok, dann sehe ich in der Textur nur den alten Frame? Super, das versuche ich gleich.

Ja, ich könnte dann das Mesh bewegen. Aber die Textur zu bewegen eignet sich super um zB vorzugaukeln, dass die Wolken im Hintergrund vom Wind weggeweht werden. Wenn ich da immer das Mesh verschieben würde, wären die Wolken irgendwann "weg" (außerhalb der Kamera).
Hoffe du verstehst wie ich das meine.

Ich teste das nun mal und melde mich wieder :)

Edit: Argh, das stellt sich doch noch komplizierter dar, ich muss dafür irgendwie nochmal ne neue Klasse erstellen denke ich mal. Mal sehen wie ich das halbwegs sauber hinkriege ;-)

Danke soweit

Edit2: Hm das funktioniert irgendwie nicht. Die Textur ist hinterher total gestreckt. Naja ich lasse das erstmal, vielleicht setze ich mich später nochmal dran.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz