Re: D3D: Qberschneidende_Grafiken?=

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance

From: Peter Racz (pracz_at_aprNOSPAM.fta-berlin.de)
Date: 04/06/04


Date: Tue, 06 Apr 2004 17:10:08 +0200

Christoph Redl wrote:

> Hallo!
>
> Also das mit dem immer von hinten nach vorne rendern ist
> ziemlich schwierig, da ich die Szene von allen möglichen
> Seiten (also freie Rotation) anschauen können will.
> Auszurechnen welches Objekt im Moment vorne liegt ist da
> ziemlich schwierig.

Ja, das ist das übliche Problem(chen). Du mußt die Quadrate nach
Kameraanstand sortieren, oder gleich so drehen, daß die
Überdeckung-Reihenfolge-Spiel stimmt. Schwierig ist das nicht, das
problem ist eher das, daß bei es bei sehr vielen Objekten zu lange
dauert. Bei korrekter Transparenz führt an dem Sortieren kein Weg
vorbei. Es gibt zwar komplizierte Algorithmen, die mehr oder weniger
ohne Sortierung auskommen, sie sind aber wirklich kompliziert, mit Pixel
Shadern, etc. und sie sind nicht vollkommen fehlerfrei.

>
> Außerdem: Was meinst du mit "mache richtige
> Transparenz mit Alpha Kanal in der Textur und Alpha
> Blending". Also ich habe im Moment ein Bitmap eingeladen,
> wo die Bereiche schwarz sind, die nicht sichtbar sein
> sollen. Daher habe ich als ColorKey schwarz eingestellt,
> und vor dem Rendern aktiviere ich AlphaBlending. Dadurch
> sind die schwarzen Bereiche ganz durchsichtig, und der
> Rest eben so halb. Mit Alphakanal direkt in der Textur
> habe ich noch keine Erfahrung. Wie geht denn das?
>

Eine Textur mit Alpha hat neben R, G und B einen vierten Kanal, der
heißt Alpha. Sie gibt die Maß der Transparenz an. (z.B. ganz schwarz ist
durchsichtig, ganz weiß ist undurchsichtig) Mit dem directX-Texture-Tool
und mit einem beliebigen Photo-Editor (ich benutze Corel Photo Paint)
kannst du leicht einen Alpha Kanal zu einem bestehenden Textur
erstellen, auch so, daß das, was schwarz war, zu Alpha wird. Du
erstellst im Prinzip ein schwarzweißes Bild, die Du mit dem Textur-Tool
als Alpha einlesen kannst. Die Textur kann dann nicht mehr als .bmp
gespeichert werden, sondern z.B. als .dds, das ist aber egal. Alle
DirctX Texturfunktionen können mit dds umgehen.

Bei der Alpha Blending (er heißt ja Alpha Blending, weil es den Alpha
Kanal benutzt), kannst Du die Renderstates dann so setzen, wie Du
brauchst, schau den Tutorialbespiel an. Das Prinzip ist sehr einfach,
der Alphawert des Pixels bestimmt beim Rendern wieviel vom bereits
vorhandenen Pixel im Bild und wieviel von der gerendernten Textur
genommen werden. 0% Bild und 100% Textur bedeuten keinen Transparenz,
100% Bild und 0% Textur ist völlige Transparenz. Dazwischen sind
natürlich alle 255 Werte möglich.

Colorkeying ist eine Alternative zu Alphablending, die Doku rät jedoch
von ihm ab, als obsolet.

Gruß
Peter



Relevant Pages

  • Re: IDirect3DSurface9 and alpha channels
    ... Run DXCapsViewer on this card. ... of hardware blending it offers (frame buffer alpha and texture stage ...
    (microsoft.public.win32.programmer.directx.graphics)
  • Re: IDirect3DSurface9 and alpha channels
    ... textures rendering, then rest assured it doesn't support alpha blending at ... > Now as far as your question about the images and their alpha channel, ...
    (microsoft.public.win32.programmer.directx.graphics)
  • Re: SGI using ATI Chips?
    ... OpenGL, and mipmapping is definitely supported. ... The only reason I can see why alpha blending isn't supported, is, ...
    (comp.sys.sgi.misc)
  • Re: Alphablending
    ... over the red areas in the background picture. ... That is CONSTANT alpha, my code is slightly more flexible than the ... fixed blending in OpenGL at the time I wrote the code. ... is that I mix the background and sprite color using the ...
    (alt.lang.asm)