.MESH Editor Open Source version 0.01
Posted: Sun Aug 10, 2003 4:52 am
Here's something I slapped together in a couple of hours. Code is a little sloppy, lots of room for optimizing. Feel free to edit, alter, and otherwise improve. I hope this can be the start of a .MESH 3D Model editor written in PureBasic.
Code: Select all
;
; ------------------------------------------------------------
;
; .MESH Editor beta version 0.01
; Open Source
; 8/9/03
; Programmers:
; Lance Jepsen
; (Add your name here if you want to help in this project)
; (c) 2003
; ------------------------------------------------------------
; Feel free to add on and improve. This is the
; first beta of a .MESH 3D model editor in
; PureBasic
; INSTRUCTIONS: Push letters A - X on your keyboard
; to toggle vertices index values (0,1) of the sample cube.
; Push arrow keys to move around, mouse to look around.
#CameraSpeed = 5
IncludeFile "Screen3DRequester.pb"
DefType.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
Add3DArchive("Data\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\Skybox.zip", #PB_3DArchive_Zip)
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
; Create a cube, manually.. See the DataSetion, for more precisions
;
CreateMesh(0)
SetMeshData(0, 0, ?CubeVertices , 8)
SetMeshData(0, 1, ?CubeFacesIndexes , 12)
SetMeshData(0, 2, ?CubeTextureCoordinates, 8)
CreateEntity(0, MeshID(0), CreateMaterial(0, LoadTexture(0, "Data/clouds.jpg")))
ScrollMaterial(0, 0.2, 0.2, 1) ; Just for fun, use an animated material
ScaleEntity(0, 3, 3, 3)
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0,0,0,20)
Repeat
Screen3DEvents()
ClearScreen(0, 0, 0)
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 KeyboardReleased(#PB_Key_A)
flag.f = PeekF(?CubeVertices)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_B)
flag.f = PeekF(?CubeVertices+4)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+4, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_C)
flag.f = PeekF(?CubeVertices+8)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+8, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_D)
flag.f = PeekF(?CubeVertices+12)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+12, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_E)
flag.f = PeekF(?CubeVertices+16)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+16, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_F)
flag.f = PeekF(?CubeVertices+20)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+20, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_G)
flag.f = PeekF(?CubeVertices+24)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+24, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_H)
flag.f = PeekF(?CubeVertices+28)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+28, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_I)
flag.f = PeekF(?CubeVertices+32)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+32, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_J)
flag.f = PeekF(?CubeVertices+36)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+36, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_K)
flag.f = PeekF(?CubeVertices+40)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+40, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_L)
flag.f = PeekF(?CubeVertices+44)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+44, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_M)
flag.f = PeekF(?CubeVertices+48)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+48, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_N)
flag.f = PeekF(?CubeVertices+52)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+52, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_O)
flag.f = PeekF(?CubeVertices+56)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+56, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_P)
flag.f = PeekF(?CubeVertices+60)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+60, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_Q)
flag.f = PeekF(?CubeVertices+64)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+64, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_R)
flag.f = PeekF(?CubeVertices+68)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+68, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_S)
flag.f = PeekF(?CubeVertices+72)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+72, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_T)
flag.f = PeekF(?CubeVertices+76)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+76, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_U)
flag.f = PeekF(?CubeVertices+80)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+80, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_V)
flag.f = PeekF(?CubeVertices+84)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+84, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_W)
flag.f = PeekF(?CubeVertices+88)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+88, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
If KeyboardReleased(#PB_Key_X)
flag.f = PeekF(?CubeVertices+92)
If flag = 0
target.f = 1
Else
target.f = 0
EndIf
PokeF(?CubeVertices+92, target)
SetMeshData(0, 0, ?CubeVertices , 8)
EndIf
EndIf
If ExamineMouse()
MouseX = -(MouseDeltaX()/10)*#CameraSpeed/2
MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
EndIf
RotateEntity(0, 1, 1, 1)
RotateCamera(0, MouseX, MouseY, RollZ)
MoveCamera (0, KeyX, 0, KeyY)
RenderWorld()
StartDrawing(ScreenOutput())
DrawingMode(1)
FrontColor(255,255,255)
Locate(0, 0)
DrawText("Vertices: ")
Dim a.f(24)
Restore CubeVertices
For t = 1 To 24
Read a(t)
Next
Dim b.s(24)
For t = 1 To 24
b(t)=Str(a(t))
Next
Locate(0,15)
DrawText("A = "+b(1)+", B = "+b(2)+", C = "+b(3))
Locate(0,30)
DrawText("D = "+b(4)+", E = "+b(5)+", F = "+b(6))
Locate(0,45)
DrawText("G = "+b(7)+", H = "+b(8)+", I = "+b(9))
Locate(0,60)
DrawText("J = "+b(10)+", K = "+b(11)+", L = "+b(12))
Locate(0,75)
DrawText("M = "+b(13)+", N = "+b(14)+", O = "+b(15))
Locate(0,90)
DrawText("P = "+b(16)+", Q = "+b(17)+", R = "+b(18))
Locate(0,105)
DrawText("S = "+b(19)+", T = "+b(20)+", U = "+b(21))
Locate(0,120)
DrawText("V = "+b(22)+", W = "+b(23)+", X = "+b(24))
Locate (0,140)
DrawText("Output in Purebasic data statements:")
Locate (0,155)
DrawText("Data.f "+b(1)+", "+b(2)+", "+b(3))
Locate (0,170)
DrawText("Data.f "+b(4)+", "+b(5)+", "+b(6))
Locate (0,185)
DrawText("Data.f "+b(7)+", "+b(8)+", "+b(9))
Locate (0,200)
DrawText("Data.f "+b(10)+", "+b(11)+", "+b(12))
Locate (0,215)
DrawText("Data.f "+b(13)+", "+b(14)+", "+b(15))
Locate (0,230)
DrawText("Data.f "+b(16)+", "+b(17)+", "+b(18))
Locate (0,245)
DrawText("Data.f "+b(19)+", "+b(20)+", "+b(21))
Locate (0,260)
DrawText("Data.f "+b(22)+", "+b(23)+", "+b(24))
StopDrawing()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
DataSection
CubeVertices:
Data.f 0, 0, 0 ; Vertex index 0
Data.f 1, 0, 0 ; Vertex index 1
Data.f 1, 0, 1 ; Vertex index 2
Data.f 0, 0, 1 ; Vertex index 3
Data.f 0, 1, 0 ; Vertex index 4 - Note: exactly the same as above, but with 'y'
Data.f 1, 1, 0 ; Vertex index 5
Data.f 1, 1, 1 ; Vertex index 6
Data.f 0, 1, 1 ; Vertex index 7
CubeFacesIndexes:
Data.w 0, 1, 2 ; bottom face (clockwise as it's reversed...)
Data.w 2, 3, 0
Data.w 6, 5, 4 ; top face
Data.w 4, 7, 6
Data.w 1, 5, 6 ; right face
Data.w 6, 2, 1
Data.w 7, 4, 0 ; left face
Data.w 0, 3, 7
Data.w 5, 1, 0 ; back face
Data.w 0, 4, 5
Data.w 2, 6, 7 ; front face
Data.w 7, 3, 2
CubeTextureCoordinates:
Data.f 0 , 0.33 ; Vertex 0
Data.f 0.33, 0.33 ; Vertex 1
Data.f 0.33, 0 ; Vertex 2
Data.f 0, 0 ; Vertex 3
Data.f 0.66, 1 ; Vertex 4
Data.f 1, 1 ; Vertex 5
Data.f 1, 0.66 ; Vertex 6
Data.f 0.66, 0.66 ; Vertex 7
EndDataSection