Editeur terrain 3D en construction

Généralités sur la programmation 3D
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

ça c'est étrange.
Pour l'instant ça ne fonctionne qu'avec la texture jointe au fichier, ça ne marchera pas avec une autre .Tu as essayé avec quoi ?
J'ai essayé avec l'image présente dans l'archive... La premiere fois que je l'ai chargée j'ai eu direct le tile "herbe"... J'ai pas su changer de tile... Et quand ca a planté une premiere fois... J'ai relancé le soft et en chargeant la texture encore une fois je ne pouvais pas choisir mon tile mais c'était plus l'herbe que j'avait...

Dri
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Ok merci Dri c'est corrigé :)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

je crois que j'ai enfin trouvé la solution qui allait convenir , je vais donc tout reprendre en partant de ce code :

Code : Tout sélectionner

InitSprite() 
If OpenWindow(0,0,0,400,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget,"MDIGadget") 
  ;OpenWindowedScreen(WindowID(),0,30,200,200,0,0,0) 
  If CreateGadgetList(WindowID(0)) And CreateMenu(0, WindowID(0)) 
    MenuTitle("Menu index 0") 
    MenuTitle("MDI windows menu") 
    MenuItem(0, "self created item") 
    MenuItem(1, "self created item") 
    
    MDIGadget(0, 0, 0, 0, 0, 1, 2, #PB_MDI_AutoSize) 
    AddGadgetItem(0, -1, "Matrix 3D") 
    hCont = ContainerGadget(1,0,0,800,600,#PB_Container_Double) 
    If OpenWindowedScreen( hCont, 0, 0, 800, 600, 0, 0, 0 ) = 0 
      MessageRequester( "Erreur" , "Impossible d'ouvrir l'écran " , 0 ) 
      End 
    EndIf
    ; add gadgets here... 
    AddGadgetItem(0, -1, "Textures") 
    CloseGadgetList() 
  EndIf 
  

  Repeat 

    
    ClearScreen(0,155,255) 

    FlipBuffers() 
  Until WindowEvent()=#PB_Event_CloseWindow 
EndIf
comme d'hab , libre à chacun d'apporter sa pierre à l'édifice :)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Bon , la 3D est en place , prochaine étape , mettre de l'ordre dans ce code ( c'est un mélange de mes différents essais ) .

Code : Tout sélectionner

#WINDOW = 0
#TOOLBAR = 0
#MENU = 0
#GADGET_MDI = 1
#ScreenWidth  = 800
#Screenheight = 600

#AngleInitial = 90
#Camera = 0
;/Gadgets
Enumeration
  #TrackBar_HauteurCamera
  #TrackBar_DistanceCamera
  #TrackBar_InclinaisonCamera
  #String_CameraHauteur
  #String_CameraDistance
  #String_CameraInclinaison
  #Button_CameraMode
  #Button_CameraRotationGauche
  #Button_CameraRotationDroite
  #CheckBox_ChangeTextureFacette
  #ScrollArea_Texture
  #String_NbTextureX
  #String_NbTextureZ
  #String_TextureTailleX
  #String_TextureTailleZ
  #Button_ChargeTexture
  #Text_TextureTailleX
  #Text_TextureTailleZ
  #Text_NbTextureX
  #Text_NbTextureZ
  #Button_RemplissageTexture
  #ButtonImage_TextureEnCours
  #Image_TextureEnCours
  #Frame3D_InfosTexture
  #Text_FacetteNewHauteur
  #String_FacetteNewHauteur
  #Option_Facette
  #Option_Vertex
  #Option_SansTexture
  #Option_AvecTexture
  #CheckBox_Vertex1
  #CheckBox_Vertex2
  #CheckBox_Vertex3
  #CheckBox_Vertex4
  #TrackBar_CurseurTailleX
  #TrackBar_CurseurTailleZ
  #Button_CameraBackColor
  #ButtonImage_TextureFinale
  #Text_LargeurMatrice
  #Text_ProfondeurMatrice
  #Text_NbFacetteXMatrice
  #Text_NbFacetteZMatrice
  #String_LargeurMatrice
  #String_ProfondeurMatrice
  #String_NbFacetteXMatrice
  #String_NbFacetteZMatrice
  #CheckBox_DoubleFaceMatrice
  #Button_ValideMatrice
  #Button_ValideDecoupageTexture
  #TrackBar_DecalageCamera
  #String_DecalageCamera
  #Panel_Principal
  #Panel_3D
  #Panel_Texture
  #Contenair
EndEnumeration
;/Menu
#MenuBarre = 0
#PopupMenu = 1
Enumeration
  #Menu_NouvelleMatrice
  #Menu_OuvrirMatrice
  #Menu_SauverMatrice
  #MEnu_Exporter
  #Menu_Importer
  #Menu_Quitter
  #Menu_Aide
  #Menu_CouleurAmbiante
  #Menu_CouleurLumiere
  #Menu_HauteurLumiere
  #Menu_Camera
  #Menu_VueCamera1
  #Menu_VueCamera2
  #Menu_VueCamera3
  #Menu_VueCamera4
  #Menu_Curseur
  #Menu_HauteurCurseur1
  #Menu_HauteurCurseur2
  #Menu_HauteurCurseur3
  #Menu_HauteurCurseur4
  #Menu_ChargeTexture
  #Menu_PrepareTexture
  
  #MenuPop_SelectionFacette
  #MenuPop_RotationTextureDR
  #MenuPop_RotationTextureGA
  #MenuPop_AppliquerTexture
  #MenuPop_FixerHauteur
  
  #Shortcut_CTRL_Up
  #Shortcut_CTRL_Down
  #Shortcut_CTRL_Left
  #Shortcut_CTRL_Right
  #Shortcut_ALT_Up
  #Shortcut_ALT_Down
  #Shortcut_ALT_Left
  #Shortcut_ALT_Right
  #Shortcut_Up
  #Shortcut_Down
  #Shortcut_Left
  #Shortcut_Right
  #Shortcut_SHIFT
  #Shortcut_SHIFT_Up
  #Shortcut_SHIFT_Down
  #Shortcut_SHIFT_Left
  #Shortcut_SHIFT_Right  
EndEnumeration
;/Menu
Enumeration
  #MENU_Open
  #MENU_Close
  #MENU_CloseAll
  #MENU_Quit
  
  #MENU_ChargerTexture
  
  #MENU_TileV
  #MENU_TileH
  #MENU_Cascade
  #MENU_Arrange
  #MENU_Previous
  #MENU_Next
  
  #MENU_FirstMDI
EndEnumeration
;/Images
Enumeration
  #ImageTextureFinale
  #ImageTextureEnCours
  #ImageRadar
EndEnumeration 
;/Entity
Enumeration
  #Curseur
  #Matrice
  #Sphere
  #Coin1
  #Coin2
  #Coin3
  #Coin4
  #Pointe
  #Fleche
EndEnumeration

#WindowFlags = #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget


Structure Camera
  AngleX.l       ; angle de la camera 
  AngleY.l       ;Inclinaison 
  Decalage.l     ; Decalage par rapport au curseur
  VitesseRotation.l
  SensRotation.l ; Sens et Vitesse de Rotation 
  Distance.l     ; distance entre la camera et le perso 
  Hauteur.l      ; hauteur de la camera 
  ToucheHaut.l 
  ToucheBas.l
  ToucheAvance.l
  ToucheRecul.l
  ToucheAngleHaut.l
  ToucheAngleBas.l
  ToucheRotationGauche.l
  ToucheRotationDroite.l
  RenderMode.s[2]
  Mode.l
EndStructure
Structure Matrice 
  largeur.f 
  Profondeur.f 
  NbFacetteX.l      
  NbFacetteZ.l      
  FaceVisible.l      ; si = #True on double les triangles pour voir l'entité des deux côtés 
  NbPointX.l 
  NbPointZ.l 
  Nbtriangle.l 
  TailleFacetteX.f   ; Je ne sais pas si je vais garder cette méthode 
  TailleFacetteZ.f   ; Je ne sais pas si je vais garder cette méthode  
  NbTextureX.l
  NbTextureZ.l
  TailleTextureX.f
  TailleTextureZ.f
  PointIDMemory.l 
  TriangleIDMemory.l 
  TextureIDMemory.l 
  NormaleIDMemory.l 
  TotalTriangles.l
  TotalPoints.l
EndStructure
Structure Curseur 
  AngleX.l         ;  
  Sens.l           ;Gestion de la rotation de la camera pour se déplacer avec les bonnes touches
  Epaisseur.f
  FacetteX.l      ;position sur la matrice en X 
  FacetteZ.l      ;position sur la matrice en Z
  NbFacetteX.l    ;Largeur du curseur en X
  NbFacetteZ.l    ;profondeur du curseur en Z
  TailleX.l       
  TailleZ.l
  HauteurFacette.l         ;Hauteur de modification des facettes 
  HauteurReelleFacette.l   ; Hauteur d'une facette sous le curseur 
  RayonRoue.l
EndStructure 

Global Camera.Camera
Global Curseur.Curseur
Global Matrice.Matrice
Global Quit.l

;{- Declare

;{-Initialisation

WinWidth = GetSystemMetrics_(#SM_CXSCREEN) 
WinHeight = GetSystemMetrics_(#SM_CYSCREEN) 

If InitEngine3D() = 0 
  MessageRequester( "Erreur" , "Impossible d'initialiser la 3D , vérifiez la présence de engine3D.dll" , 0 ) 
  End 
ElseIf InitSprite() = 0 
  MessageRequester( "Erreur" , "Impossible d'initialiser DirectX 7 Ou plus" , 0 ) 
  End 
ElseIf OpenWindow(#WINDOW,0,0,WinWidth,WinHeight,#WindowFlags,"Editeur MAP 3D") = 0 
  MessageRequester( "Erreur", "Impossible d'ouvrir la fenêtre") 
  End 
EndIf
;}

;{- Procedures
Procedure Erreur(Message$)
  MessageRequester("Erreur",Message$,0)
  End
EndProcedure 
Procedure Texture()
  AddGadgetItem(#GADGET_MDI, -1, "Textures") 
EndProcedure
Procedure Window()
  Event = WaitWindowEvent()
  Select Event
    Case #PB_Event_CloseWindow
      Quit = 1  
      
    Case #WM_RBUTTONDOWN
      DisplayPopupMenu(#PopupMenu,WindowID(#WINDOW), WindowMouseX(),WindowMouseY())  
    ;{/ MenuID  
    Case #PB_Event_Menu
  
      Select EventMenuID()
    
    
        Case #MENU_Quit
          Quit = 1     
      
        Case #MENU_TileV
          SetGadgetState(#GADGET_MDI, #PB_MDI_TileVertically)
      
        Case #MENU_TileH
          SetGadgetState(#GADGET_MDI, #PB_MDI_TileHorizontally)
      
        Case #MENU_Cascade
          SetGadgetState(#GADGET_MDI, #PB_MDI_Cascade)
      
        Case #MENU_Arrange
          SetGadgetState(#GADGET_MDI, #PB_MDI_Arrange)
      
        Case #MENU_Previous
          SetGadgetState(#GADGET_MDI, #PB_MDI_Previous)
      
        Case #MENU_Next
          SetGadgetState(#GADGET_MDI, #PB_MDI_Next)
      
      EndSelect
      ;}
    ;{/Gadget ID
    Case #PB_Event_Gadget
      Select EventGadgetID()  
        
        Case #GADGET_MDI
    
          Type = EventType()
    
          If Type = #PB_EventType_SizeItem          
            Element = GetGadgetAttribute(#GADGET_MDI, #PB_MDI_SizedItem)  
            If Element = 0
              Width  = GetGadgetItemAttribute(#GADGET_MDI, Element, #PB_MDI_ItemWidth)
              Height = GetGadgetItemAttribute(#GADGET_MDI, Element, #PB_MDI_ItemHeight)
              
              If Width > #ScreenWidth
                SetGadgetItemAttribute(#GADGET_MDI, Element, #PB_MDI_ItemWidth , #ScreenWidth)
              EndIf
              If Height > #Screenheight
                SetGadgetItemAttribute(#GADGET_MDI, Element, #PB_MDI_ItemHeight, #Screenheight)
              EndIf  
            EndIf
            
            
          ElseIf Type = #PB_EventType_CloseItem
            Element = GetGadgetState(#GADGET_MDI) 
            If Element
              RemoveGadgetItem(#GADGET_MDI, Element)
            EndIf
            
            
          EndIf  
      
      EndSelect
      ;}
  EndSelect    
EndProcedure
Procedure.f WrapValue(Angle.f) 
  Angle/360 
  Angle-Int(Angle) 
  If Angle<0 
    ProcedureReturn (Angle+1)*360 
  Else 
    ProcedureReturn Angle*360 
  EndIf 
EndProcedure 
Procedure.f NewXValue( x.f , Angle.f , NbUnite.f )
  ;à utiliser conjointement avec NewZvalue pour calculer une position de <NbUnite> dans la direction <angle> 
  Valeur.f = x + Cos(Angle * 0.0174533) * NbUnite
  ProcedureReturn Valeur
EndProcedure
Procedure.f NewZValue( Z.f , Angle.f , NbUnite.f )
  ;à utiliser conjointement avec NewXvalue pour calculer une position de <NbUnite> dans la direction <angle> 
  Valeur.f = Z - Sin(Angle * 0.0174533) * NbUnite
  ProcedureReturn Valeur
EndProcedure
Procedure GestionCamera(No)
  No = #Coin1
  If Camera\SensRotation
    Camera\AngleX = WrapValue(Camera\AngleX + Camera\SensRotation )
    If (Camera\AngleX % 90)=0
      Camera\SensRotation = 0 
    EndIf
  EndIf
  If GetMenuItemState(#PopupMenu,#MenuPop_SelectionFacette)
    PosX.f = EntityX(No) + (M3D_FacetteWidth(#Matrice) / 2)
    PosZ.f = EntityZ(No) + (M3D_FacetteHeight(#Matrice) / 2)
    PosY.f = M3D_GetGroundHeight(#Matrice,PosX,PosZ)
  Else
    PosX.f = EntityX(No)
    PosY.f = EntityY(No)
    PosZ.f = EntityZ(No)
  EndIf  
  Curseur\HauteurReelleFacette = M3D_GetGroundHeight(#Matrice, PosX, PosZ) 
  
  PosXCamera.f = NewXValue(PosX , Camera\AngleX + Camera\Decalage , Camera\Distance)
  PosYCamera.f = PosY + Camera\Hauteur 
  PosZCamera.f = NewZValue(PosZ , Camera\AngleX + Camera\Decalage , Camera\Distance) 
  
  
  ;positionne la caméra 
  CameraLocate(0 , PosXCamera , PosYCamera , PosZCamera)
  ;oriente la caméra en direction du perso
  CameraLookAt(0 , PosX , PosY + Camera\AngleY, PosZ) 
EndProcedure
;}

;{-Gadgets  
If CreateGadgetList(WindowID(#WINDOW)) And CreateMenu(#MENU, WindowID(#WINDOW)) 
  MenuTitle("Fichier")
  MenuItem(#MENU_Open, "Ouvrir")
  MenuItem(#MENU_Close, "Fermer")
  MenuItem(#MENU_CloseAll, "Fermer tous")
  MenuBar()
  MenuItem(#MENU_Quit, "Quitter")    
  MenuTitle("Textures")
  MenuItem(#MENU_ChargerTexture, "Charger")    
  MenuTitle("Fenêtres")
  MenuItem(#MENU_TileV, "Verticale")
  MenuItem(#MENU_TileH, "Horizontale")
  MenuItem(#MENU_Cascade, "Cascade")
  MenuItem(#MENU_Previous, "Précédente")
  MenuItem(#MENU_Next, "Suivante")
  
  
  MDIGadget(#GADGET_MDI, 0, 0, 0, #MENU, 2, #MENU_FirstMDI, #PB_MDI_AutoSize) 
  AddGadgetItem(#GADGET_MDI, -1, "Vue 3D") 
  hCont = ContainerGadget(0,0,0,#ScreenWidth+5, #Screenheight+5, #PB_Container_Double) 
  Element = GetGadgetState(#GADGET_MDI) 
  SetGadgetItemAttribute(#GADGET_MDI, Element, #PB_MDI_ItemWidth , #ScreenWidth)
  SetGadgetItemAttribute(#GADGET_MDI, Element, #PB_MDI_ItemHeight, #Screenheight)
  
  If OpenWindowedScreen( hCont, 0, 0, #ScreenWidth, #Screenheight, 0, 0, 0 ) = 0 
    MessageRequester( "Erreur" , "Impossible d'ouvrir l'écran " , 0 ) 
    End 
  EndIf 

  
  Texture()
  CloseGadgetList() 
  If CreatePopupMenu(#PopupMenu)
    ;MenuTitle("Aide")
    MenuItem(#MenuPop_SelectionFacette,"Selection Facette")
    MenuItem(#MenuPop_RotationTextureDR,"Rotation texture à droite")
    MenuItem(#MenuPop_RotationTextureGA,"Rotation texture à gauche")
    MenuItem(#MenuPop_AppliquerTexture,"Appliquer texture")
    MenuItem(#MenuPop_FixerHauteur,"Fixer Hauteur")
  EndIf  
  ;GestionMenu()
  AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_Down    , #Shortcut_CTRL_Down  ) 
  AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_Up      , #Shortcut_CTRL_Up    ) 
  AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_Left    , #Shortcut_CTRL_Left  ) 
  AddKeyboardShortcut(0, #PB_Shortcut_Control | #PB_Shortcut_Right   , #Shortcut_CTRL_Right ) 
  AddKeyboardShortcut(0, #PB_Shortcut_Alt     | #PB_Shortcut_Down    , #Shortcut_ALT_Down   )
  AddKeyboardShortcut(0, #PB_Shortcut_Alt     | #PB_Shortcut_Up      , #Shortcut_ALT_Up     )
  AddKeyboardShortcut(0, #PB_Shortcut_Alt     | #PB_Shortcut_Left    , #Shortcut_ALT_Left   )
  AddKeyboardShortcut(0, #PB_Shortcut_Alt     | #PB_Shortcut_Right   , #Shortcut_ALT_Right  ) 
  AddKeyboardShortcut(0,                        #PB_Shortcut_Down    , #Shortcut_Down       )
  AddKeyboardShortcut(0,                        #PB_Shortcut_Up      , #Shortcut_Up         )
  AddKeyboardShortcut(0,                        #PB_Shortcut_Left    , #Shortcut_Left       )
  AddKeyboardShortcut(0,                        #PB_Shortcut_Right   , #Shortcut_Right      )
  AddKeyboardShortcut(0, #PB_Shortcut_Shift   | #PB_Shortcut_Shift   , #Shortcut_SHIFT      )
  AddKeyboardShortcut(0, #PB_Shortcut_Shift   | #PB_Shortcut_Down    , #Shortcut_SHIFT_Down )
  AddKeyboardShortcut(0, #PB_Shortcut_Shift   | #PB_Shortcut_Up      , #Shortcut_SHIFT_Up   )
  AddKeyboardShortcut(0, #PB_Shortcut_Shift   | #PB_Shortcut_Left    , #Shortcut_SHIFT_Left )
  AddKeyboardShortcut(0, #PB_Shortcut_Shift   | #PB_Shortcut_Right   , #Shortcut_SHIFT_Right)

EndIf 
;}

;{-Barre d'outils
If CreateToolBar(#TOOLBAR, WindowID(#WINDOW))
  ToolBarStandardButton(#MENU_Open, #PB_ToolBarIcon_Open)
  ToolBarStandardButton(#MENU_Close, #PB_ToolBarIcon_Delete)
  ToolBarSeparator()
  ToolBarStandardButton(#MENU_Previous, #PB_ToolBarIcon_Undo)
  ToolBarStandardButton(#MENU_Next, #PB_ToolBarIcon_Redo)
EndIf
;}

;{-Barre de status
If CreateStatusBar(0, WindowID(0))
  AddStatusBarField(100)
  AddStatusBarField(100)
  AddStatusBarField(100)
EndIf
StatusBarText(0, 0, "position curseur")
StatusBarText(0, 1, "dispo")
StatusBarText(0, 2, "No texture") 
;}

;{- Textures
CreateTexture(#Coin1,128, 128) 
StartDrawing(TextureOutput(#Coin1))
  Box(0,0,TextureWidth(#Coin1),TextureHeight(#Coin1),RGB(255, 100, 100))
StopDrawing() 
CreateTexture(#Matrice, 256, 256) 
StartDrawing(TextureOutput(#Matrice)) 
  Box(0, 0, TextureWidth(#Matrice), TextureHeight(#Matrice), RGB(250, 250, 250))
StopDrawing()

M3D_PrepareMatrixTexture(#Matrice,#Matrice,1,1) 
;}

;{- Matières
CreateMaterial(#Matrice, TextureID(#Matrice))
MaterialAmbientColor(#Matrice,RGB(55,55,55))
CreateMaterial(#Coin1, TextureID(#Coin1)) 
MaterialAmbientColor(#Coin1,RGB(220,220,220))
;}

;{- Mesh
CreateMesh (#Pointe) 
SetMeshData(#Pointe, #PB_Mesh_Vertices     , ?FlechePoints       , 5)
SetMeshData(#Pointe, #PB_Mesh_Triangles    , ?FlecheTriangles    , 4)
SetMeshData(#Pointe, #PB_Mesh_UVCoordinates, ?FlecheTextures     , 5)
SetMeshData(#Pointe, #PB_Mesh_Normals      , ?FlecheNormales     , 5)
M3D_CreateMeshMatrix(#Matrice,5000,5000,50,50,1)
;}

;{-Entity
;/Matrice
CreateEntity(#Matrice, MeshID(#Matrice), MaterialID(#Matrice))
EntityLocate(#Matrice, M3D_MatrixWidth(#Matrice) / 2, 0, M3D_MatrixHeight(#Matrice) / 2)
M3D_NormalesMatrix(#Matrice)
;/Curseur
Curseur\AngleX          = #AngleInitial
Curseur\Sens            = 0
Curseur\HauteurFacette  = 0
Curseur\TailleX         = M3D_FacetteWidth(#Matrice)
Curseur\TailleZ         = M3D_FacetteHeight(#Matrice)
Curseur\NbFacetteX      = 1
Curseur\NbFacetteZ      = 1
Curseur\FacetteX        = M3D_NbFacetteX(#Matrice) / 2
Curseur\FacetteZ        = M3D_NbFacetteZ(#Matrice) / 2
Curseur\Epaisseur       = 1
Curseur\RayonRoue       = 4
tr=Curseur\RayonRoue * 4
CreateEntity(#Coin1,MeshID(#Pointe),MaterialID(#Coin1))
ScaleEntity(#Coin1,tr,tr,tr)
EntityLocate(#Coin1, M3D_MatrixWidth(#Matrice) / 2, 0, M3D_MatrixHeight(#Matrice) / 2)
CreateEntity(#Coin2,MeshID(#Pointe),MaterialID(#Coin1))
ScaleEntity(#Coin2,tr,tr,tr)
CreateEntity(#Coin3,MeshID(#Pointe),MaterialID(#Coin1))
ScaleEntity(#Coin3,tr,tr,tr)
CreateEntity(#Coin4,MeshID(#Pointe),MaterialID(#Coin1))
ScaleEntity(#Coin4,tr,tr,tr)
;}

;{-Camera
Camera\Hauteur=269 
Camera\Distance=345 
Camera\AngleX = #AngleInitial
Camera\AngleY = 0
Camera\Decalage = 160
Camera\VitesseRotation = 2
Camera\RenderMode[0]="WireFrame"
Camera\RenderMode[1]="Textured"
If CreateCamera(#Camera, 0, 0 , 100, 100) = 0
  Erreur("Camera")
  End
EndIf  
CameraLocate(#Camera, 0, 200, 0)
CameraRenderMode(0,#PB_Camera_Wireframe)
RotateCamera(#Camera, Camera\AngleX, 0, 0)
CameraBackColor(#Camera, RGB(0, 0, 255))
;}

;{- Light
AmbientColor(RGB(255, 255, 255)) 
CreateLight(0,RGB(185, 185, 185))
;}


;{- Boucle principale

Repeat 
  GestionCamera(#Coin1)
  LightLocate(0,EntityX(#Coin1) , Curseur\HauteurFacette + 350, EntityZ(#Coin1))
  RenderWorld()
  FlipBuffers() 
  Delay(1)  
  Window()
Until Quit
;}

;{- Datas
DataSection
FlechePoints:
Data.f 0,0,0
Data.f -0.5,1,0.5
Data.f 0.5,1,0.5
Data.f 0.5,1,-0.5
Data.f -0.5,1,-0.5

FlecheTriangles:
Data.w 1,0,4
Data.w 4,0,3
Data.w 3,0,2
Data.w 2,0,1

FlecheTextures:
Data.f 0,0
Data.f 1,1
Data.f 1,1
Data.f 1,1
Data.f 1,1

;A revoir 
FlecheNormales:
Data.f 0,-10,0
Data.f 0,10,0
Data.f 0,10,0
Data.f 0,10,0
Data.f 0,10,0
EndDataSection
;} 
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Avec le beau temps , j'ai du mal à progresser sur ce code , aujourd'hui j'ai ajouté deux trois trucs , je mets le source à disposition si à tout hasard quelqu'un était intéressé pour ajouter des trucs ou simplement pour tester :)

http://perso.wanadoo.fr/comtois/sources/MDI_V3.zip


C'est un embryon , il y a tout à faire , mais on peut déjà commencer à modeler une matrice .


Remarque : Dans ce code j'utilise la librairie M3D_Matrix3D qui se trouve ici :

http://perso.wanadoo.fr/comtois/M3D_Matrix3D.htm


Et bien sûr toutes les remarques ,les critiques ,les coups de mains , les commentaires ,les suggestions etc seront le bienvenu.
neocodex
Messages : 17
Inscription : ven. 23/juil./2004 16:38

Message par neocodex »

je travaille sur un editeur de monde, et je dois dire que ton code pour les matrice m'intéresse beaucoup, il est basé sur un systéme de plug in, d'ici quelque jour je met une premiére version beta sur le web, pour l'instant je cherche une méthode pour le .mesh...
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Tu en avais déjà fait un si je ne m'abuse ?
Si c'est toi , je l'avais testé , je l'avais trouvé bien fichu , j'attends de voir cette nouvelle version :)

Sinon que veux-tu dire par méthode pour le .mesh ?
neocodex
Messages : 17
Inscription : ven. 23/juil./2004 16:38

Message par neocodex »

Tout a fait, mais je ne l'ai jammais fini...
Pour le *.mesh, sur le site de ogre j'ai télécharger le plug in pour milkshape, malheureusement purebasic n'accepte pas la version 1.14.0
la version 1.11.0 je n'arrive pas a la faire fonctionner et comme je n'aime pas trop les datas, je cherche une méthode pour arriver a avoir des objet prédéfinis style directx, j'ai aussi essayer ximporter pour voir, il me renvoie sur une erreur "c:\.........\...\icone21" quelque chose comme ça
J'ai regardé ta méthode pour les matrices, elle fonctionne bien sur mon programme je l'ai implenté sous la forme d'un plug in, mais pour aller plus loin j'ai besoin de ton aval...
La gestion des lampes est términée, ainsi que les cameras et gestion de la souris...
Bientot sur le web pour vous donner une idée...
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Normalement ces convertisseurs sont compatibles avec la version actuelle de purebasic , ça ne fonctionne pas pour toi ?

http://perso.wanadoo.fr/comtois/sources ... 0.11.1.zip

Sinon j'avais fait un petit prog avec darkbasic pour récupérer les datas et faire des mesh , si ça t'intéresse ,je peux te passer le source , je crois que tu as darkbasic aussi ? en fait c'est assez simple , tu charges un objet 3D , et ensuite tu fais un memblock from mesh , et tu n'as plus qu'à lire les vertex , les triangles ,etc ., pour les animations ,je ne sais pas ,je n'ai pas regardé .
J'ai regardé ta méthode pour les matrices, elle fonctionne bien sur mon programme je l'ai implenté sous la forme d'un plug in, mais pour aller plus loin j'ai besoin de ton aval...
tu l'as "implenté" c'est à dire ? tu as écrit ta propre version ou tu utilises ma librairie ?

si tu as écrit ta propre version , ça m'intéresse de voir ça :)

Pour ce qui concerne mon aval ( à quel sujet d'ailleurs ? ), tu n'as pas à l'attendre ,je ne me sens pas propriétaire de quoi que ce soit , et sûrement pas de ce que je rends public :)


Bon courage pour la suite .

[Edit]

Petite mise à jour
Dans cette version
- gestion de la caméra corrigée
- l'écran n'est plus limité à 800x600 , mais à la taille du bureau window.
- la sauvegarde et le chargement d'une matrice fonctionne ( ça sera encore modifié pour gérer les couleurs , et la touche "annuler" n'est pas gérée )

dans la prochaine version , je vais gérer les textures , pour l'instant , il n'y a rien de fait ,juste des essais .

http://perso.wanadoo.fr/comtois/sources/MDI_V3.zip
neocodex
Messages : 17
Inscription : ven. 23/juil./2004 16:38

Message par neocodex »

j' ai milkshape, avec la version 1.14 de ogre il apparait dans le menu export, ensuite je sauvegarde et l'importe dans pure basic, ça plante.
quand a la version 0.11.0 elle apparait pas dans le menu export de milkshape.
J'utilise ta propre librairie, c'est pour ça que je te demandais ta permision.
Lundi je met une premiere monture en ligne pout te donner une idée.
Ce prog s'appelera CUBE et il va me servir a créer des mondes pour des wargames en 3d, styles DBM, sur ce vieux site il y encore une ancienne version ecrit en blitz et darkbasic, c'est tellement lent que j'ai abandonné
http://neocodex.site.voila.fr/index.html
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

ça fait plaisir d'apprendre que ma librairie va servir à quelqu'un :)

Si tu as des remarques à son sujet n'hésite pas .
Si tu as des idées de fonctions qui pourraient simplifier la vie et si c'est dans mes cordes , je les ajouterai à la librairie .

J'ai une version en préparation , il y a deux commandes supplémentaires

la première permet de définir soi même les coordonnées UV d'une texture .
la deuxième permet de créer des "empreintes" c'est à dire qu'on peut copier une partie d'une matrice sur une autre matrice ,on peut copier soit la hauteur des facettes , la couleur , les textures , etc ...

le but c'est de pouvoir créer des "brosses 3D" dans l'éditeur

Après avoir définit une brosse , on peut l'appliquer à une matrice , ça permet de dupliquer rapidement des motifs .

Les fonctions sont opérationnelles ,j'avais commencé à écrire des exemples pour montrer comment ça fonctionne ,mais avec le beau temps j'ai mis ça de côté, je tourne au ralenti sur l'ordi :)

Si ça t'intéresse , je peux mettre la nouvelle librairie sur mon site , je ne l'ai pas encore beaucoup testé ,c'est pour ça qu'elle n'est pas encore en ligne .
neocodex
Messages : 17
Inscription : ven. 23/juil./2004 16:38

Message par neocodex »

Oui n'hésite pas, de mon coté je mets le programme et le code a disposition, je suis en train de refaire le site, pour ce lundi ce sera ok :)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

la dernière version est dispo ici :
http://perso.wanadoo.fr/comtois/sources ... trix3D.zip

Nouvelles fonctions

ProcedureDLL.l M3D_CopyFacette(Source.l, StartXS.l, StartZS.l, EndXS.l, EndZS.l, Destination.l, StartXD.l, StartZD.l,Options.l)

Source => No de la matrice source ( ou brosse , ou empreinte )
StartXS /StartZS => Coordonnées de la première facette
EndXS/EndZS => Coordonnées de la dernière facette
ça permet de ne copier qu'une partie d'une matrice .
(je mettrai en options StartXS / StartZS etc , si ces paramètres ne sont pas spécifiés c'est que la matrice source est entièrement sélectionnée)

Destination => No de la matrice à modifier .
StartXD/StartZD => Position de départ pour recopier la source .

Options :

#M3D_CopyVertex = 1
Seule la hauteur des vertex est modifiée , les textures et les couleurs sont conservées .
#M3D_CopyTexture = 2
seules les textures sont copiées , les hauteurs et les couleurs sont conservées .
#M3D_CopyColor = 4
seules les couleurs sont copiées , les hauteurs et les textures sont conservées .
#M3D_CopyAll = 16
les hauteurs , les textures , les couleurs sont copiées , c'est une copie conforme à la source .

CopyVertex , CopyTexture et CopyColor peuvent être combinés en faisant un OU .
Sinon CopyAll correspond à la somme des 3 .

je n'ai pas fait de résidents pour ces constantes .

Si j'ai le courage et une heure , je ferai un exemple ce week-end .

l'autre fonction :

ProcedureDLL.l M3D_TextureFacetteUV(No.l, X.l, Z.l, u.f, V.f,U1.f,V1.f)
No => No de la matrice
X/Z => Coordonnées de la facette
U/V/U1/V1 => Coordonnées de la texture

ce qui donne pour les 4 sommets de la facette :

Code : Tout sélectionner

U/V        U1/V


U/V1      U1/V1
là aussi , il faudra que je fasse un exemple .

Sinon les autres fonctions n'ont pas changées .
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

je veux pas vous casser le morale ! mais n'avezvous pas l'angoisse
que la future version de pure chamboule la vision que nous avons de la 3D
et par la mem rende obsolette votre travaille ?? 8O :)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Pas grave , au contraire ,ça ne me déplairait pas de voir une bonne gestion des matrices dans purebasic .


disons que ça occupe en attendant de voir du mieux en 3D :)
Répondre