Problem mit der Draw3D

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Der Eisvogel

Betreff: Problem mit der Draw3D

BeitragSa, Jul 19, 2008 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo bei folgendem Code werden die Bilder leider immer Halbtranzparent auf den Hintergrund gemalt. Crying or Very sad
Code: [AUSKLAPPEN]
Function Bilder(typ)
ColorG3D
ordner=ReadDir("data\images\seehundbank\")
.start
name$=NextFile(ordner)
DebugLog name$
If name$="." Or name$=".." Or name$="Thumbs.db" Then Goto start
DrawImage3D LoadImage3D("data\images\seehundbank\"+name$),0,0
RenderWorld
Clear3D
Flip 0
WaitKey
If Not KeyHit(1) Then Goto start
End Function


Ich habe keine Ahnung warum.
Immer mal wieder passiert mir sowas, das Bilder Tranzparent gezeichnet werden, was nervt.

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Jul 20, 2008 10:01
Antworten mit Zitat
Benutzer-Profile anzeigen
- Probleme, die nichts mit der Draw3D zu tun haben:

Da du in dieser Funktion nur die Bilder lädst aber kein Handle der Bilder speicherst, wirst du so lange das Programm läuft, keines dieser Bilder mehr mit FreeImage3D freigeben können. Dieses führt irgendwann zum Speicherüberlauf des Grafikspeichers.

Noch ein Problem, wenn man Sachen in der Funktion lädt, sollte das Handle über Return zurück gegeben werden. Da Return aber nur einen Wert ''versenden'' kann, sollten auch nicht mehrere Sachen in einer Funktion geladen werden. Das zurückgegebene Handle muß natürlich dann beim Funktionsaufruf gespeichert werden.


- Probleme die z.T. mit der Draw3D zu tun haben:

Da sowohl DrawImage3D als auch LoadImage3D bzw. nahezu alles bei der Draw3D Funktionen sind, sollte es in Klammern stehen und so aussehen:

ColorG3D() oder zur besseren Übersicht ColorG3D(255,255,255,1)
DrawImage3D (LoadImage3D("data\images\seehundbank\"+name$),0,0)

Tipp: Die Standardvorgabe ist LoadImage3D( Datei$, mode%, blend% ). Wenn nun die Bilder kein eigenen Alphachannel haben, werden dunklere Stellen transparenter gezeichnet. Daher hast du immer teiltransparente Bilder zu sehen bekommen. Da kaum welche Programme Aplhachannelbearbeitung unterstüzt, habe ich den mode=3 erstellt. Dieser lädt das Bild und belegt ein Komplettalpha über das ganze Bild. Danach erscheint es nur (komplett gleichmässig) transparent wenn man es mit ColorG3D() auch ensprechend angibt.


- Wenn ich es richtig erkenne, dann müßte es so in etwa richtig sein:

Code: [AUSKLAPPEN]
Function Bilder(typ)
   Local Ordner
   Local Name$
   Local Image
   ColorG3D
   
   FreeImage3D(typ)
   
   Ordner=ReadDir("data\images\seehundbank\")
   
   Repeat
      Name=NextFile(Ordner)
      DebugLog Name
      
      If Lower$(Right$(Name,4))=".png" Then
         FreeImage3D(Image)
         Image=LoadImage3D("data\images\seehundbank\"+Name$,3,2)
         DrawImage3D(Image,0,0)
         RenderWorld
         Clear3D
         Flip 0
         WaitKey
      End If
   Until Not KeyHit(1)
   Return Image
End Function


Der Funktionsaufruf sollte dann das Image zwischenspeichern, welches man ausgewählt hat und entsprechend wie folgt aufgerufen werden:

Code: [AUSKLAPPEN]
Bild=Bilder(Bild)


Damit nie mehrfach geladene und unbenutzte Bilder im Speicher rumlungern.

Ausserdem ist das ganz komplett on the fly von mir erstellt. Also nichts per Laufzeit getestet.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group