Wie mache ich eine Skybox?

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

sven123

Betreff: Wie mache ich eine Skybox?

BeitragFr, Okt 22, 2004 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun ist jetzt zwar ne absolute Nooby Frage aber es muss sein!Das ihr seht das ich hier nicht nur um Ideen schnorre,ich habe mir schon einige gedanken zu diesem Thema gemacht,doch sieht das ergebnis nicht so wirklich gut aus.Ich habe eine große Flache Kugel erzeugt zum Test mit den Haustexturen belegt un sie über das Terrain gestellt.Das Problem!Am Horizont sieht man keinen Himmel das ist unrealistisch,wie schaffe ich es das auch noch mein Horizont ne Himmel Textur hat.Hier mal der bisherige Code:Auserdem funktioniert noch immer nicht die Kollision zwischen Terrain und Flieger aber ich weis nicht warum?Code: [AUSKLAPPEN]

SetBuffer BackBuffer()
;Laden der Texturen und Meshs
terrain=LoadTerrain("f:\newheightmap.bmp")
text1=LoadTexture("C:\Programme\Blitz 3D\Tools\Textures\Urban\Urb009.bmp")
haus=LoadTexture("f:\glass30.bmp")
Mesh=LoadMesh ("f:\3dModeller\Hand.3ds")
Gebaude=LoadMesh ("f:\hhouse.x")
flieger=LoadMesh ("f:\Flieger.3ds")
;Globals für die Kollision
Global Feld=1
Global player=2
;Objekt richtig drehen
TurnEntity flieger,-90,0,90
;Erstellen eines Pivot für die Kollision
pivot=CreatePivot()
sky=CreateSphere()
EntityRadius pivot,0.2
PositionEntity  pivot,3000,1000,6000
ScaleEntity     sky,6000,500,6000
PositionEntity  sky,8000,8000,6000
;Das Terrain erstellen und Texturieren
EntityTexture terrain,text1,0,0
ScaleEntity terrain,100,200,100
ScaleTexture text1,100,200
;Spielfigur posizionieren
PositionMesh flieger,-8000,-5000,2000
TerrainDetail terrain,8000,True
;Position der Hand 
PositionMesh Mesh,4000,800,8000
;Position des Hauses
PositionMesh Gebaude,6000,30,9000
;Die Textur des Hauses bearbeiten und verwenden
RotateTexture  haus,180
EntityTexture Gebaude,haus
EntityTexture sky,haus
;;;;;;;;;;;;;;;;;;;;;;;;;;------Die Eintsellung der Kamera auf Thirdperson sicht
;;
;;
;Kameravoreinstellungen   
cam=CreateCamera()
PositionEntity cam,5100,2050,8075
CameraRange cam,1,80000
light=CreateLight()
TurnEntity light,45,45,0
;Einstellungen für die Sicht
TurnEntity cam,10,106,0
EntityParent pivot,cam
EntityParent flieger,cam
PositionEntity cam,3007,1025,5845
TurnEntity cam,0,-90,0
;Kollisionsabfrage 
EntityType terrain,Feld
EntityType pivot,player
Collisions player,Feld,2,1
;Steuerung des Spieler und der Cam
;;;;;;;;;;;;;;;;;;;;-------Hauptschleife
While Not KeyHit(1)
;Mausabfrage 
RotateEntity cam,EntityPitch(cam)+MouseYSpeed(),EntityYaw(cam)-MouseXSpeed(),0 ;muss immer mesh parent sein!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
If KeyDown(200)=1 Then MoveEntity cam,0,0,20
If KeyDown(203)=1 Then MoveEntity cam,-20,0,0
If KeyDown(205)=1 Then MoveEntity cam,20,0,0
If KeyDown(208)=1 Then MoveEntity cam,0,0,-20
UpdateWorld
RenderWorld
Flip
Wend
ClearWorld
End
Amd Athlon 2200+,Saphire Atlantis Radeon9800pro,1024 MB DDR RAm,40 Gb Festblatte.
'in shâ'a llâh=so Gott will
Fertiges Projekt:Invasion der Heuschrecken
 

Dreamora

BeitragFr, Okt 22, 2004 22:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Skybox:

Einen grossen Würfel machen der das Terrain vollständig umgibt. Dessen Facenormalen nach innen stülpen und ihn mit dem Himmel texturieren.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Lord_Vader

BeitragFr, Okt 22, 2004 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Den himmel kannste mit Terragen super machenn...schnarchh.. Die frage war aber überflüssig da es letztens erst einen thread gab!
 

sven123

