just another deformation of the plane made month ago, something like a channel with sine shape and a ball rolling in it
Code: Select all
Enumeration
#Window
#Camera
#sphere
#plane
#RedMaterial
EndEnumeration
Global Dim MeshData.PB_MeshVertex(0)
Global Dim MeshDataInd.PB_MeshFace(0)
#CameraSpeed = 0.2
Global TileCountX = 5, TileCountZ = 200
Declare plane()
Define.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
;Add3DArchive(".", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Models", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Scripts",#PB_3DArchive_FileSystem)
Parse3DScripts()
InitSprite()
InitKeyboard()
InitMouse()
ExamineDesktops()
DesktopW = DesktopWidth(0)
DesktopH = DesktopHeight(0)
If OpenWindow(#Window, 0, 0, DesktopW, DesktopH, "W toggle wire/solid Frame ....mouse+arrow keys to move/ rotate the camera ")
If OpenWindowedScreen(WindowID(#Window), 0, 0, DesktopW, DesktopH, 0, 0, 0)
CreateCamera(#Camera, 0, 0, 100, 100)
MoveCamera(#Camera, 10, 15, 30, #PB_Absolute)
CameraLookAt(#Camera,14,0,0)
CameraBackColor(#Camera, RGB(254,236,186)) ;RGB(200,155,40)
CreateMaterial(2, LoadTexture(2, "ground_diffuse.png"))
MaterialCullingMode(2, #PB_Material_NoCulling)
DisableMaterialLighting(2, #True)
ScrollMaterial(2, 0, 0, #PB_Material_Animated)
SetMaterialColor(2, #PB_Material_AmbientColor, RGB(250, 255, 0))
SetMaterialColor(2, #PB_Material_SpecularColor, RGB(255, 255, 0))
;CreateMaterial(0, LoadTexture(0, "ground_diffuse.png"))
CreateMaterial(0, LoadTexture(0, "MRAMOR6X6.jpg"))
MaterialCullingMode(0, #PB_Material_NoCulling)
DisableMaterialLighting(0, #True)
GetScriptMaterial(#RedMaterial, "Color/Red")
CreateLight(0, RGB(255, 255, 255), 500, 100, 500)
AmbientColor(RGB(255, 255, 255))
EndIf
EndIf
CreateMaterial(1, LoadTexture(1, "Geebee2.bmp"))
MaterialCullingMode(1, #PB_Material_NoCulling)
CreatePlane(#plane,50, 300, TileCountX, TileCountZ, 10,10)
CreateEntity(#plane,MeshID(#plane),MaterialID(0), 0, 0, 0)
MaterialShadingMode(0, #PB_Material_Wireframe)
wireFrame = 0
plane()
RotateEntity(#plane, 0,0, -5)
EntityPhysicBody(#plane, #PB_Entity_StaticBody)
CreateSphere(#sphere, 0.5)
CreateEntity(#sphere, MeshID(#sphere), MaterialID(1) ,1,4,2.5)
EntityPhysicBody(#sphere, #PB_Entity_SphereBody, 1,1,1)
GetMeshData(#plane,0, MeshData(), #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate , 0, MeshVertexCount(#plane)-1)
Repeat
Event = WindowEvent()
If ExamineMouse()
MouseX = -MouseDeltaX()/20
MouseY = -MouseDeltaY()/20
EndIf
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #CameraSpeed
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
If KeyboardPushed(#PB_Key_E)
x.f+0.001
ScrollMaterial(2, x, 0, #PB_Material_Fixed , 1)
EndIf
If KeyboardReleased(#PB_Key_W)
If wireFrame
MaterialShadingMode(0, #PB_Material_Wireframe)
wireFrame ! 1
Else
MaterialShadingMode(0, #PB_Material_Solid)
wireFrame ! 1
EndIf
EndIf
EndIf
RotateCamera(#Camera, MouseY, MouseX, 0, #PB_Relative)
MoveCamera(#Camera, KeyX, 0, KeyY)
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
Procedure plane()
t.f=0
GetMeshData(#plane,0, MeshData(), #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate , 0, MeshVertexCount(#plane)-1)
;GetMeshData(#TempSphere,0, MeshDataInd(), #PB_Mesh_Face, 0, MeshIndexCount(#TempSphere, 0)-1)
c=0 : dist.f : u.f: v.f
For i=0 To TileCountZ
dist = 0 ; try dist = 0
t.f+ #PI*4/30
u.f = 0
For k=0 To TileCountX
MeshData(c)\x = t
MeshData(c)\z = Sin(t) + dist
If k=0 Or k=TileCountX: MeshData(c)\y + 1:EndIf
MeshData(c)\u = u
MeshData(c)\v = v
dist + 0.4
c + 1
u + 1/TileCountX
Next
v + 1/TileCountZ
Next
SetMeshData(#plane,0, MeshData(), #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate, 0, MeshVertexCount(#plane)-1)
NormalizeMesh(#plane)
BuildMeshTangents(#plane)
UpdateMeshBoundingBox(#plane)
EndProcedure
the second demo is a staircase, it needs models of man, woman, cat. attached all the package here:
it depicts a crowd of people waiting in the desert in a long queue and then they climbed a very big staircase
Code: Select all
Enumeration
#Window
#Camera
#sphere
#plane
#plane2
#win20
#winDVD
#man
#girl
#cat
#ground
EndEnumeration
Procedure.f RandF(Min.f, Max.f, Resolution.i = 10000)
ProcedureReturn (Min + (Max - Min) * Random(Resolution) / Resolution)
EndProcedure
Global Dim MeshData.PB_MeshVertex(0)
Global Dim MeshDataInd.PB_MeshFace(0)
#CameraSpeed = 1
Global TileCountX = 5, TileCountZ = 400
Declare plane()
Define.f KeyX, KeyY, MouseX, MouseY
LoadFont(0, "Arial", 24, #PB_Font_Bold)
If InitEngine3D()
Add3DArchive(".", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Models", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "Examples/3D/Data/Scripts",#PB_3DArchive_FileSystem)
Parse3DScripts()
InitSprite()
InitKeyboard()
InitMouse()
ExamineDesktops()
DesktopW = DesktopWidth(0)
DesktopH = DesktopHeight(0)
If OpenWindow(#Window, 0, 0, DesktopW, DesktopH, "W toggle wire/solid Frame ..,Space: move the sphere to next vertex...mouse+arrow keys to move/ rotate the camera ")
If OpenWindowedScreen(WindowID(#Window), 0, 0, DesktopW, DesktopH, 0, 0, 0)
CreateCamera(#Camera, 0, 0, 100, 100)
MoveCamera(#Camera, 0, 5, 30, #PB_Absolute)
CameraLookAt(#Camera,0,0,0)
CameraBackColor(#Camera, RGB(254,236,186)) ;RGB(200,155,40)
CreateMaterial(2, LoadTexture(2, "house.jpg")) ;ground_diffuse.png
MaterialCullingMode(2, #PB_Material_NoCulling)
CreateMaterial(3, LoadTexture(3, "Wood.jpg"))
MaterialCullingMode(3, #PB_Material_NoCulling)
CreateMaterial(4, LoadTexture(4, "Geebee2.bmp"))
CreateMaterial(0, LoadTexture(0, "gridMetal1.jpg"))
MaterialCullingMode(0, #PB_Material_NoCulling)
CreateLight(0, RGB(255, 255, 255), 100, 100, 0)
CreateLight(1, RGB(255, 255, 255), 100, -100, 100)
AmbientColor(RGB(255, 255, 255))
EndIf
EndIf
notImportant=1
CreateMaterial(1, LoadTexture(1, "White.jpg"))
MaterialCullingMode(1, #PB_Material_NoCulling)
;CreatePlane(#Mesh, TileSizeX, TileSizeZ, TileCountX, TileCountZ, TextureRepeatCountX, TextureRepeatCountZ)
CreatePlane(#plane,notImportant, notImportant, TileCountX, TileCountZ, 1,1); only TileCountX, TileCountZ are important here
CreateEntity(#plane,MeshID(#plane),MaterialID(2), -15, 0, 0)
CreatePlane(#ground,1000, 1000, 100, 100, 1,1); only TileCountX, TileCountZ are important here
CreateEntity(#ground,MeshID(#ground),MaterialID(3), 500, -262, 0)
EntityPhysicBody(#ground, #PB_Entity_StaticBody)
wireFrame = 0
plane()
TransformMesh(#plane,0,0,0,1,1,1,0,0,15)
UpdateMeshBoundingBox(#plane)
GetMeshData(#plane,0, MeshData(), #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate , 0, MeshVertexCount(#plane)-1)
;RotateEntity(#plane, 0,0, -15)
EntityPhysicBody(#plane, #PB_Entity_StaticBody)
CopyEntity(#plane, #plane2)
MoveEntity(#plane2, EntityX(#plane),EntityY(#plane), EntityZ(#plane), #PB_Absolute)
RotateEntity(#plane2, 0,0, -0.01)
SetEntityMaterial(#plane2, MaterialID(0))
CreateSphere(#sphere, 1)
CreateEntity(#sphere, MeshID(#sphere), MaterialID(4) ,-13,4,2.0)
EntityPhysicBody(#sphere, #PB_Entity_SphereBody, 1,1,1)
LoadMesh(#man, "oldman_obj.mesh")
LoadMesh(#girl, "Girl_3ds.mesh")
TransformMesh(#man,0,0,0,0.2,0.2,0.2,0,0,0)
TransformMesh(#girl,0,0.3,-2,25,25,25,0,0,0)
UpdateMeshBoundingBox(#girl)
CreateEntity(#man, MeshID(#man), #PB_Material_None, 4,-14,8 )
CreateEntity(#girl, MeshID(#girl), #PB_Material_None, -10,-1,5 )
LoadMesh(#cat, "cat_obj.mesh")
TransformMesh(#cat,0,0,0,1.5,1.5,1.5,0,0,0)
CreateEntity(#cat, MeshID(#cat), #PB_Material_None, -12,-0.8,8 )
RotateEntity(#cat, 0,90,0)
RotateEntity(#man, 0,-90,0)
RotateEntity(#girl, 0,90,0)
meshcnt = MeshVertexCount(#plane) + 1
ent = 800: entCat=2000
For i=49 To meshcnt Step 60
ent+1
CopyEntity(Random(#girl,#man), ent)
MoveEntity(ent, MeshData(i)\x, MeshData(i)\y-13, MeshData(i)\z+Randf(4,7), #PB_Absolute)
RotateEntity(ent, 0,-90,0, #PB_Absolute)
If EntityY(ent) < -262: MoveEntity(ent,0,EntityY(#ground)-EntityY(ent)-0.1, 0, #PB_Relative): EndIf
Next
xspace.f = -150
For i=1 To 2000 Step 60
ent+1
xspace.f+10
CopyEntity(Random(#girl,#man), ent)
MoveEntity(ent, EntityX(#ground)+xspace, EntityY(#ground)-EntityY(ent)-0.1, EntityZ(#ground)+Randf(4,7), #PB_Absolute)
RotateEntity(ent, 0,-90,0, #PB_Absolute)
If EntityY(ent) < -262: MoveEntity(ent,0,EntityY(#ground)-EntityY(ent)-0.1, 0, #PB_Relative): EndIf
Next
wireFrame = 1
CreateTexture(90, 256, 256)
StartDrawing(TextureOutput(90))
Box(0, 0, 256, 256, RGB(218, 131, 14))
Box(6, 6, 244, 244, RGB(190, 190, 190))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(0))
DrawText(10, 10, " Windows 20 ", RGB(149, 43, 255))
DrawText(10, 60, " Free License ", RGB(149, 43, 255))
DrawText(10, 90, " Welcome ", RGB(168, 31, 220))
StopDrawing()
CreateMaterial(90, TextureID(90))
MaterialCullingMode(90, #PB_Material_NoCulling)
DisableMaterialLighting(90, #True)
CreateCube(#win20,50)
CreateEntity(#win20,MeshID(#win20),MaterialID(90), -15,4,2.5)
ScaleEntity(#win20, 0.01,1,1.5)
CreateEntity(#winDVD,MeshID(#win20),MaterialID(90), -11,0,1.5)
ScaleEntity(#winDVD, 0.04,0.04,0.04)
Repeat
Event = WindowEvent()
If ExamineMouse()
MouseX = -MouseDeltaX()/20
MouseY = -MouseDeltaY()/20
EndIf
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #CameraSpeed
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
If KeyboardPushed(#PB_Key_E)
x.f+0.001
ScrollMaterial(2, x, 0, #PB_Material_Fixed , 1)
EndIf
If KeyboardReleased(#PB_Key_W)
If wireFrame
MaterialShadingMode(2, #PB_Material_Wireframe)
MaterialShadingMode(0, #PB_Material_Wireframe)
wireFrame ! 1
Else
MaterialShadingMode(2, #PB_Material_Solid)
MaterialShadingMode(0, #PB_Material_Solid)
wireFrame ! 1
EndIf
EndIf
EndIf
If KeyboardReleased(#PB_Key_Space)
MoveEntity(#sphere, MeshData(num)\x,MeshData(num)\y,MeshData(num)\z, #PB_Absolute)
num + 1
EndIf
If KeyboardReleased(#PB_Key_Z)
Debug CameraX(#Camera): Debug CameraY(#Camera):Debug CameraZ(#Camera)
Debug CameraYaw(#Camera):Debug CameraPitch(#Camera):Debug CameraRoll(#Camera):
EndIf
RotateCamera(#Camera, MouseY, MouseX, 0, #PB_Relative)
MoveCamera(#Camera, KeyX, 0, KeyY)
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
Procedure plane()
t.f=0
GetMeshData(#plane,0, MeshData(), #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate , 0, MeshVertexCount(#plane)-1)
c=0 : dist.f : u.f: v.f
For i=0 To TileCountZ
dist = 0 ; try dist = 0
;t.f+ #PI*2/30
t.f+ #PI*10/30
u.f = 0
For k=0 To TileCountX
MeshData(c)\x = t
MeshData(c)\z = dist
r.f=MeshData(c)\y
If r<>rr.f
ee=2
Else
ee=1
EndIf
MeshData(c)\y - (Round(down.f, #PB_Round_Down )) * ee
rr.f=MeshData(c)\y
MeshData(c)\u = u
MeshData(c)\v = v
dist + 2
c + 1
u + 1/TileCountX
Next
down.f + 0.2: ;Debug down
v + 1/(TileCountZ/100)
Next
SetMeshData(#plane,0, MeshData(), #PB_Mesh_Vertex | #PB_Mesh_Normal | #PB_Mesh_UVCoordinate, 0, MeshVertexCount(#plane)-1)
NormalizeMesh(#plane)
BuildMeshTangents(#plane)
UpdateMeshBoundingBox(#plane)
EndProcedure