Transparent - Alphakanal + Mapscrolling



  • Hi!
    Ich Hätte da zwei Fragen und möchte nicht für jede einen neuen thread aufmachen...
    1.) Frage:
    Ich bastle gerade an einem Strategie-Spiel für das ich mit

    D3DXCreateTextureFromFileEx(device,
                                    path,
                                    ImgInfo.Width,
                                    ImgInfo.Height,
                                    1,0,
                                    D3DFMT_UNKNOWN,
                                    D3DPOOL_MANAGED,
                                    D3DX_FILTER_NONE,
                                    D3DX_FILTER_NONE,
                                    RGB(255,0,255),0,0,
                                    &Surface);
    

    beim erstellen die Farbe "Magenta" (rgb(255,0,255)) "ausblende"
    Das Problem ist jetzt nur dass in meinem schlauen Buch immer wieder erwähnt wird dass man mithilfe des Alphakanals Farben transparent machen kann aber nicht wie das genau geht...

    Ich möchte nämlich einen "fog of war" über die Karte legen (einfach eine schwarze Textur und diese dann teilweise transparent machen)...
    nur weiß ich nicht genau wie!...
    kennt ihr da eine gute Möglichkeit...bzw ein gutes Tutorial?

    2.Frage:
    In dem Spiel lade ich Karten die immer aus Blöcken (512 x 512 Pixel) bestehen....
    und bei 5 Reihen mit jeweils 5 Blöcken kommt da ordentlich was zusammen...
    bisher hab ich eine große Oberfläche (abhängig von der Kartengröße) in die ich die Bilder hineinlade und dann mit StretchRect den Bereich den der User gerade sieht in den Backbuffer kopiere....

    Das funktioniert so auch...allerdings nur bis zu einer gewissen Größe...
    Dazu kommt das die Framerate um ca 20 Frames sinkt sobald man über das Bild scrollt....
    ist das "normal" oder gibt es eine bessere Methode die Karte darzustellen?
    (ich dachte schon daran die Blöcke nicht in eine große Oberfläche zu laden sondern die einzelnen Blöcke immer wenn sie benötigt werden zusammenzufügen...)
    Was meint ihr ist besser?



  • Kuldren schrieb:

    Hi!
    beim erstellen die Farbe "Magenta" (rgb(255,0,255)) "ausblende"
    Das Problem ist jetzt nur dass in meinem schlauen Buch immer wieder erwähnt wird dass man mithilfe des Alphakanals Farben transparent machen kann aber nicht wie das genau geht...

    Also erstmal sind das zwei vollkommen verschiedene Dinge. Das "ausblenden" heißt Colorkey und bedeutet, dass die Teile der Textur, die so gefärbt sind, gar nicht beim blitten übertragen werden. Alpha-blending ist eine Art Farbmischung, um einen Eindruck von Transparenz zu erzeugen.

    Kuldren schrieb:

    Ich möchte nämlich einen "fog of war" über die Karte legen (einfach eine schwarze Textur und diese dann teilweise transparent machen)...
    nur weiß ich nicht genau wie!...
    kennt ihr da eine gute Möglichkeit...bzw ein gutes Tutorial?

    Bei manchen Blt-Funktionen kann man in einem Parameter Farbänderungswerte angeben, dort kannst du den Alpha-Wert angeben, den deine Textur haben soll.

    Kuldren schrieb:

    2.Frage:
    In dem Spiel lade ich Karten die immer aus Blöcken (512 x 512 Pixel) bestehen....
    und bei 5 Reihen mit jeweils 5 Blöcken kommt da ordentlich was zusammen...
    bisher hab ich eine große Oberfläche (abhängig von der Kartengröße) in die ich die Bilder hineinlade und dann mit StretchRect den Bereich den der User gerade sieht in den Backbuffer kopiere....

    Also irgendwie habe ich das jetzt so verstanden, dass deine Oberfläche eine einzelne Surface ist, wo du erstmal alles draufgemalt hast und die du dann immer als ganze in den Backbuffer lädst. Mal rechnen : 5x512 = 2560.
    Deine Surface ist also 2560x2560 groß. Lad deine einzelnen Teile doch lieber einzeln in den Backbuffer. Dann hast du 5 512x512 Stücke statt einem 5x5 x 512x512 Stück, dass geladen wird.

    Kuldren schrieb:

    Das funktioniert so auch...allerdings nur bis zu einer gewissen Größe...
    Dazu kommt das die Framerate um ca 20 Frames sinkt sobald man über das Bild scrollt....
    ist das "normal" oder gibt es eine bessere Methode die Karte darzustellen?
    (ich dachte schon daran die Blöcke nicht in eine große Oberfläche zu laden sondern die einzelnen Blöcke immer wenn sie benötigt werden zusammenzufügen...)
    Was meint ihr ist besser?

    Hmmm ja so ungefähr meinte ich das.



  • ja...ich hab das jetzt eh geändert und lade die blöcke einzeln in den backbuffer...

    und das mit dem colorkey hab icha uch verstanden allerdings würde ich gerne teilweise transparente texturen darstellen...
    aber ich finde nichts zu dem alphablending....
    kennt ihr da ein tutorial oder eine seite?



  • AlphaBlending Tutorial
    Brauche grade selber ALphablending aber bei mir Workt das was im Tutorial steht nicht, hab mir überlegt ob ich die Grafik locke und noch eine AlphaMapGrafik locke und dann die texel per Hand zu mixen, dies erscheint mir aber sehr umständlich würde lieber die DirectX funktion usen...


Anmelden zum Antworten