 |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
51m0n JLI'ler

Alter: 33 Anmeldedatum: 06.01.2006 Beiträge: 167 Wohnort: Erkelenz Medaillen: Keine
|
Verfasst am: 15.01.2007, 22:34 Titel: Alphamaske |
|
|
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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 15.01.2007, 22:45 Titel: |
|
|
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 |
|
 |
Dr. Best Senior JLI'ler

Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 16.01.2007, 12:11 Titel: |
|
|
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 |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 16.01.2007, 12:38 Titel: |
|
|
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  _________________ "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 |
|
 |
51m0n JLI'ler

Alter: 33 Anmeldedatum: 06.01.2006 Beiträge: 167 Wohnort: Erkelenz Medaillen: Keine
|
Verfasst am: 16.01.2007, 14:17 Titel: |
|
|
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  |
Ok dann also doch mit pixelshader .
@Fallen
Thx, aber das dürfte kein Problem darstellen. Ist ja nicht so schwer und wenn nicht melde ich mich nochmal .
MfG 51m0n _________________ Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 16.01.2007, 15:22 Titel: |
|
|
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 |
|
 |
51m0n JLI'ler

Alter: 33 Anmeldedatum: 06.01.2006 Beiträge: 167 Wohnort: Erkelenz Medaillen: Keine
|
Verfasst am: 16.01.2007, 17:24 Titel: |
|
|
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.
Thx das du mich nochmal dazu gebracht hast . _________________ Teigwaren
heißen Teigwaren,
weil sie früher einmal Teig waren |
|
Nach oben |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
|
Nach oben |
|
 |
|
|
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
|