Seite 1 von 2

Transparenz-Leuchten.. mit BlendingMode

Verfasst: 09.10.2004 22:45
von Serge
Ich habe paar monate nichts gemacht mit PB und ich wollte nun fragen ob sich was auf dem Gebiet mit den Sprite3DblendingMode was getan hat?

Ich brauche diesen Effekt, wo die Pixelfarben 'aufaddiert' werden, was also so eine art leuchte verursacht. (schwarze Farbe wird kaum angezeigt, helle hingegen setzt sich stark durch) Auf meiner nVidia Graka ist es afaik der blendingMode 0,2 gewesen.

Nunja auf manchen Rechnern gabs jedoch Probleme damit, entweder wurde der Effekt mit Fehlern angezeigt oder es wurde ein ganz anderer dafür angezeigt.

Verwendet einer hier BlendingMode effekte und hat damit schon erfahrung? Gibts vieleicht denselben Effekt auch unter einer anderen Kombination?

Im altem Forum hat jemand dazu eine Recherche gemacht, würde mich interessieren was daraus wurde..

edit:
ahja, hab den Thread nochmal gefunden :]
http://robsite.de/php/pureboard-archiv/ ... highlight=
Scheint was gefunden zu haben wie es auch auf Radeon Grafikkarten funktioniert.
Vieleicht kanns hier einer bestätigen?

Verfasst: 10.10.2004 20:12
von Ypser

Verfasst: 10.10.2004 20:58
von Serge
Hm naja da kam am ende des Thread nichts raus, also nichts handfestes was zu 100% was auf allen Grakas geht.
Laut dem anderem Thread sollen 5,2. 6,2 und 7,7 gehen.
Bei mir klappen sie alle. Verwende zurzeit 7,7
Würde mich interessieren wenn das einer mit ner Radeon bestätigen könnte ob die genannten Kombinationen bei ihm auch richtig gehen.

Verfasst: 11.10.2004 08:25
von SirCus
Der Thread war dieser hier gell:

http://robsite.de/php/pureboard-archiv/ ... d+blending

Ich hab mich damals mit ATI und nvidia Support in Verbindung gesetzt. Das Problem war zum einen dass PB zwar Blending Modi über 16 unterstützt, die aber noch garnicht existieren.Soweit ich das verstanden hab. Und darauf reagieren Grafikkarten jeweils anders.

Des weiteren gibt es Probleme mit Blending Modi 0, 1 - den Grund hab ich nichtmehr im Kopf, glaub aber es war der selbe wie oben. Ich bekam damals eine List von verfügbaren Modi zugeschickt, die unterscheidet sich durchaus etwas von den von PB zur verfügung gestellten Modi.

Und das eigentliche Problem war dann, dass z.B. "Faktor" einen zusätzlichen Wert (eben diesen Faktor) braucht, den Purebasic aber nicht ermittelt bzw abfrägt. - Auf "kein Faktor vorhanden" reagiert jede Grafikkarte anders, das erklärt die unterschiedlichen Ergebnisse.

Auf diesem Rechner hier hab ich den Mailverkehr nicht, aber sobald ich an den anderen Rechner komme such ich die Liste raus die mir der Support damals geschickt hat. - Eigentlich müssten alle Kombinationen funktionieren die zwischen 2 und 13 liegen.
Würde mich interessieren wenn das einer mit ner Radeon bestätigen könnte ob die genannten Kombinationen bei ihm auch richtig gehen.
naja ich programmiere auf einer Radeon 9800, die beiden Testrechner haben 9500 und ne alte Radeon Mobility aufm Laptop. Da gehen sie alle.
Die werte die ich damals im Thread genannt habe , 5,2 6,2 7,7 waren nur die Werte die ich von Forenusern mit Geforce Karte zurückbekommen hab, die mein Tool getestet haben, und mit diesen Werten die von mir GESUCHTEN Effekte erreicht haben!

