Code : Tout sélectionner
; ------------------------------------------------------------
;
; PureBasic - Manual Mesh
;
; (c) Fantaisie Software
;
; ------------------------------------------------------------
#CameraSpeed = 1
IncludeFile #PB_Compiler_Home + "examples/3d/Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
Define.f x, y, z, nx, ny, nz, u, v
Define.l Co
Define.w t1, t2, t3
If InitEngine3D()
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
LoadFont(0, "Arial", 20)
UseJPEGImageEncoder()
#CUBE_SIZE = 1
#CUBE_HALF_SIZE = #CUBE_SIZE / 2.0
CreateMesh(0, #PB_Mesh_TriangleList)
;front side
MeshVertexPosition(-#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE, #CUBE_HALF_SIZE)
MeshVertexNormal(0, 0, 1)
MeshVertexTextureCoordinate(0, 1)
MeshVertexPosition(#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE, #CUBE_HALF_SIZE)
MeshVertexNormal(0, 0, 1)
MeshVertexTextureCoordinate(1, 1)
MeshVertexPosition(#CUBE_HALF_SIZE, #CUBE_HALF_SIZE, #CUBE_HALF_SIZE)
MeshVertexNormal(0, 0, 1)
MeshVertexTextureCoordinate(1, 0)
MeshVertexPosition(-#CUBE_HALF_SIZE, #CUBE_HALF_SIZE, #CUBE_HALF_SIZE)
MeshVertexNormal(0, 0, 1)
MeshVertexTextureCoordinate(0, 0)
MeshFace(0, 1, 2)
MeshFace(0, 2, 3)
;back side
AddSubMesh()
MeshVertexPosition(#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE)
MeshVertexNormal(0, 0, -1)
MeshVertexTextureCoordinate(0, 1)
MeshVertexPosition(-#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE)
MeshVertexNormal(0, 0, -1)
MeshVertexTextureCoordinate(1, 1)
MeshVertexPosition(-#CUBE_HALF_SIZE, #CUBE_HALF_SIZE, -#CUBE_HALF_SIZE)
MeshVertexNormal(0, 0, -1)
MeshVertexTextureCoordinate(1, 0)
MeshVertexPosition(#CUBE_HALF_SIZE, #CUBE_HALF_SIZE, -#CUBE_HALF_SIZE)
MeshVertexNormal(0, 0, -1)
MeshVertexTextureCoordinate(0, 0)
MeshFace(0, 1, 2)
MeshFace(0, 2, 3)
;left side
AddSubMesh()
MeshVertexPosition(-#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE)
MeshVertexNormal(-1, 0, 0)
MeshVertexTextureCoordinate(0, 1)
MeshVertexPosition(-#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE, #CUBE_HALF_SIZE)
MeshVertexNormal(-1, 0, 0)
MeshVertexTextureCoordinate(1, 1)
MeshVertexPosition(-#CUBE_HALF_SIZE, #CUBE_HALF_SIZE, #CUBE_HALF_SIZE)
MeshVertexNormal(-1, 0, 0)
MeshVertexTextureCoordinate(1, 0)
MeshVertexPosition(-#CUBE_HALF_SIZE, #CUBE_HALF_SIZE, -#CUBE_HALF_SIZE)
MeshVertexNormal(-1, 0, 0)
MeshVertexTextureCoordinate(0, 0)
MeshFace(0, 1, 2)
MeshFace(0, 2, 3)
;right side
AddSubMesh()
MeshVertexPosition(#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE, #CUBE_HALF_SIZE)
MeshVertexNormal(1, 0, 0)
MeshVertexTextureCoordinate(0, 1)
MeshVertexPosition(#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE)
MeshVertexNormal(1, 0, 0)
MeshVertexTextureCoordinate(1, 1)
MeshVertexPosition(#CUBE_HALF_SIZE, #CUBE_HALF_SIZE, -#CUBE_HALF_SIZE)
MeshVertexNormal(1, 0, 0)
MeshVertexTextureCoordinate(1, 0)
MeshVertexPosition(#CUBE_HALF_SIZE, #CUBE_HALF_SIZE, #CUBE_HALF_SIZE)
MeshVertexNormal(1, 0, 0)
MeshVertexTextureCoordinate(0, 0)
MeshFace(0, 1, 2)
MeshFace(0, 2, 3)
;up side
AddSubMesh()
MeshVertexPosition(-#CUBE_HALF_SIZE, #CUBE_HALF_SIZE, #CUBE_HALF_SIZE)
MeshVertexNormal(0, 1, 0)
MeshVertexTextureCoordinate(0, 1)
MeshVertexPosition(#CUBE_HALF_SIZE, #CUBE_HALF_SIZE, #CUBE_HALF_SIZE)
MeshVertexNormal(0, 1, 0)
MeshVertexTextureCoordinate(1, 1)
MeshVertexPosition(#CUBE_HALF_SIZE, #CUBE_HALF_SIZE, -#CUBE_HALF_SIZE)
MeshVertexNormal(0, 1, 0)
MeshVertexTextureCoordinate(1, 0)
MeshVertexPosition(-#CUBE_HALF_SIZE, #CUBE_HALF_SIZE, -#CUBE_HALF_SIZE)
MeshVertexNormal(0, 1, 0)
MeshVertexTextureCoordinate(0, 0)
MeshFace(0, 1, 2)
MeshFace(0, 2, 3)
;down side
AddSubMesh()
MeshVertexPosition(-#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE)
MeshVertexNormal(0, -1, 0)
MeshVertexTextureCoordinate(0, 1)
MeshVertexPosition(#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE)
MeshVertexNormal(0, -1, 0)
MeshVertexTextureCoordinate(1, 1)
MeshVertexPosition(#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE, #CUBE_HALF_SIZE)
MeshVertexNormal(0, -1, 0)
MeshVertexTextureCoordinate(1, 0)
MeshVertexPosition(-#CUBE_HALF_SIZE, -#CUBE_HALF_SIZE, #CUBE_HALF_SIZE)
MeshVertexNormal(0, -1, 0)
MeshVertexTextureCoordinate(0, 0)
MeshFace(0, 1, 2)
MeshFace(0, 2, 3)
FinishMesh(#True)
UpdateMeshBoundingBox(0)
;Créer six textures & materiel - Create six textures & materials
For n = 0 To 5
CreateTexture(n, 128, 128)
StartDrawing(TextureOutput(n))
Box(0,0, OutputWidth(), OutputHeight(), RGB(154, 205, 50))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(0))
DrawText(20, 20, "Face " + n, RGB(255, 255, 255))
StopDrawing()
;SaveImage(n, "texture" + n + ".jpg", #PB_ImagePlugin_JPEG)
CreateMaterial(n, TextureID(n))
Next
;Creation entité (Cube) - Create entitity (Cube)
CreateEntity(0, MeshID(0), #PB_Material_None)
;Texturer chaque cotés du cube - Texturing each side of the cube
For n = 0 To 5
SetEntityMaterial(0, MaterialID(n), n)
Next
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 0, 5, #PB_Absolute)
CreateLight(0, RGB(255,255,255), 300, 600, -100)
AmbientColor(RGB(80, 80, 80))
Repeat
Screen3DEvents()
If ExamineMouse()
MouseX = -MouseDeltaX() * #CameraSpeed * 0.05
MouseY = -MouseDeltaY() * #CameraSpeed * 0.05
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
EndIf
RotateEntity(0, 1, 1, 1, #PB_Relative)
RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
MoveCamera (0, KeyX, 0, KeyY)
RenderWorld()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized", 0)
EndIf
End