Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Strich im transparenten Texture (https://www.delphipraxis.net/178288-strich-im-transparenten-texture.html)

SonnyBoyPro 30. Dez 2013 14:30

Strich im transparenten Texture
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo zusammen,

bin gerade dabei an mein MediaCenter-Programm weiter zu tüfteln....
Nun kämpf ich gerade an folgendem Problem (siehe Ausschnitt Screen-Shot) das nach dem Rendern (DirectX9Ex) beim Fenster
auf der Oberseite ein Strich ist.
Die Texture selbst wird über Direct2D auf eine SharedSurface gezeichnet, ist aber in Ordnung (Texture als PNG abgespeichert, siehe Anhang).

Ob ich die Texture mit einer Ortho oder einer Perspektive rendere (also auf den Vertex unter D3D9Ex) bleibt egal, immer das selbe Ergebnis.

Hat jemand eine Idee oder Anhaltspunkt für mich was da schief geht ? :gruebel:

bg

Aphton 30. Dez 2013 19:07

AW: Strich im transparenten Texture
 
Ich weiß von OpenGL, dass das evt. durchs Wrapping verursacht werden kann!
Hast du soetwas wie ~WRAP_S, WRAP_T aktiviert (Texturkoordinaten)

SonnyBoyPro 31. Dez 2013 07:24

AW: Strich im transparenten Texture
 
Hi Aphton,

der Tip war gut, danke
Delphi-Quellcode:
D3D9DeviceEx.SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_CLAMP);
D3D9DeviceEx.SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_CLAMP);
Scheinbar kommt es hier zu einem Problem mit der Texture und der Koordinatenumrechnung.
Ich hab mir auch das erzeugte PNG nochmals näher angeschaut:
Bei der Direct2D muss die Y Koordinate um -1 gerechnet werden (bei X aber nicht). Dh. ein Rechteck muss zb. von Y 9 nach 49 gezeichnet werden
um am Bitmap dann von 10 nach 50 zu gehen.
wie gesagt, bei X tritt dieser offset nicht auf, klingt komisch ist halt so :gruebel:

wird die texture mit 1 pixel transparenten rand gezeichnet braucht das Adress-Clamping auch nicht eingeschalten werden, die Texture wird dann richtig gerendert (screenshot, mit GIMP geprüft :wink:)

D2 Content selbst hab ich noch nicht geprüft, da anscheinend ein bisschen aufwendig http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Damit werde ich hergehen und die Texture einfach intern in der GUIWindow-Basis-Klasse um 2 pixel vergrößern und einen transparenten Rand lassen. und die Texture-Größe ist mir ja rechentechnisch wurscht, weil das Zeichnen ja eh die GPU machen muss :-D

bg

SonnyBoyPro 1. Jan 2014 18:21

AW: Strich im transparenten Texture
 
Hallo zusammen und ein gutes neues Jahr!

Nach ein wenig MSDN Recherche hab ich nun Licht in die Sache gebracht.

Ursächlich für diese Verhalten ist das Texture-Filtering.
Da die Ränder meiner Direct2D Surface am PNG klar sind, am Screenshot allerdings mit Antialiasing Effekt, hab ich mal folgendes probiert:
Delphi-Quellcode:
D3D9DeviceEx.SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_NONE);
D3D9DeviceEx.SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_NONE);
Siehe da, die Texture ist klar, und die Ränder am Rand sind auch weg, auch wenn man bis an den Rand zeichnet.

Vielleicht nützt ja mal jemand anderen :)

bg

Zacherl 1. Jan 2014 18:50

AW: Strich im transparenten Texture
 
Sollte der Min und Mag Filter nicht eigentlich nur dann angewendet werden, wenn die Textur verkleinert oder vergrößert wird?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:34 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