Heightmap als Meshterrain
Übersicht

![]() |
N0XBetreff: Heightmap als Meshterrain |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey!
Ich habe eine Heightmap in ein Meshtterrain übergeben und möchte jetzt aber noch zwei andere Texturlayer mit in das Meshterrain legen. Wie mache ich das? (Beispiel texture_splatting von Krischan) Habe es mit 3 Returns hintereinander versucht, erfolglos... Code: [AUSKLAPPEN] mesh = TLoadMesh("maps\file001.TMF",0,0,0,1,1,1)
Function TLoadMesh(mesh$,x_pos,y_pos,z_pos,x_size,y_size,z_size) file = ReadFile(mesh$) hm_dir$ = ReadLine(file) lm_dir$ = ReadLine(file) cm_dir$ = ReadLine(file) am1_dir$ = ReadLine(file) am2_dir$ = ReadLine(file) am3_dir$ = ReadLine(file) tex1_dir$ = ReadLine(file) tex2_dir$ = ReadLine(file) tex3_dir$ = ReadLine(file) detail_dir$ = ReadLine(file) ;-------------------------| hm = LoadImage(hm_dir$):MaskImage hm,255,0,255 lm = LoadImage(lm_dir$) cm = LoadImage(cm_dir$) alpha_snow=LoadImage(am1_dir$) alpha_rock=LoadImage(am2_dir$) alpha_grass=LoadImage(am3_dir$) Terrain1=LoadMeshTerrain(hm,16,cm ,1.0,alpha_grass,False,False,False,True) : EntityFX Terrain1,2 Terrain2=LoadMeshTerrain(hm,16,lm ,1.0,alpha_rock) : EntityFX Terrain2,2+32 Terrain3=LoadMeshTerrain(hm,16,False,0.0,alpha_snow ,255,255,255) : EntityFX Terrain3,2+32 PositionEntity Terrain1,x_pos,y_pos,z_pos PositionEntity Terrain2,x_pos,y_pos,z_pos PositionEntity Terrain3,x_pos,y_pos,z_pos ScaleEntity Terrain1,x_size,y_size,z_size ScaleEntity Terrain2,x_size,y_size,z_size ScaleEntity Terrain3,x_size,y_size,z_size EntityType Terrain1,MAP EntityType Terrain2,MAP EntityType Terrain3,MAP tex1=MyLoadTexture(tex1_dir$ ,0,2.0/ 32,1.0/ 32,5,Terrain1) tex2=MyLoadTexture(tex2_dir$ ,0,1.0/ 32,1.0/ 32,2,Terrain2) tex3=MyLoadTexture(tex3_dir$ ,0,1.0/ 16,1.0/ 16,2,Terrain3) detail=MyLoadTexture(detail_dir$ ,0,1.0/ 64,1.0/ 64,5) EntityTexture Terrain1,detail,0,2 EntityTexture Terrain2,detail,0,2 EntityTexture Terrain3,detail,0,2 CloseFile(file) Return Terrain1 Return Terrain2 Return Terrain3 End Function Function MyLoadTexture(filename$,flags%,uscale#=1.0,vscale#=1.0,blendmode%=False,entity%=False,layer%=0,frame%=0) Local tex%=LoadTexture(filename$,flags) ScaleTexture tex,uscale,vscale If blendmode Then TextureBlend tex,blendmode If entity Then EntityTexture entity,tex,frame,layer Return tex End Function Mfg, N0X ![]() |
||
Projekte: |Tibario| http://www.blitzforum.de/worklogs/325/ | 5% |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Geiler Versuch mit:
Code: [AUSKLAPPEN] Return Terrain1
Return Terrain2 Return Terrain3 ![]() Ich hab mal ein Meshterrain gemacht. Dieses erstellt entsprechend große nahtlose Blöcke mit 2 Texturlayern. Die erste Textur ist die Highmap selbst, dann folge eine über das ganze Terrain gezogene Colormap, und zuletzt eine Detailmap die in diesem Beispiel hardcoded auf 1/16 gestellt ist. Der erste Parameter gibt an, wie viele Quads^2 pro Block in gebraucht genommen werden. Die Funktion selbst ist nur ein Versuch von mir gewesen. Sie gibt kein Handle zurück mit welcher man das Terrain zum Beispiel wieder löschen könnte. Im Grunde kein Problem, da es ausreichen würde eine Bank zurück zu geben wo die ganzen Werte drin stehen. Code: [AUSKLAPPEN] ;PUBLIC/DOMAIN
;CODE/BY/HECTIC Graphics3D 800,600,0,2 SetBuffer BackBuffer() Local Timer=CreateTimer(58) Global Camera=CreateCamera() MoveEntity Camera,0,15,30 EntityRadius Camera,1 EntityType Camera,1 CameraFogMode Camera,True CameraFogRange Camera,0,200 CameraFogColor Camera,50,60,70 CameraClsColor Camera,50,60,70 TerrainLoad(32,"Data\highmap.png","Data\colormap.png","Data\Texture\004.png") While Not KeyHit(1) x=x-MouseXSpeed() y=y+MouseYSpeed() MoveMouse 400,300 RotateEntity Camera,y,x,0 If MouseDown(1) Then MoveEntity Camera,0,0,-.5 If MouseDown(2) Then MoveEntity Camera,0,0,+.5 If KeyDown(30) Then TranslateEntity Camera,0,+.25,0 Else TranslateEntity Camera,0,-.025,0 UpdateWorld RenderWorld Text 20,20,TrisRendered()+" triangles rendered" WaitTimer Timer Flip 0 Wend End Function TerrainLoad(FTile#=32,FHMap$,FCMap$,FDMap$) Local HMap%=LoadTexture(FHMap,1+256) ;Highmap Local CMap%=LoadTexture(FCMap,1+256) ;Colormap Local DMap%=LoadTexture(FDMap,2+256) ;Detailmap ScaleTexture DMap,1.0/16.0,1.0/16.0 If TextureWidth(HMap)<>TextureHeight(HMap) Then RuntimeError "Heighmap hat ungleiche Größe" If TextureWidth(CMap)<>TextureHeight(CMap) Then RuntimeError "Colorhmap hat ungleiche Größe" If TextureWidth(HMap)<FTile Then RuntimeError "Heighmap ist kleiner als Anzahl Tiles" Local H#=TextureWidth(HMap)/FTile Local C#=TextureWidth(CMap)/FTile Local IX2#,IY2#,IZ2# Local IX1#,IZ1# For IZ1=0 To H-1 For IX1=0 To H-1 Local mesh=CreateMesh() Local face=CreateSurface(mesh) For IZ2=0 To H-1 For IX2=0 To H-1 Rect 20+IX2*20,20+IZ2*20,21,21,0 Next Next Rect 20+IX1*20,20+IZ1*20,21,21,1 Flip 0:Cls LockBuffer TextureBuffer(HMap) For IZ2=0 To FTile For IX2=0 To FTile IY2=2*(ReadPixel(IX2+IX1*FTile,FTile+IZ1*FTile-IZ2,TextureBuffer(HMap)) And $FF0000)/$10000 AddVertex(face,IX2,IY2/(128/H),-IZ2, IX1/H+IX2/FTile/H,IZ1/H+1/H-IZ2/FTile/H,0) Next Next UnlockBuffer TextureBuffer(HMap) For IZ2=0 To FTile-1 For IX2=0 To FTile-1 AddTriangle(face,IX2+IZ2*(FTile+1),IX2+1+IZ2*(FTile+1),IX2+1+(IZ2+1)*(FTile+1)) AddTriangle(face,IX2+1+(IZ2+1)*(FTile+1),IX2+(IZ2+1)*(FTile+1),IX2+IZ2*(FTile+1)) Next Next MoveEntity mesh,-(FTile*H/2)+IX1*FTile,0,FTile-(FTile*H/2)+IZ1*FTile EntityAutoFade mesh,280,280 EntityTexture mesh,CMap,0,0 EntityTexture mesh,DMap,0,1 TextureBlend DMap,2 UpdateNormals mesh EntityType mesh,2 EntityFX mesh,1 Collisions 1,2,2,2 Next Next End Function |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group