[B3d] Kleiner Lightmapper (Jack the Mapper)
Übersicht

MrJackBetreff: [B3d] Kleiner Lightmapper (Jack the Mapper) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe mal einen kleinen Lightmapper für Objektschatten auf einen
Terrain geschrieben. Das heißt, man erstellt in Blitzbasic sein Szene oder Level und kann dann für das darunterliegende Terrain eine statische SchattenMap erzeugen. Vielleicht könnt ihr ja ein paar verbesserungsvorschläge machen, oder sogar ein paar funktionen hinzufügen... hier mal ein Beispiel, wie es aussehen kann ![]() Hier eine kurze anleitung : Funktion: makeshadow(mapfile$,terrain,xpos#,zpos#,terrsize#,resolution#,light) Parameter: mapfile = Dateiname der fertigen ShadowMap (z.B.: "ShadowMap.bmp") terrain = Handle für das Terrain, auf den der Schatten fallen soll xpos,zpos = Position des Terrains. Ermitteln mit EntityX() und EntityZ() terrsize = Die Größe nach Skalieren des Terrains Wenn die Heightmap 256*256 groß ist, und man es per ScaleEntity() auf das 2 Fache in x und z Skaliert, ist das Terrain am Ende 512*512 groß. resolution = Die größe der ShadowMap-Textur. Angebracht sind größen wie 256 oder 512 etc. Je größer die Textur desto länger dauert das Rendern. light = Handle für das Licht. Dieses wird verwendet um die Position zu ermitteln. Farbe, Typ oder Stärke spielen keine Rolle shadowcolor = Optional! Die Schattenfarbe als Graustufe. 0 = Schwarz, 255 = Weiß Standard ist 150 ambient = Optional! Die Farbe der Standardbeleuchtung. Standard ist 255 Im MainFile Muss shadow_cube(0) Definiert werden!!! und der Code: Code: [AUSKLAPPEN] Function makeshadow(mapfile$,terrain,xpos#,zpos#,terrsize#,resolution#,light,shadowcolor=150,ambient=255) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;; JACK THE MAPPER ;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; If KeyHit(79) Then ;Aktivierung mit 1 auf NumPad gw = GraphicsWidth() gh = GraphicsHeight() Color 255,204,0 bigfont = LoadFont("Courir New",24,1) SetFont bigfont FlushKeys schatten = CreateImage(resolution,resolution) SetBuffer ImageBuffer (schatten) ClsColor ambient,ambient,ambient Cls SetBuffer BackBuffer() terrcenter = CreatePivot() PositionENtity terrcenter,xpos+(terrsize/2.0),0,zpos+(terrsize/2.0) camera = CreateCamera() PositionEntity camera,EntityX#(light),EntityY#(light),EntityZ#(light) camerafogmode camera,0 camerarange camera,.1,10000 PointEntity camera,terrcenter RenderWorld Text gw/2,gh/2,"Diese Einstellung wird verwendet",1,1 Text gw/2,gh/2+25,"zum Fortfahren Taste drücken...",1,1 Flip WaitKey FlushKeys ;Schatten_Cube cubesize# = resolution/terrsize cubesize# = 1.0/cubesize# cubesize# = cubesize/10 Dim shadow_cube(resolution-1) For i=0 To resolution-1 shadow_cube(i) = CreateCube() EntityFX shadow_cube(i),1 ScaleEntity shadow_cube(i),cubesize,cubesize,cubesize Next ;Schleife steps# = resolution/terrsize For y=0 To resolution-1 RenderWorld For i=0 To resolution-1 ;Würfel Bewegen PositionEntity shadow_cube(i),i/steps#,TerrainY(terrain,i/steps#,0,y/steps#),y/steps# If Not EntityVisible (camera,shadow_cube(i)) paint(i,y,shadowcolor,schatten,1) EndIf Next ;;;;;;;;;;;STATUS ANZEIGEN;;;;;;;;;;;;;;;;; prz# =((y/resolution)*100) v$ = Floor(prz) + " % Fertig" Cls Color 255,204,0 Text gw/2,gh/2,v$,1,1 Flip If KeyDown(1) Then ssmap mapfile,schatten,gw,gh Return EndIf Next ssmap mapfile,schatten,gw,gh Return EndIf End Function Function paint(X,Y,c,shadow,radius) SetBuffer ImageBuffer(shadow) rgb=0*$1000000 + c*$10000 + c*$100 + c LockBuffer ImageBuffer(shadow) WritePixelFast (X),(ImageWidth(shadow)-Y),rgb UnLockBuffer ImageBuffer(shadow) SetBuffer BackBuffer() End Function Function ssmap(mapfile$,map,gw#,gh#) FlushKeys Cls Text gw/2,gh/2,"SAVE MAP...",1,1 Flip SaveImage map,mapfile Cls Text gw/2,gh/2,"Rendern erfolgreich",1,1 Flip WaitKey End End Function |
||
![]() |
Black Spider |
![]() Antworten mit Zitat ![]() |
---|---|---|
hhmm... schick ![]() |
||
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif |
martin_moehler |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
ich habdein lightmapper ausprobiert und er funktioniert auch an sich voll und ganz, nur das bei mir die cubes und die camera immer entityvisible = 1 sind. Mit anderern Worten erkennt er meine Objekte nicht! Kannst du mir weiterhelfen? |
||
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmmm... Das ist eher was fürs Codearchiv, auch wenns nicht sonderlich mächtig is. Ich verschiebe mal.
Eigenwerbung: Habe dazu auch mal was geschrieben. http://mrkeks.net/?show=artikel161 (Das beiliegende Programm ist allerdings nicht zur Verwendung, sondern nur zum Testen gedacht.) |
||
MrKeks.net |
martin_moehler |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok Ich hab das Problem selbst gefunden!
Man muss für alle Objekte die einen Schatten werfen sollen einen EntityPickmode einstellen! Lg Martin |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group