Das Problem lag darin dass nicht nur einige Kombinationen NICHT funktioniert haben, sondern zwar auf beiden Karten funktionieren, aber jeweils anders aussehen.. sodass man, wenn man nicht exakt den selben Effekt mit dem selben Sprite auf beiden Karten testet, man zunächst nicht bemerkt dass es evtl probleme geben kann.
Deshalb hab ich damals zum Test mit meinem Tool aufgerufen. Die User sollten mit verschiedenen Kombinationen die Effekte hervorrufen die ich in den Screenshots mitgeliefert hab.

Das waren dann eben die Kombis 5,2 6,2 7,7 - andere Werte könnten auch auf beiden Karten gehen, waren aber für MEINEN gewünschten Effekt nicht die richtigen. Andere Kombinationen zwischen 2 und 13 sollten also auch gehen

.. nur damit keine Verwirrung aufkommt...

PS:
falls du mein Tool noch nicht hast, lads dir mal von meiner Homepage runter, es ist da recht hilfreich. Gerade wenn du eine Geforce Karte hast, denn die Screenshots die das Tool zeigt sind die von meiner Radeon Karte und sind vermjutlich die Effekte die du brauchst, du siehst also gleich wie sie "live" bei dir aussehen, und auf meiner Radeon damals aussahen.

Verfasst: 11.10.2004 11:51
von Ypser
Sicher? Ich habe da was geschrieben, von (5, 7), was eigentlich überall funktionieren sollte.
Viele Modi scheinen auch auf den ersten Blick zu funktionieren, aber wenn man etwas damit rumspielt stellt man fest,
dass bei einigen Modi die Transparenz-Angaben bei DisplaySprite3D ignoriert werden... Also Vorsicht!

Verfasst: 11.10.2004 13:02
von SirCus
Ypser hat geschrieben:Sicher? Ich habe da was geschrieben, von (5, 7), was eigentlich überall funktionieren sollte.
Viele Modi scheinen auch auf den ersten Blick zu funktionieren, aber wenn man etwas damit rumspielt stellt man fest,
dass bei einigen Modi die Transparenz-Angaben bei DisplaySprite3D ignoriert werden... Also Vorsicht!
absolut nicht sicher :)
nicht alle modi behandeln diei transparenz gleich, manche haben keine transparenzfarbe, andere schon, etc. - sollte man mit meinem Tool eigentlich feststellen können.
Wenn du möchtest, dann mach doch mal ein paar screenshots wie ein modus aussieht aber nicht aussehen sollte auf verschiedenen karten

Verfasst: 11.10.2004 13:32
von Danilo
Im DX-SDK steht eigentlich drin wie man die Grafikkarte abfragen
kann, ob sie einen bestimmten Modus interstützt oder nicht.
Entweder PB checkt das nicht (was ich mal annehme), oder
es hat noch nie jemand den Rückgabewert von BlendingMode
gecheckt (was auch nicht dokumentiert ist).

Du, SirCus, warst damals aber auf einer ganz falschen Spur, soweit
ich mich erinnere.
Ich habe damals extra die Konstanten (bis 24) überprüft, und
Du hattest da ganz andere Konstanten als in der PB-Hilfe.
Die Werte aus der PB-Hilfe stimmen mit denen vom DX7-SDK
jedenfalls überein - Du hattest da etwas ganz anderes, Konstanten
für eine andere Funktion.
Schau nochmal im DX7-SDK nach den Konstanten D3DTOP_.... -
Du hattest D3DBLEND oder so.
"D3DTOP" = Direct3D TextureOPeration, siehe Funktion
Direct3DDevice7.SetTextureStageState().

Die PB-Befehle scheinen das allerdings intern immer zu
setzen (in Sprite3DBlendingMode), so daß man da nicht
eingreifen kann. Ich habs jedenfalls damals nicht geschafft
und dann sein gelassen. Wenn Du alles selbst machst (ohne
den PB-Befehl), dann ist das aber sicher kein Problem.

