.MESH Editor Open Source version 0.01

Advanced game related topics
LJ
Enthusiast
Enthusiast
Posts: 177
Joined: Wed Apr 30, 2003 4:00 pm

.MESH Editor Open Source version 0.01

Post by LJ »

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
LJ
Enthusiast
Enthusiast
Posts: 177
Joined: Wed Apr 30, 2003 4:00 pm

User Interface

Post by LJ »

I think the first thing that needs to be done with this code is for a better user interface to be established and the dependency on the Screen3DRequester.pb file be destroyed.

A sort of split screen.... any suggestions?
LJ
Enthusiast
Enthusiast
Posts: 177
Joined: Wed Apr 30, 2003 4:00 pm

Oppps

Post by LJ »

Oppps, error on my part. The mesh shouldn't be textured when displayed. You can fix this yourself with the CameraRenderMode command or here is the updated source below.

Code: Select all

; 
; ------------------------------------------------------------ 
; 
;   .MESH  Editor beta version 0.02 
;   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) 
    CameraRenderMode(0, #PB_Camera_Wireframe)
    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 
LJ
Enthusiast
Enthusiast
Posts: 177
Joined: Wed Apr 30, 2003 4:00 pm

Rotating image

Post by LJ »

Arrow keys now rotate model. A little easier to study the model and what is happening when the vertices are changed.

Code: Select all

; 
; ------------------------------------------------------------ 
; 
;   .MESH  Editor beta version 0.02 
;   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 rotate model 

#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) 
    CameraRenderMode(0, #PB_Camera_Wireframe)
    Repeat 
     Screen3DEvents() 
      
      ClearScreen(0, 0, 0) 
            
      If ExamineKeyboard() 
        
        If KeyboardPushed(#PB_Key_Left) 
        RotateEntity(0, -1, 0, 0)
        EndIf
         
        If KeyboardPushed(#PB_Key_Right) 
        RotateEntity(0, 1, 0, 0)
        EndIf 
                  
        If KeyboardPushed(#PB_Key_Up) 
        RotateEntity(0, 0, -1, 0)
        EndIf 
        
        If KeyboardPushed(#PB_Key_Down) 
        RotateEntity(0, 0, 1, 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 
     
      
      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 
LJ
Enthusiast
Enthusiast
Posts: 177
Joined: Wed Apr 30, 2003 4:00 pm

Help

Post by LJ »

Never mind, got it figured out.
Post Reply