Seite 1 von 1

Sprites bzw. 2D-Bilder in 3D Umgebung ?

Verfasst: 14.12.2010 13:07
von Misantropius
Gibt es eigentlich eine Möglichkeit 2D-Grafiken in einer 3D-Umgebung einzufügen, also z.B. einem Terrain, ähnlich wie ein Pappaufsteller, der aber immer mit der Front zur Kamera zeigt und nur in seiner Größe abhängig von seiner Entfernung varriert ? Wenn ja, wie geht daß ? Würde mich über ein Script-Beispiel z.B. in Bezug zum Beispielsprogramm "Terrain.pb" freuen. Ziel wäre es z.B. ein gemaltes 2D-Männchen auf weißem Hintergrund in JPG-Datei in dieses 3D-Terrain zu stellen !
Würde mich über einen Tip freuen !

Re: Sprites bzw. 2D-Bilder in 3D Umgebung ?

Verfasst: 14.12.2010 13:28
von STARGÅTE
Hilfe nicht gelesen ?

PureBasic - Billboard
Billboards sind 3D-Ebenen (zusammengesetzt aus 2 Dreiecken), welche sich immer vor der Kamera befinden. Billboards sind nützlich, um schnell eine große Anzahl an Elementen - wie Regen, Schnee, Bäume, Vegetation oder Partikel-basierende Effekte - darzustellen.
btw: Willkommen im Forum

Re: Sprites bzw. 2D-Bilder in 3D Umgebung ?

Verfasst: 14.12.2010 16:22
von Misantropius
Ja, danke für den Wink mit den Billboards ! :D Habe inzwischen erfolgreich das 2D-Bild in eine 3D-Welt integrieren können.
Würde jetzt aber gerne die weißen Hintergründe des 2D-Bilder durchsichtig machen. Irgendeine Idee ?

Re: Sprites bzw. 2D-Bilder in 3D Umgebung ?

Verfasst: 14.12.2010 19:34
von STARGÅTE
Du solltest dafür das PNG-Bildformat nutzen mit vollen 32Bit , dort hast du dann einen Alpha-Channel welcher dann angibt ob eine Farbe sichtbar ist oder nicht ...

Re: Sprites bzw. 2D-Bilder in 3D Umgebung ?

Verfasst: 14.12.2010 21:30
von Misantropius
Ja, danke. Habe davon auch vorher schon gelesen, aber irgendwie krieg ich das nich hin. Habe bisher wenig Erfahrung mit den
Malprogrammen wie GIMP oder MtPaint. Mir ist zwar bewußt, das es diesen Alphawert gibt, aber selbst nach viel Gefummel hats irgendwie nicht hingehauen und ne vernünftige Hilfe-Funktion gibts da irgendwie auch nicht. Würde mich freuen, wenn mir als Zeichenlprogramm-Anfänger mal einer schrittweise sagen kann z.B. bei GIMP, wie ich einen Hintergrund transparent mache, damit das Ganze in der 3D-Welt nicht mehr zu sehen ist.

Re: Sprites bzw. 2D-Bilder in 3D Umgebung ?

Verfasst: 14.12.2010 22:13
von Bisonte
Ganz banal ...

Gimp - Menueleiste -> Ebene -> Transparenz -> z.B. Farbe zu Transparenz

Da kannste mal mit experimentieren ;)

Re: Sprites bzw. 2D-Bilder in 3D Umgebung ?

Verfasst: 14.12.2010 22:30
von NicTheQuick
Vorher vielleicht noch mit dem Zauberstab die weiße Fläche auswählen und mit dem Auswahl-Menü ein kleines Stückchen erweitern, dann erst Farbe-zu-Transparenz machen. Falls der Menüpunkt ausgegraut ist, musst du vorher den Alphakanal erst hinzufügen. Das müsste im Menü Farben oder Kanäle oder sowas sein.

Re: Sprites bzw. 2D-Bilder in 3D Umgebung ?

Verfasst: 14.12.2010 22:37
von mpz
Hi,

ich habe mal mit meiner Engine ein kleines Programm geschrieben was eine png Datei mit Alphachannel erzeugt. Du lädst deine "rgb" Grafik ein, die auf einem Rechteck angezeigt wird. Die zweite Grafik muss genausogross sein wie die erste Grafik, aber alle "Farben" werden in Graustufen verwandelt und als Alpha Eben integriert. D.h. Du malt in Schwarz was durchscheinen soll und je heller das Grau desto undurchsichtiger (Ich hoffe die Erklärung kapiert jemand ;) ). Danach als png speichern.

http://www.file-upload.net/download-304 ... l.exe.html

Gruß Michael

Quellcode falls es jemand interessiert, man benötigt aber die mp3d

Code: Alles auswählen

;////////////////////////////////////////////////////////////////
;//
;// Project Title: MP 3D Engine Beispielprogramme
;// Dateiname: MP_CreatePNGwithAlphaChannel.pb
;// Erstellt am: 14.12.2010
;// Update am  : 
;// Author: Michael Paulwitz
;// 
;// Info: 
;// Create a png file with alphachannel. You load a rgb grafic and load a second grafic for greyscales inage.
;// Both images must have the same size Bl
;//
;//
;////////////////////////////////////////////////////////////////


