; ; ------------------------------------------------------------ ; ; 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