BeitragFr, Okt 22, 2004 23:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry ich hätte doch die suche zu erst bemühen sollen?
Amd Athlon 2200+,Saphire Atlantis Radeon9800pro,1024 MB DDR RAm,40 Gb Festblatte.
'in shâ'a llâh=so Gott will
Fertiges Projekt:Invasion der Heuschrecken
 

sven123

BeitragFr, Okt 22, 2004 23:47
Antworten mit Zitat
Benutzer-Profile anzeigen
@Dreamora wahrscheinlich soll ich die Facenormalen mit scalentity eínziehen oder wie habe ich das zu verstehen?



Thx at all
Amd Athlon 2200+,Saphire Atlantis Radeon9800pro,1024 MB DDR RAm,40 Gb Festblatte.
'in shâ'a llâh=so Gott will
Fertiges Projekt:Invasion der Heuschrecken
 

Dreamora

BeitragFr, Okt 22, 2004 23:50
Antworten mit Zitat
Benutzer-Profile anzeigen
flipmesh
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

sven123

BeitragSa, Okt 23, 2004 12:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Cool jetzt gehts allerdings merkt man dem Himmel immer noch stark an das er eigentlich ein Würfel ist.Wie bekomme ich die Kanten weg?Wie kann ich verschieden Texturen auf die Würfel Fächen auftragen?
Amd Athlon 2200+,Saphire Atlantis Radeon9800pro,1024 MB DDR RAm,40 Gb Festblatte.
'in shâ'a llâh=so Gott will
Fertiges Projekt:Invasion der Heuschrecken
 

INpac

BeitragSa, Okt 23, 2004 13:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hiho