;- ProgrammStart

MP_Graphics3D (640,480,0,3) ; Erstelle ein WindowsFenster #Window = 0
SetWindowTitle(0, "Create Alpha Textur") 

  If CreateMenu(0, WindowID(0)) ; Menü erstellen/Create Menu 
    MenuTitle("load / save grafic")
      MenuBar()
      MenuItem( 1, "Load RGB grafic") 
      MenuItem( 2, "Load Alphachannel") 
      MenuBar()
      MenuItem( 3, "Save png grafic with Alpha Channel") 
      MenuBar()
      MenuItem( 4, "Exit") 
  EndIf
  
  
  Width=256
Height=256 

If CreateImage(0, 640, 480)
  MP_CreateImageColored(0, 0, RGB(0,255,255), RGB(0,255,255), RGB(0,0,255), RGB(0,0,255))     
EndIf
Surface = MP_ImageToSurface(0,0) ; Image = 0, 
FreeImage(0)
MP_SurfaceSetPosition(Surface,0,0,1)
MP_SurfaceDestRect(Surface,0, 0, 640, 480)
  
  
camera=MP_CreateCamera() ; Kamera erstellen
light=MP_CreateLight(1) ; Es werde Licht
Mesh=MP_CreatePlane(1,1) 
MP_MeshSetAlpha(Mesh, 2) ; AlphaMode on

MP_PositionEntity (Mesh,0,0,1.4) ; Position of plane

MP_AmbientSetLight(RGB(123,22,200)) 

While Not MP_KeyDown(#PB_Key_Escape) And Not MP_WindowEvent() = #PB_Event_CloseWindow ; Esc abfrage / SC pushed?

    Select MP_WindowEvent()  ; WindowsEvent abfrage 
      Case #PB_Event_Menu 
        Select EventMenu()  ; Welches Menü? / Menuquestion 
         Case 1 ; Load RGB grafic
              Pattern$ = "Image Files (bmp,jpg,tga,png,dds,ppm,dib,hdr,pfm|*.bmp;*.jpg;*.tga;*.png;*.dds;*.ppm;*.dib;*.hdr;*.pfm" 
              directory$ = "C:\Programme\PureBasic\media\" 
              File.s = OpenFileRequester("Load RGB grafic", directory$, Pattern$,  0) 
              If File
                 MP_FreeTexture (Texture1)
                 Texture1 =  MP_LoadTexture(File.s,1)
                 
                 MP_EntitySetTexture(Mesh, Texture1) 
                 
               EndIf
         Case 2 ; Load Alphachannel grafic
              Pattern$ = "Image Files (bmp,jpg,tga,png,dds,ppm,dib,hdr,pfm|*.bmp;*.jpg;*.tga;*.png;*.dds;*.ppm;*.dib;*.hdr;*.pfm" 
              directory$ = "C:\Programme\PureBasic\media\" 
              File.s = OpenFileRequester("Load Alphachannel grafic", directory$, Pattern$,  0) 
              If File
                 MP_FreeTexture (Texture2)
                 Texture2 =  MP_LoadTexture(File.s)
                 If Not MP_CreateTextureAlpha(Texture1, Texture2)
                    MessageRequester("Cant create alphachannel grafic ", "Important both grafic must have the same size", #PB_MessageRequester_Ok)
                 EndIf  
                 MP_EntitySetTexture(Mesh, Texture1) 
                 
               EndIf
         Case 3 ; Save png grafic with Alpha Channel
              File.s = SaveFileRequester("Save grafic  as PNG", "Textur.png", "Textur Files(*.png)|*.png",  0)
              If File
                 MP_SaveTexture (File, Texture1 , 3)
               EndIf
         Case 4; end
               End
         EndSelect 
      Case #PB_Event_CloseWindow 
         End 
   EndSelect        

   MP_RenderWorld() ; Erstelle die Welt
   MP_Flip () ; Stelle Sie dar

Wend


Re: Sprites bzw. 2D-Bilder in 3D Umgebung ?

Verfasst: 14.12.2010 23:16
von Misantropius
Puuh ! Jetzt hab ich in Gimp das mal versucht und nun ist mein Hintergrund schachbrettartig gerastert. Datei hab ich als PNG gespeichert, aber leider verschwindet beim Anwenden des Bildes in PureBasic immer noch nicht der Hintergrund. Stattdessen bleibt er weiß, hat aber dafür ein paar schwarze Punkte auf dem Hintergrund, wo vorher Nix war und die Konturen haben sich auch leicht verfärbt ? Was mach ich falsch ??

Re: Sprites bzw. 2D-Bilder in 3D Umgebung ?

Verfasst: 14.12.2010 23:54
von Misantropius
Joah ! Hab mein Problem inzwischen selbst gefunden. Mußte noch den MaterialBlendingMode anwenden und schwupps hats geklappt. Jetzt würde ich nur noch gerne scharfe Konturen bekommen.....