JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=44431a4396fee7bc50a6e65f431bf4f7Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Alphamaske

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
51m0n
JLI'ler


Alter: 32
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 15.01.2007, 22:34    Titel: Alphamaske Antworten mit Zitat

Hi
Ich hab im mom ein kleines Problem:
Ich habe ein Surface, das nur Grautöne enthält. Wie kann ich das Surface nun so auf den Bildschirm blitten, dass das weiß transparent wird?
Also je weißer der Pixel, desto niedriger der alpha wert.
Das Surface locken und für jeden pixel zu checken, wie hoch der alpha wert sein muss, ist viel zu rechenintensiv, da das Surface so groß wie der Backbuffer ist.

Man könnte das ganze auch problemlos mit nem pixelshader machen, aber ich wollte mal wissen, ob es noch ne andere möglichkeit gibt. Denn ich finde das da ein Pixelshader doch etwas übertrieben ist.

Gibts da noch ne andere Lösung?

MfG 51m0n

edit: das ganze ist übrigens auf DirectX bzw Direct3D bezogen.
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 15.01.2007, 22:45    Titel: Antworten mit Zitat

hm,
man müsste die Grauwerte in den Alphakanal tun und dann mit D3D Rendern.
Mit DirectDraw kann man glaub ich gar keine Shader bneutzen, sondern nur mit D3D. Somit kannste net blitten sondern musst rendern.
Also, Textur einmal bei start halt in den Alphakanal kopierne, oder halt direkt so abspeichern (z.B. als png oder tga, die unterstützen Alphakanal).
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 16.01.2007, 12:11    Titel: Antworten mit Zitat

Also effizienter und einfacher als mit Pixel Shadern kannste's nun wirklich nicht mehr haben. Ich hab mir nochmal die texture operations der FFP durchgeschaut, aber damit kannst du das glaub ich nicht realisieren. Die einzige Alternative zu nem Pixel Shader wäre also die Möglichkeit, die du bereits ausgeschlossen hast (locken und rechnen).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 16.01.2007, 12:38    Titel: Antworten mit Zitat

Es könnte mit AlphaBlending klappen und auch ohne Shader:

AlphaBlendEnable = True
SrcBlend = D3DBLEND_SRCCOLOR
DestBlend = D3DBLEND_INVSRCCOLOR

Einfach bei den RenderStates setzen.

Edit: Hab vergessen das Alpha ja auch benutzt wird, was wohl hier Probleme machen könnte, daher würde ich dir auch PixelShader empfehlen, was aber nicht bedeutet das dies ein Overhead wäre, intern wird doch afaik sowieso alles über Shader simuliert. Wenn du Probleme mit Shadern hast kann ich dir ja ene kleine rar geben Wink
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
51m0n
JLI'ler


Alter: 32
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 16.01.2007, 14:17    Titel: Antworten mit Zitat

Ok Thx @ all

Jonathan_Klein hat Folgendes geschrieben:
hm,
man müsste die Grauwerte in den Alphakanal tun und dann mit D3D Rendern.
Mit DirectDraw kann man glaub ich gar keine Shader bneutzen, sondern nur mit D3D. Somit kannste net blitten sondern musst rendern.

Ähm hab ich nicht gesagt, dass ich mit d3d arbeite?
Und ob Surface oder Texture im Prinzip ist da ja nicht so viel Unterschied.

Jonathan_Klein hat Folgendes geschrieben:
Also, Textur einmal bei start halt in den Alphakanal kopierne, oder halt direkt so abspeichern (z.B. als png oder tga, die unterstützen Alphakanal).

Ja das ist nur ein Problem, dass die Texture in jedem Frame unterschiedlich ist, deshalb geht das nicht.

Dr. Best hat Folgendes geschrieben:
Also effizienter und einfacher als mit Pixel Shadern kannste's nun wirklich nicht mehr haben. Ich hab mir nochmal die texture operations der FFP durchgeschaut, aber damit kannst du das glaub ich nicht realisieren. Die einzige Alternative zu nem Pixel Shader wäre also die Möglichkeit, die du bereits ausgeschlossen hast (locken und rechnen).


Fallen hat Folgendes geschrieben:
Edit: Hab vergessen das Alpha ja auch benutzt wird, was wohl hier Probleme machen könnte, daher würde ich dir auch PixelShader empfehlen, was aber nicht bedeutet das dies ein Overhead wäre, intern wird doch afaik sowieso alles über Shader simuliert. Wenn du Probleme mit Shadern hast kann ich dir ja ene kleine rar geben Wink

Ok dann also doch mit pixelshader Very Happy.

@Fallen
Thx, aber das dürfte kein Problem darstellen. Ist ja nicht so schwer und wenn nicht melde ich mich nochmal Smile.


MfG 51m0n
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 16.01.2007, 15:22    Titel: Antworten mit Zitat

Ok, das das jedesmal unterschieldich ist, wusste ich nicht.
Ist nur die Frage, warum, bzw. wie du das immer erstellst. Evtl. könntest du ja die einzelnen Schritte direkt auf den BackBuffer Anwenden, dann wäre es schneller als mit Zwischenspeichern.
Und ansonsten könntest du evtl. das erstellen so variieren, das jeder Pixel halt schwarz ist, und nur der Alphawert unterscheidlich ist. (Weil das haste doch, wenn bei einem Grau/Weiß bild, weiß koplett durchsichtig ist, und schwarz komplett sichtbar, wies bei Shadowmaps der Fall wäre.)
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
51m0n
JLI'ler


Alter: 32
Anmeldedatum: 06.01.2006
Beiträge: 167
Wohnort: Erkelenz
Medaillen: Keine

BeitragVerfasst am: 16.01.2007, 17:24    Titel: Antworten mit Zitat

Jonathan_Klein hat Folgendes geschrieben:
Ok, das das jedesmal unterschieldich ist, wusste ich nicht.
Ist nur die Frage, warum, bzw. wie du das immer erstellst. Evtl. könntest du ja die einzelnen Schritte direkt auf den BackBuffer Anwenden, dann wäre es schneller als mit Zwischenspeichern.
Und ansonsten könntest du evtl. das erstellen so variieren, das jeder Pixel halt schwarz ist, und nur der Alphawert unterscheidlich ist. (Weil das haste doch, wenn bei einem Grau/Weiß bild, weiß koplett durchsichtig ist, und schwarz komplett sichtbar, wies bei Shadowmaps der Fall wäre.)

lol ich wollte grad mal einen Screen machen, um zu zeigen warum das nicht geht, und dann geht das auf einmal, weil ich nochmal mit den renderstates gespielt hab, gehts. Rolling Eyes
Thx das du mich nochmal dazu gebracht hast Very Happy.
_________________
Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 16.01.2007, 18:21    Titel: Antworten mit Zitat

Ach, ich wollte doch nur Recht behalten Wink
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum