;
; ------------------------------------------------------------
;
; PureBasic - MeshManual
;
; (c) Fantaisie Software
;
; ------------------------------------------------------------
;
#CameraSpeed = 1
#scale = 3
IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/fonts", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Scripts", #PB_3DArchive_FileSystem)
Parse3DScripts()
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
; Материал
CreateMaterial(0, LoadTexture(0, "White.jpg"))
DisableMaterialLighting(0, #True)
; Сетка плоскость (Plane)
CreateMesh(0, #PB_Mesh_LineStrip, #PB_Mesh_Static)
MeshVertexPosition(-10, 0, -10)
MeshVertexColor(RGB(255,0,0))
MeshVertexPosition(-10, 0, 10)
MeshVertexColor(RGB(255,255,0))
MeshVertexPosition( 10, 0, 10)
MeshVertexColor(RGB(255,0,255))
MeshVertexPosition( 10, 0, -10)
MeshVertexColor(RGB(0,255,0))
MeshVertexPosition(-10, 0, -10)
MeshVertexColor(RGB(255,0,0))
FinishMesh(#False)
SetMeshMaterial(0, MaterialID(0))
Plane = CreateNode(#PB_Any, -40, 0, 0)
AttachNodeObject(Plane, MeshID(0))
; Сетка звезда (Stars)
CreateMesh(1, #PB_Mesh_PointList, #PB_Mesh_Static)
For i = 0 To 10000
MeshVertexPosition(Random(200)-100, Random(200)-100, Random(200)-100)
MeshVertexColor(RGB(255,255,0))
Next i
FinishMesh(#False)
SetMeshMaterial(1, MaterialID(0))
Stars = CreateNode(#PB_Any)
AttachNodeObject(Stars, MeshID(1))
; Сетка прямоугольник (Box)
CreateMesh(2, #PB_Mesh_LineStrip, #PB_Mesh_Static)
MeshVertexPosition(-10, -10, -10)
MeshVertexPosition(-10, -10, 10)
MeshVertexPosition( 10, -10, 10)
MeshVertexPosition( 10, -10, -10)
MeshVertexPosition(-10, -10, -10)
AddSubMesh(#PB_Mesh_LineStrip)
MeshVertexPosition(-10, 10, -10)
MeshVertexPosition(-10, 10, 10)
MeshVertexPosition( 10, 10, 10)
MeshVertexPosition( 10, 10, -10)
MeshVertexPosition(-10, 10, -10)
AddSubMesh(#PB_Mesh_LineList)
MeshVertexPosition(-10, -10, -10)
MeshVertexPosition(-10, 10, -10)
MeshVertexPosition(-10, -10, 10)
MeshVertexPosition(-10, 10, 10)
MeshVertexPosition( 10, -10, 10)
MeshVertexPosition( 10, 10, 10)
MeshVertexPosition( 10, -10, -10)
MeshVertexPosition( 10, 10, -10)
FinishMesh(#False)
SetMeshMaterial(2, MaterialID(0))
Box = CreateNode(#PB_Any, 40, 0, 0)
AttachNodeObject(Box, MeshID(2))
; Сетка решетка (Grid)
CreateMesh(3, #PB_Mesh_LineList, #PB_Mesh_Static)
For i=0 To 20
MeshVertexPosition(-20, 0, (i-10)*-2)
MeshVertexColor(RGB(55,155,255))
MeshVertexPosition(20, 0, (i-10)*-2)
MeshVertexColor(RGB(55,155,255))
Next
For i=0 To 20
MeshVertexPosition((i-10)*-2, 0, -20)
MeshVertexColor(RGB(255,155,55))
MeshVertexPosition((i-10)*-2, 0, 20)
MeshVertexColor(RGB(255,155,55))
Next
FinishMesh(#False)
SetMeshMaterial(3, MaterialID(0))
Grid = CreateNode(#PB_Any, 0, 0, 0)
AttachNodeObject(Grid, MeshID(3))
; Сетка плоскость (Plane) (использование MeshIndex)
CreateMesh(4, #PB_Mesh_LineStrip, #PB_Mesh_Static)
; Определить позицию вершины индекса 0..3
MeshVertexPosition(-10, 0, -10)
MeshVertexPosition(-10, 0, 10)
MeshVertexPosition( 10, 0, 10)
MeshVertexPosition( 10, 0, -10)
; Определите использование вершин, ссылаясь на индексы
MeshIndex(0)
MeshIndex(1)
MeshIndex(2)
MeshIndex(3)
MeshIndex(0)
FinishMesh(#False)
SetMeshMaterial(4, MaterialID(0))
Plane2 = CreateNode(#PB_Any, 0, 30, 0)
AttachNodeObject(Plane2, MeshID(4))
; Сетка прямоугольник (Box) (используя MeshIndex)
CreateMesh(5, #PB_Mesh_LineList, #PB_Mesh_Static)
; Определить положение вершины индекса 0..7
MeshVertexPosition(-10, -10, -10)
MeshVertexPosition(-10, -10, 10)
MeshVertexPosition( 10, -10, 10)
MeshVertexPosition( 10, -10, -10)
MeshVertexPosition(-10, 10, -10)
MeshVertexPosition(-10, 10, 10)
MeshVertexPosition( 10, 10, 10)
MeshVertexPosition( 10, 10, -10)
; Определите использование вершин, ссылаясь на индексы
MeshIndex(0)
MeshIndex(1)
MeshIndex(1)
MeshIndex(2)
MeshIndex(2)
MeshIndex(3)
MeshIndex(0)
MeshIndex(3)
MeshIndex(4)
MeshIndex(5)
MeshIndex(5)
MeshIndex(6)
MeshIndex(6)
MeshIndex(7)
MeshIndex(4)
MeshIndex(7)
MeshIndex(0)
MeshIndex(4)
MeshIndex(1)
MeshIndex(5)
MeshIndex(2)
MeshIndex(6)
MeshIndex(3)
MeshIndex(7)
FinishMesh(#False)
SetMeshMaterial(5, MaterialID(0))
Box2 = CreateNode(#PB_Any, 0, -30, 0)
AttachNodeObject(Box2, MeshID(5))
; - Камера
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 40, 150, #PB_Absolute)
CameraFOV(0, 40)
CameraLookAt(0, NodeX(Grid), NodeY(Grid), NodeZ(Grid))
CameraBackColor(0, RGB(0, 0, 40))
; - Свет
CreateLight(0, RGB(255,255,255), -10, 60, 10)
AmbientColor(RGB(90, 90, 90))
Repeat
Screen3DEvents()
ExamineKeyboard()
RotateNode(Plane, 0.3, -0.3, -0.3, #PB_Relative)
RotateNode(Stars, 0.1, 0.1, 0.1, #PB_Relative)
RotateNode(Box, 0.3, 0.3, 0.3, #PB_Relative)
RotateNode(Grid, 0.3, 0.3, 0.3, #PB_Relative)
RotateNode(Plane2, 0.3, -0.3, -0.3, #PB_Relative)
RotateNode(Box2, 0.3, 0.3, 0.3, #PB_Relative)
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Ошибка", "3D Движок не может быть инициализирован", 0)
EndIf
End