JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Scrolling - Transparenz - Surfaces

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
FanBoy
Mini JLI'ler



Anmeldedatum: 21.07.2003
Beiträge: 33

Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 10:35    Titel: Scrolling - Transparenz - Surfaces Antworten mit Zitat

HiHo, schon wieder ein Problem =(
Ich habe aus dem Scrolling2 Beispiel aus Christians Buch eine eigene Klasse gemacht. Nun wollte ich mehre Objekte davon anlegen und mehre Hintergründe hintereinander scrollen lassen. Zum Beispiel Wald vorne und Hinter langsam die Berge... müsste eignetlich gut aussehen. Aber dummerweise sieht man immer nur das erste Bild. Wo wird der Alphakanal ignoriert? Bei Surfaces allgemein? Bei D3DXLoadSurfaceFromFile? Bei StretchRect? Beim Zugriff auf die Pixel der gesperrten Oberflächen...?
Hat vielleicht sogar irgendwer eine Lösung für das Problem?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 10:43    Titel: Antworten mit Zitat

Bei mir wird der Alphakanal nur bei D3DXLoadSurfaceFromFile übernommen. Und dann wird von allen anderen Funktionen dieser Alphakanal verwendet... Sad Wenn ich auch ne normale Oberfläche anlege kriege ich kein Alpha zustande. Wäre auch an der Lösung interessiert wie man einer LPDIRECT3DSURFACE9 Surface einen Alphakanal geben kann, wenn man kein Bild in die Surface lädt.
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
FanBoy
Mini JLI'ler



Anmeldedatum: 21.07.2003
Beiträge: 33

Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 11:01    Titel: Antworten mit Zitat

moment mal...
wenn du etwas in der Richtung schreibst:
Code:

m_lpD3DDevice->CreateOffscreenPlainSurface(SrcInfo.Width,SrcInfo.Height, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT,&m_lpTempSurface,NULL);  //eine Oberfläche in der Größe des Bildes wird erzeugt

D3DXLoadSurfaceFromFile (m_lpTempSurface,NULL,NULL,filename,NULL,D3DX_FILTER_NONE,NULL,&SrcInfo);   //Das Bild wird in die Oberfläche übertragen (größen gleich)

m_lpD3DDevice->StretchRect(m_lpTempSurface,NULL,m_lpBackBuffer,&r,D3DTEXF_NONE);    //die Bild-Surface wird in den backpuffer geflippt


Dann erhälst du ein Bild, bei dem der Hintergrund transparent gezeichnet wird? hui... bei mir funzt das nicht, der (eigentlich unter PSP als transparent eingetragener) Hintegrund wird weiß/grau dargestellt.
Das gleiche Bild als Textur als Sprite genutzt funzt...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 11:20    Titel: Antworten mit Zitat

Langsam glaube ich, dass man Surfaces in DX9 keine ColorKeys geben kann... Sad

also so funktioniert das mit dem Laden von Bildern mit tranzparenten Hintergrund, ist aber leider mit 3DSprite...
Code:
D3DXCreateTextureFromFileEx(lpD3DDevice,
                                Filename,
                                ImageFileInfo.Width,
                                ImageFileInfo.Height,
                                1,0,
                                D3DFMT_UNKNOWN,
                                D3DPOOL_MANAGED,
                                D3DX_FILTER_NONE,
                                D3DX_FILTER_NONE,
                                D3DCOLOR_XRGB(theRGB.r,theRGB.g,theRGB.b),0,0,&lpTexture);

theRGB setzt die transparente Farbe fest.
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 11:30    Titel: Antworten mit Zitat

Wenn ich mich richtig erinnere unterstützt StrechRect() keine Alphakanäle. Ihr könntet z.B. mit dem Sprite-Interface arbeiten oder auch ein Rechteck aus zwei Dreiecken aufbauen und das Texturieren.

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 12:04    Titel: Antworten mit Zitat

Bei mir geht das auch so nicht:
Code:
    // Offscreen-Surface anlegen
    own_lp3DDevice->CreateOffscreenPlainSurface(
                                        own_width,      // Breite der Oberfläche
                                        own_height,      // Höhe   der Oberfläche
                                        D3DFMT_A8R8G8B8,    // Format
                                        D3DPOOL_DEFAULT,    // Pool
                                        &own_Surface,      // Zeiger auf die Oberfläche
                                        0);                 // Handle muss 0 sein

Code:

   own_lp3DDevice->ColorFill(own_Surface,NULL,own_bgcolor);

   DD_2D_Graphics.Text(x,y,own_textcolor,own_text,own_Surface);

DD_2D_Graphics.Text ist eine TextEngine laut Zerbst. Indem ich nur die Pixel übermale die ich verändern muss. Also mit LockRect ...

own_bgcolor kriegt den Wert D3DCOLOR_ARGB(0,0,0,0)

Oder unterstützt ColorFill auch kein ALpha? Sad
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
FanBoy
Mini JLI'ler



Anmeldedatum: 21.07.2003
Beiträge: 33

Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 12:41    Titel: Antworten mit Zitat

Tja, schade eigentlich...
Jetzt scheitert das alles an StrechRect...
Mit Sprites arbeiten kommt beim Hintergrund eher nicht in Frage, dafür sind die Beschränkungen in Größe und Form zu heftig.
Und das mit den zwei texturierten Dreiecken würde Direct3D vorraussetzen und soweit bin ich eigentlich noch nicht...
Naja, vielleicht wage ich den Sprung mal. DX9 ist wirklich ein bisschen 2D Feindlich... wahrscheinlich sind die Zeiten wirklich vorbei.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 13:06    Titel: Antworten mit Zitat

Das Sprite-Interface arbeitet intern auch mit Dreiecken und Texturen. Es ist nicht kompliziert das selbst zu machen. Andererseits ist es auch kein Problem das Sprite Interface zu nutzen. Z.B. den oberen Teil des Hintergrunds (Himmel, Wolken) mit StrecthRect und die Berge dann aus 4 256*256 Texturen (Sprites) mit Alphakanal bauen? Warum sollte das nicht gehen?

Christian
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
FanBoy
Mini JLI'ler



Anmeldedatum: 21.07.2003
Beiträge: 33

Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 15:26    Titel: Antworten mit Zitat

Du hast natürlich Recht =)

Aber es ist ein bisschen umständlich, mit Surfaces würde man einfach zwei Ebenen des Hintergrund malen. Mit Sprites muss man viele kleine Bilchen malen, man muss im Code angeben wo sie erscheinen sollen... alles nicht so leicht.
ABER: Weil mir auch keine andere Lösung einfällt habe ich es übrings ungefähr so gemacht wie du gesagt hast. Ich hab jetzt zwei Surfacehintergründe und da wo die Überschneidungen wären, verwende ich Sprites...
Muss man halt nur einen leistungsfähigen Leveleditor dazu schreiben, der das Arbeiten damit vereinfacht.
Problem gelöst THX@ALL =)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik 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