Seit dem Cubemapping da ist, kannste Skyboxes (die 12 polys benutzen, bei 6 Texturen, werden's sogar 6 Surfaces!) wegfallen lassen, und über Cubemapping ein Sprite die Box faken lassen, das geht so:

du erstellst ein sprite, hängst es an die camera, skalierst es so, dass es den ganzen bildschirm ausfüllt, setzt die z-order auf 1.
So.
Dann lädst du eine Texture, die alle 6 Seiten deines SkyWürfels beinhaltet, (die Reihenfolge richtet sich nach der Reihenfolge des Commands von SetCubeFace > onlinehelp!) jeder Frame muss gleich groß sein. Die Texture lädst du dann mit dem Flag 128 (aber diesmal ohne 256, weil VRAM in diesem Fall langsamer wäre!), Blitz3D rechnet sich selbst aus, wie groß jeder Frame ist.
So.
Dann solltest du noch über SetCubeMode die geladene CubeTexure auf Modus 3 setzen, und dann die Texture auf das Sprite kleben!

Fertig Smile
 

sven123

BeitragSa, Okt 23, 2004 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal danke Inpac.
Zu1 die z-Order verändere ich mit entityorder oder,der Befehl setcubeface funktioniert bei mir nicht ich habe aber die version 1.87
Amd Athlon 2200+,Saphire Atlantis Radeon9800pro,1024 MB DDR RAm,40 Gb Festblatte.
'in shâ'a llâh=so Gott will
Fertiges Projekt:Invasion der Heuschrecken

Phalastos

BeitragSo, Okt 31, 2004 10:34
Antworten mit Zitat
Benutzer-Profile anzeigen
@INpac

Zitat:
Die Texture lädst du dann mit dem Flag 128 (aber diesmal ohne 256, weil VRAM in diesem Fall langsamer wäre!)


Wann / Warum sollte man VRAM nicht benutzen?

Gruß

Alex
Forbiddenmagic - Warfare of Forgotten Power
 

David

BeitragSo, Okt 31, 2004 10:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Wenn du die Skybox mit dem Spieler mitbewegst, muss sie nichtmal besonders groß sein. Wichtig ist, das du vor dem Zeichnen den Z- oder W-Buffer ausschaltest, sodass die Box immer hinter alle anderen Objekte gezeichnet wird.

grüße
http://bl4ckd0g.funpic.de
 

David

BeitragMo, Nov 01, 2004 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Guckma hier...

Code: [AUSKLAPPEN]

Graphics3D 640, 480, 32
SetBuffer BackBuffer()

Global g_Camera = CreateCamera()
Global g_SkyBox = CreateSkyBox()

Global cube = CreateCube()
Global light = CreateLight()

EntityColor( cube, 255, 0, 0 )
PositionEntity( cube, 0, 0, 5 )

While Not KeyHit( 1 )
   UserInput()
   
   RenderWorld
   Flip
   Cls
Wend

End

Function UserInput()
   PositionEntity( g_Camera, EntityX( g_Camera ), EntityY( g_Camera ), EntityZ( g_Camera ) )
   
   RotateEntity( g_Camera, EntityPitch( g_Camera ) + MouseYSpeed(), EntityYaw( g_Camera ) - MouseXSpeed(), EntityRoll( g_Camera ) )
   RotateEntity( g_SkyBox, 0, 0, 0 )

   If ( EntityPitch( g_Camera ) < -70 )
      RotateEntity( g_Camera, -70, EntityYaw( g_Camera ), EntityRoll( g_Camera ) )
   ElseIf ( EntityPitch( g_Camera ) > 70 )
      RotateEntity( g_Camera, 70, EntityYaw( g_Camera ), EntityRoll( g_Camera ) )
   EndIf

   If ( MouseX() < 2 ) Then
      MoveMouse( GraphicsWidth() - 2, MouseY() )
   ElseIf ( MouseX() > GraphicsWidth() - 2 )
      MoveMouse( 1, MouseY() )
   End If
   
   If ( MouseY() < 2 ) Then
      MoveMouse( MouseX(), GraphicsHeight() - 2 )
   ElseIf ( MouseY() > GraphicsHeight() - 2 )
      MoveMouse( MouseX(), 1 )
   End If
   
   If ( KeyDown( 200 ) )
      MoveEntity( g_Camera, 0, 0, 0.5 )
   Else If ( KeyDown( 208 ) )
      MoveEntity( g_Camera, 0, 0, -0.5 )
   End If
   
   If ( KeyDown( 203 ) )
      MoveEntity( g_Camera, -0.5, 0, 0 )
   Else If ( KeyDown( 205 ) )
      MoveEntity( g_Camera, 0.5, 0, 0 )
   End If
   
   PositionEntity( g_SkyBox, EntityX( g_Camera ), EntityY( g_Camera ), EntityZ( g_Camera ) )
End Function

Function CreateSkyBox()
   Mesh = CreateMesh()
   
   Brush = LoadBrush( "Snow/negz.jpg", 49 )
   Surface = CreateSurface( Mesh, Brush )
   AddVertex( Surface, -1, +1, -1, 0, 0 )
   AddVertex( Surface, +1, +1, -1, 1, 0 )
   AddVertex( Surface, +1, -1, -1, 1, 1 )
   AddVertex( Surface, -1, -1, -1, 0, 1 )
   AddTriangle( Surface, 0, 1, 2 )
   AddTriangle( Surface, 0, 2, 3 )
   FreeBrush( Brush )
   
   Brush = LoadBrush( "Snow/negx.jpg", 49 )
   Surface = CreateSurface( Mesh, Brush )
   AddVertex( Surface, +1, +1, -1, 0, 0 )
   AddVertex( Surface, +1, +1, +1, 1, 0 )
   AddVertex( Surface, +1, -1, +1, 1, 1 )
   AddVertex( Surface, +1, -1, -1, 0, 1 )
   AddTriangle( Surface, 0, 1, 2 )
   AddTriangle( Surface, 0, 2, 3 )
   FreeBrush( Brush )
   
   Brush = LoadBrush( "Snow/posz.jpg", 49 )
   Surface = CreateSurface( Mesh, Brush )
   AddVertex( Surface, +1, +1, +1, 0, 0 )
   AddVertex( Surface, -1, +1, +1, 1, 0 )
   AddVertex( Surface, -1, -1, +1, 1, 1 )
   AddVertex( Surface, +1, -1, +1, 0, 1 )
   AddTriangle( Surface, 0, 1, 2 )
   AddTriangle( Surface, 0, 2, 3 )
   FreeBrush( Brush )
   
   Brush = LoadBrush( "Snow/posx.jpg", 49 )
   Surface = CreateSurface( Mesh, Brush )
   AddVertex( Surface, -1, +1, +1, 0, 0 )
   AddVertex( Surface, -1, +1, -1, 1, 0 )
   AddVertex( Surface, -1, -1, -1, 1, 1 )
   AddVertex( Surface, -1, -1, +1, 0, 1 )
   AddTriangle( Surface, 0, 1, 2 )
   AddTriangle( Surface, 0, 2, 3 )
   FreeBrush( Brush )
   
   Brush = LoadBrush( "Snow/posy.jpg", 49 )
   Surface = CreateSurface( Mesh, Brush )
   AddVertex( Surface, -1, +1, +1, 0, 1 )
   AddVertex( Surface, +1, +1, +1, 0, 0 )
   AddVertex( Surface, +1, +1, -1, 1, 0 )
   AddVertex( Surface, -1, +1, -1, 1, 1 )
   AddTriangle( Surface, 0, 1, 2 )
   AddTriangle( Surface, 0, 2, 3 )
   FreeBrush( Brush )
   
   Brush = LoadBrush( "Snow/negy.jpg", 49 )
   Surface = CreateSurface( Mesh, Brush )
   AddVertex( Surface, -1, -1, -1, 1, 0 )
   AddVertex( Surface, +1, -1, -1, 1, 1 )
   AddVertex( Surface, +1, -1, +1, 0, 1 )
   AddVertex( Surface, -1, -1, +1, 0, 0 )
   AddTriangle( Surface, 0, 1, 2 )
   AddTriangle( Surface, 0, 2, 3 )
   FreeBrush( Brush )
   
   FlipMesh( Mesh )
   EntityOrder( Mesh, 10 )
   ScaleEntity( Mesh, 5, 5, 5 )
   EntityFX( Mesh, 1 )
   
   Return Mesh
End Function


Grafiken kannst du hier runterladen.

grüße
http://bl4ckd0g.funpic.de

Chester

BeitragMo, Nov 01, 2004 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
was kleines nebenbei..... :

Warum nimmt man, da nich ein "SkySphere"...

Das wäre meiner Meinung einfacher....
 

David

BeitragMo, Nov 01, 2004 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Jo, is aber nich besonders schön... wie ich finde.
Und ob es einfacher ist sei dahingestellt...

grüße
http://bl4ckd0g.funpic.de
 

INpac

BeitragMo, Nov 01, 2004 17:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Phalastos hat Folgendes geschrieben:
@INpac

Zitat:
Die Texture lädst du dann mit dem Flag 128 (aber diesmal ohne 256, weil VRAM in diesem Fall langsamer wäre!)


Wann / Warum sollte man VRAM nicht benutzen?

Gruß

Alex


VRAM ist nur dann sinnvoll, wenn die Texture oft verarbeitet wird, (ich glaube) durch das Speichern im Videoram ist ein schnellerer Zugriff möglich oder die Bearbeitung, Smile

Jedenfalls kannste VRAM auch dann zB benutzen, wenn du eine andere "normale" texture in echtzeit neu berechnset, muss also nicht cubemapping sein
 

sven123

BeitragDi, Nov 02, 2004 11:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mir jetzt ne skybox gebastelt!Diese ist einfach ne riesige Kugel mit Himmelstextur aber irgendwie sieht das ein bischen verwaschen und komisch aus.Habt ihr vieleicht ein paar Tips wie ich das verbessern kann.


user posted image
Amd Athlon 2200+,Saphire Atlantis Radeon9800pro,1024 MB DDR RAm,40 Gb Festblatte.
'in shâ'a llâh=so Gott will
Fertiges Projekt:Invasion der Heuschrecken

Phalastos

BeitragDi, Nov 02, 2004 12:48
Antworten mit Zitat
Benutzer-Profile anzeigen
@INpac

Oha, danke Dir.

P.S. Nen Screen von der Cubemapping Skybox würde mich brennend interessieren. Very Happy

Gruß

Alex
Forbiddenmagic - Warfare of Forgotten Power
 

David

BeitragDi, Nov 02, 2004 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

@Sven: Warum eine rießige Kugel? Ne kleine tuts doch auch...

grüße
http://bl4ckd0g.funpic.de
 

INpac

BeitragDi, Nov 02, 2004 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Phalastos hat Folgendes geschrieben:
@INpac

Oha, danke Dir.

P.S. Nen Screen von der Cubemapping Skybox würde mich brennend interessieren. Very Happy

Gruß

Alex


AE benutzt Cubemapping-Sky"boxes", ebenso Timemill ... eine der älteren Versionen hat es jedenfalls verwendet Smile
Du siehst, wenn du eine passende Texture hast, keinen Unterschied zur SkyBox!

@Sven, warum denn kein Cubemapping-Sky?
 

sven123

BeitragDi, Nov 02, 2004 15:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm ich habs irgendwie nicht so ganz auf die Reihe gekriegt,zweitens experimentiere ich noch nen bischen rum.
@Inpac hast du jetzt zeit dir mal meinen Code mit der Kollision,den ich dir zu geschickt habe,durch zu lesen.
Amd Athlon 2200+,Saphire Atlantis Radeon9800pro,1024 MB DDR RAm,40 Gb Festblatte.
'in shâ'a llâh=so Gott will
Fertiges Projekt:Invasion der Heuschrecken

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group