[B3D] Sky(hauben)generator
Übersicht

![]() |
hecticSieger des IS Talentwettbewerb 2006Betreff: [B3D] Sky(hauben)generator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie ich bereits in einem anderem Beitrag versprochen habe, stelle ich mal den Code zu meinem Sky-'Hauben'-Generator hier ein.
Wie der Name schon sagt, wird eine art Skybox erstellt, die aber nur die Hälfte einer kompletten Skybox beinhaltet. Es ist nämlich in den meisten Fällen, garnicht notwendig eine komplette Skybox zu erstellen, da man es eh nie ganz sehen kann. Vorteile: - Etwas schneller (ja, ja, ich weiß) da weniger 'Fillrate' gezeichnet werden muß. - Textur hat verzehrbedingt die Eigenschaft, dass zum Horizont hin die Auflösung zunimmt. - Textur wird komplett genutzt. Keine Leerstellen bzw. nur eine Textur daher Singlesurface. Nachteile: - Die Handhabung ist etwas schwieriger, da die abfallenden Flächen schräg sind und somit große Höhenunterschiede vom Betrachter eher auffallen als bei einer gewöhnlichen Skybox. Handhabung: Zunächst mal muß eine Skybox bereits vorhanden sein. Also jeweils ein Bild vorne, rechts, hinten, links und oben. Dann sollten die mit den Namen von 1.bmp bis 5.bmp im selben Verzeichnis des Editors rumfliegen oder man ändert einfach die Zeilen im Code. Einmal gestartet kann man die Endtexturgröße angeben. Diese sollte sinniger weise nicht größer sein, als die Kantenlänge der Quellbilder. Im ersten Schritt (ausser man hat '[4] nur ansehen' gewält) im Edit-Modus kann man mit den Tasten 1-5 jedweilige Unklarheiten der Rotation einzelner Bilder korrigieren. Mit A und Y kann man eventuelle Ungereimheiten zwischen zweier Bilder (sichtbare Kante oder Überlappung) korrigieren. Mit ESC gelangt man dann in den View-Modus, wo man sein Werk betrachten kann. Zusätzlich kann man mit den Maustasten ranzoomen, um bestimmte 'Fehler' besser erkennen zu können. Hier ein Beispiel, wie sowas aussieht (sorry wegen dem Urheberrecht, aber mein Contestgewinnsponsor verlangt es von mir so, dass seine Bilder anderen nicht zur Verfügung gestellt werden): ![]() Hier geht's zum Code: [AUSKLAPPEN] ;skypacker-by-hectic
; ; ; Graphics 256,128,0,2 SetBuffer FrontBuffer() Text 128,16,"Endtexturformat wählen",1 Text 64,48,"[1] 256×256" Text 64,64,"[2] 512×512" Text 64,80,"[3] 1024×1024" Text 64,96,"[4] nur ansehen" .meno FlushKeys WaitKey If KeyHit(1) End If KeyHit(2) size=256 If KeyHit(3) size=512 If KeyHit(4) size=1024 If KeyHit(5) Goto show If size=0 Goto meno ;Grafik-Einstellung Graphics3D size,size,0,2 SetBuffer BackBuffer() ;Kamera-Einstellung camera=CreateCamera() CameraZoom camera,.5 CameraRange camera,.1,2000 PositionEntity camera,0,0,-.5 RotateEntity camera,0,0,0 ;Sprites-Laden sprite1=LoadSprite("1.bmp",260) sprite2=LoadSprite("2.bmp",260) sprite3=LoadSprite("3.bmp",260) sprite4=LoadSprite("4.bmp",260) sprite5=LoadSprite("5.bmp",260) ;Sprite-Darstellung SpriteViewMode sprite1,2 SpriteViewMode sprite2,2 SpriteViewMode sprite3,2 SpriteViewMode sprite4,2 SpriteViewMode sprite5,2 ;Grund-Positionen PositionEntity sprite1,0,-1,0 PositionEntity sprite2,+1,0,0 PositionEntity sprite3,0,+1,0 PositionEntity sprite4,-1,0,0 PositionEntity sprite5,0,0,+1 ;Standard-Rotation RotateEntity sprite1,90,0,0 RotateEntity sprite2,0,-90,90 RotateEntity sprite3,-90,0,180 RotateEntity sprite4,0,90,-90 RotateEntity sprite5,0,0,-90 ;Skallierungs-Vorgaben If size=1024 scal#=1.002 If size=512 scal#=1.004 If size=256 scal#=1.002 ;Edit-Schleife While Not KeyHit(1) ;Tastaturabfrage If KeyHit(2) TurnEntity sprite1,0,0,-90 If KeyHit(3) TurnEntity sprite2,0,0,-90 If KeyHit(4) TurnEntity sprite3,0,0,-90 If KeyHit(5) TurnEntity sprite4,0,0,-90 If KeyHit(6) TurnEntity sprite5,0,0,-90 If KeyHit(30) scal=scal+.001:If scal>1.1 scal=1.1 If KeyHit(44) scal=scal-.001:If scal<1 scal=1 ;Sprite-Skallierung ScaleSprite sprite1,scal,scal ScaleSprite sprite2,scal,scal ScaleSprite sprite3,scal,scal ScaleSprite sprite4,scal,scal ScaleSprite sprite5,scal,scal ;3D-Kramm RenderWorld ;Kontrast Color 0,0,0 Origin size/2-4,size/2-5 Rect -100,12-size/2,200,15,1 Rect 0,+size/3,11,15,1 Rect +size/3,0,11,15,1 Rect 0,-size/3,11,15,1 Rect -size/3,0,11,15,1 Rect 0,0,11,15,1 ;Anzeige Color 255,255,255 Origin size/2-3,size/2-4 Text 0,12-size/2,"[A/Y] Skallierung: "+scal,1 Text 0,+size/3,"1" Text +size/3,0,"2" Text 0,-size/3,"3" Text -size/3,0,"4" Text 0,0,"5" Flip Wend ;2D-Bereinigen RenderWorld Origin 0,0 Flip ;Aufnahme-Bild-Erstellen bild=CreateImage(size,size) ;Aufnahme-Tätigen GrabImage bild,0,0 ;Aufnahme-Speichern save=SaveImage(bild,"skygen.bmp") ;Sprites-Freigeben FreeEntity sprite1 FreeEntity sprite2 FreeEntity sprite3 FreeEntity sprite4 FreeEntity sprite5 .show ;Grafik-Einstellung Graphics3D 800,600,32,1 SetBuffer BackBuffer() ;Kamera-Einstellung camera=CreateCamera() PositionEntity camera,0,2,0 RotateEntity camera,0,90,0 CameraZoom camera,1 ;Sky-Mesh-Erstellen sky_mesh=CreateMesh() skytex=LoadBrush("skygen.bmp",0,6,6) sky_face=CreateSurface(sky_mesh,skytex) AmbientLight 255,255,255 EntityFX sky_mesh,.5 ;Sky-Mesh-Zusammen-Stellen v0=AddVertex(sky_face,-3,0,-3,0,6) v1=AddVertex(sky_face,-3,0,+3,0,0) v2=AddVertex(sky_face,+3,0,+3,6,0) v3=AddVertex(sky_face,+3,0,-3,6,6) v4=AddVertex(sky_face,-1,1,-1,2,4) v5=AddVertex(sky_face,-1,1,+1,2,2) v6=AddVertex(sky_face,+1,1,+1,4,2) v7=AddVertex(sky_face,+1,1,-1,4,4) ;Sky-Mesh-Triangulieren AddTriangle(sky_face,v1,v0,v4) AddTriangle(sky_face,v1,v4,v5) AddTriangle(sky_face,v2,v1,v5) AddTriangle(sky_face,v2,v5,v6) AddTriangle(sky_face,v3,v2,v6) AddTriangle(sky_face,v3,v6,v7) AddTriangle(sky_face,v0,v3,v7) AddTriangle(sky_face,v0,v7,v4) AddTriangle(sky_face,v5,v4,v7) AddTriangle(sky_face,v7,v6,v5) ;Sky-Mesh-Standard-Größe ScaleMesh sky_mesh,200,200,200 PositionEntity sky_mesh,0,-2,0 ;Schönheit CreateMirror plane=CreatePlane() EntityColor plane,112,112,112 EntityAlpha plane,.75 ;View-Schleife While Not KeyHit(1) xw=xw-MouseXSpeed() yw=yw+MouseYSpeed() If yw<-90 yw=-90 If yw>90 yw=90 If MouseDown(1) MoveEntity camera,0,0,-1 If MouseDown(2) MoveEntity camera,0,0,1 If EntityY(camera)<2 TranslateEntity camera,0,1,0 If KeyDown(57) w#=w#+.01 RotateEntity camera,0,xw+w,0 TurnEntity camera,yw,0,0 MoveMouse 100,100 RenderWorld Flip Cls Wend End |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group