Here's a little example using your code.
I didn't know your height values so I put in random numbers. Which causes the ground to look a little jagged.
I also setup the terrain to receive Texture Additive shadows.
With a little more work you could make a nice terrain generator.
Code: Select all
Enumeration
#Camera
#Texture
#Material
#Light
#Terrain
#SphereMesh
#Sphere
EndEnumeration
Declare MyTerrain(Size)
If InitEngine3D(#PB_Engine3D_DebugLog)
InitSprite()
InitKeyboard()
InitMouse()
ExamineDesktops()
DesktopW=DesktopWidth(0)
DesktopH=DesktopHeight(0)
Define.f MouseX,MouseY,KeyX,KeyY
If OpenWindow(0, 0, 0, DesktopW, DesktopH, "Basic Terrain Generator")
If OpenWindowedScreen(WindowID(0), 0, 0, DesktopW, DesktopH, 0, 0, 0)
Add3DArchive(#PB_Compiler_Home+"\Examples\3D\Data\Textures",#PB_3DArchive_FileSystem)
LoadTexture(#Texture,"grass.jpg")
CreateMaterial(#Material,TextureID(#Texture))
;Need to scale the material for texture repeat
ScaleMaterial(#Material, 0.1, 0.1)
CreateSphere(#SphereMesh,5)
CreateEntity(#Sphere,MeshID(#SphereMesh),MaterialID(#Material),0,20,0)
MeshHandle=MyTerrain(100)
Result = IsMesh(MeshHandle)
If Result <> 0
CreateEntity(#Terrain, MeshID(MeshHandle), MaterialID(#Material))
EntityRenderMode(#Terrain, 0)
EndIf
CreateLight(#Light,RGB(0,0,0),50,50,0)
SetLightColor(#Light,#PB_Light_DiffuseColor,RGB(255,255,255))
AmbientColor(RGB(100,100,100))
CreateCamera(#Camera, 0, 0, 100, 100)
MoveCamera(#Camera, 50, 25, -50, #PB_Absolute)
CameraLookAt(#Camera,0,0,0)
CameraBackColor(#Camera,RGB(80,80,80))
WorldShadows(#PB_Shadow_TextureAdditive, 100, RGB(200, 200, 200), 2048)
Repeat
Event=WaitWindowEvent()
If ExamineMouse()
MouseX = -MouseDeltaX()/10
MouseY = -MouseDeltaY()/10
EndIf
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = -0.2
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = 0.2
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -0.2
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = 0.2
Else
KeyY = 0
EndIf
EndIf
RotateCamera(#Camera, MouseY, MouseX, 0, #PB_Relative)
MoveCamera(#Camera, KeyX, 0, KeyY)
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
EndIf
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
Procedure MyTerrain(Size)
Define.f U,V,UVoffset
TerLen = Size
UVoffset = 1 / TerLen
Handle=CreateMesh(#PB_Any, #PB_Mesh_TriangleList, #PB_Mesh_Static)
For btz = 0 To TerLen - 1
offset = 1
For btx = 0 To TerLen - 1
;bty = HeightMapSector.MapSector(btx, btz)\Height / 8
;I don't know your old height values. So, I put in random numbers.
bty = Random(1,0)
MeshVertexPosition(btx-(TerLen*0.5), bty, btz-(TerLen*0.5))
MeshVertexNormal(0, 0, 0)
MeshVertexTextureCoordinate(U, V)
V = V + UVoffset
Next
U = U + UVoffset
V = 0
Next
For btz = 0 To TerLen - 2
For btx = 0 To TerLen - 2
btf = btz * TerLen + btx
MeshFace(btf+0, btf+TerLen, btf+TerLen+1)
MeshFace(btf+TerLen+1, btf+1, btf+0)
Next
Next
FinishMesh(#True)
NormalizeMesh(Handle)
ProcedureReturn Handle
EndProcedure