AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Alphatransparent von Bildern bei Direct3D
Thema durchsuchen
Ansicht
Themen-Optionen

Alphatransparent von Bildern bei Direct3D

Ein Thema von SirThornberry · begonnen am 24. Aug 2007 · letzter Beitrag vom 26. Aug 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Alphatransparent von Bildern bei Direct3D

  Alt 25. Aug 2007, 14:44
Ich hab mit ZeroMemory etc. gearbeitet und trotzdem das. Ich hab die Befürchtung das ich beim erstellen/initialisieren des 3DDevice oder von IDIRECT3D9 etwas "falsches" angegeben habe.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#12

Re: Alphatransparent von Bildern bei Direct3D

  Alt 25. Aug 2007, 15:21
Du missverstehst mich. Ich meine nicht die Strukturen etc., die du übergibst, sondern ich meine die Renderstates, TextureStageStates usw. Die initialisierst du ja üblicherweise nicht selbst, sondern verlässt dich auf die Default-Werte.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Alphatransparent von Bildern bei Direct3D

  Alt 25. Aug 2007, 20:31
ich weiß schon was du meinst, und darauf verlasse ich mich schon nicht. Ich meinte nur das der Grund, warum es im alten Projekt nicht läuft, wohl eine andere Initialisierung des Devices war oder ich hab an irgend ner Stelle die Renderstates verstellt.

Naja, noch eine Anmerkung zu dem Alphablend.
Mit dem D3DRS_ALPHABLENDENABLE kann man wunderschön halbtransparente Sachen darstellen. Allerdings muss man darauf achten das dinge die hinter den halbtransparenten gebilden stehen zuerst gezeichnet werden.
Malt man erst die halbtransparente Fläche und danach erst danach das was dahinter steht sieht man an der halbtransparenten Stelle das durch was zum Zeitpunkt des Zeischnens dahinter war.

Wenn der Alphakanal etwas zu 100% durchsichtig macht gibt es keine Probleme weil dann der Bildpunkt ganz weg gelassen wird.

In diesem Zusammenhang ist dann die Verwendung von D3DRS_ALPHATESTENABLE auch ganz gut. Wie bereits erwähnt kann es bei halbtransparenzen unschöne Effekte geben. Mit ALPHATESTENABLE kann man dann dafür sorgen das nicht nur Pixel mit Alphawert 0 ausgelassen werden. So kann man festlegen das zum Beispiel alle Pixel ausgelassen werden wo der Alphawert kleiner 10 ist (das ist so transparent das es fast keinen unterschied macht ob man das pixel ganz weglässt oder blendet)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#14

Re: Alphatransparent von Bildern bei Direct3D

  Alt 26. Aug 2007, 00:04
Zitat:
oder ich hab an irgend ner Stelle die Renderstates verstellt.
Was irrelevant gewesen wäre, wenn du dich nicht auf bestimmte Werte in den Renderstates verlassen hättest, wie ich sagte
In deinem funktionierenden Code-Beispiel zeigst du sehr deutlich, dass du viele Renderstates und TextureStageStates eben nicht eingestellt hast. Wenn sie auf Default standen, prima, wenn sie irgendwoanders schon umgestellt wurden, Happy Bughunting.
Also, wirklich, lieber einen Renderstate mehr passend einstellen als einen weniger, aber direkt hintereinander nach Möglichkeit, und nicht zwischen lauter DrawPrimitive-Aufrufen. Oder du speicherst den State immer, wenn du Änderungen machst, und stellst ihn anschließend wieder her.

Was das Sortieren angeht, üblicherweise werden tatsächlich alle Primitives, die alpha-geblendet werden müssen, von hinten nach vorne gezeichnet. Was dummerweise genau das Gegenteil von dem ist, was man sonst macht, denn normalerweise zeichnet man von vorne nach hinten, weil durch den Z-Test eine Menge Overdraw ausgeschlossen wird. Andererseits braucht man sich z.B. bei Partikelsystemen, einer typischen Anwendung für massives Alphablending, nicht darum kümmern, weil man da additiv arbeitet (DESTBLEND = ONE), und damit die Reihenfolge wieder egal ist.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:24 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