Verfasst: 11.10.2004 14:22
von SirCus
Danilo hat geschrieben: Du, SirCus, warst damals aber auf einer ganz falschen Spur, soweit
ich mich erinnere.
Ich habe damals extra die Konstanten (bis 24) überprüft, und
Du hattest da ganz andere Konstanten als in der PB-Hilfe.
Die Werte aus der PB-Hilfe stimmen mit denen vom DX7-SDK
jedenfalls überein - Du hattest da etwas ganz anderes, Konstanten
für eine andere Funktion.
Schau nochmal im DX7-SDK nach den Konstanten D3DTOP_.... -
Du hattest D3DBLEND oder so.
"D3DTOP" = Direct3D TextureOPeration, siehe Funktion
Direct3DDevice7.SetTextureStageState().
ich hab keine ahnung was ich hatte ;) ich nahm an dass wennich in PB
SetD3DBlendingMode(i,o) setze
dass ich dann die D3DBlendingModi setze. Wo war ich da auf der falschen Spur? ;)
Ich kann mich nicht an D3DTOP_ oder ähnliche Konstanten erinnern. Ich hab nur mit der PB-Hilfe und den PB Befehlen gearbeitet, sonst nix.

Die Rückgabewerte der Modi sagen zwar aus ob der Modus funktioniert, nicht aber wie die Grafikkarte ihn interpretiert. Anscheinend geht das über Purebasic teilweise falsch. denn obwohl der Modus korrekt initialisiert wird, stellen manche Grafikkarten einige Modi unterschiedlich dar.

Ich war lediglich auf der Suche nach Modi, die auf den gängigen Karten gleich dargestellt werden.

Verfasst: 11.10.2004 14:28
von SirCus
@Danilo nochmal zum beweis
wennich in der PB HIlfe auf Sprite3DBlendingmode gehe,
dann bekomme ich folgendes output
Sprite3DBlendingMode()

Syntax

Sprite3DBlendingMode(Ausgangsmodus, Zielmodus)
Beschreibung

Verändert die Art, wie das Sprite3D (beim Benutzen von DisplaySprite3D() und einem Transparenz Wert) grafisch mit dem Hintergrund verbunden ("blended") wird. Beide Modi (Ausgangs- und Zielmodus) können einen Wert zwischen 0 und 24 annehmen. Dieser Befehl ist nur für fortgeschrittene Programmierer. Hier die DirectX Liste der zugehörigen Werte:

#D3DTOP_SELECTARG1 = 2
#D3DTOP_SELECTARG2 = 3
#D3DTOP_MODULATE = 4
#D3DTOP_MODULATE2X = 5
#D3DTOP_MODULATE4X = 6
#D3DTOP_ADD = 7
#D3DTOP_ADDSIGNED = 8
#D3DTOP_ADDSIGNED2X = 9
#D3DTOP_SUBTRACT = 10
#D3DTOP_ADDSMOOTH = 11
#D3DTOP_BLENDDIFFUSEALPHA = 12
#D3DTOP_BLENDTEXTUREALPHA = 13
#D3DTOP_BLENDFACTORALPHA = 14
#D3DTOP_BLENDTEXTUREALPHAPM = 15
#D3DTOP_BLENDCURRENTALPHA = 16
#D3DTOP_PREMODULATE = 17
#D3DTOP_MODULATEALPHA_ADDCOLOR = 18
#D3DTOP_MODULATECOLOR_ADDALPHA = 19
#D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20
#D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21
#D3DTOP_BUMPENVMAP = 22
#D3DTOP_BUMPENVMAPLUMINANCE = 23
#D3DTOP_DOTPRODUCT3 = 24
nichts anderes habe ich benutzt.

Verfasst: 11.10.2004 14:44
von Danilo
SirCus hat geschrieben:@Danilo nochmal zum beweis
[...]
nichts anderes habe ich benutzt.
OK, Sorry. Ich dachte Du hattest mal was von D3DBLEND
erzählt, und das sieht man auch hier:
D3DBlending Mode 14 ..wie faktor setzen? - D3DBLEND_BLENDFACTOR

War meine Erinnerung also doch richtig - hatte dort sogar
schon geantwortet.