[n3xt-D] un moteur pour PureBasic
- 
				Anonyme
 
- 
				Anonyme
 
Suggestion :
*Scene est un pivot parent de plusieurs meshs
ce pivot me donne accès à la scene complete
peut on pour n'importe quelle fonction du moteur parcourir les enfants
et appliquer les modifications ou avoir accès au données ?
(ici la AABB)
			
			
									
									
						Code : Tout sélectionner
*Scene = iLoadLightMappingScene("medias/SimpleBox.m3d")
  Global ab.AABBOX
  iNodeBoundingBox(*Scene,  @ab)
; set global physical dimension scene 
  iSetWorldSize(ab\MinEdge\x, ab\MinEdge\y, ab\MinEdge\z, ab\MaxEdge\x, ab\MaxEdge\y, ab\MaxEdge\z)
Debug ab\MinEdge\x
End *Scene est un pivot parent de plusieurs meshs
ce pivot me donne accès à la scene complete
peut on pour n'importe quelle fonction du moteur parcourir les enfants
et appliquer les modifications ou avoir accès au données ?
(ici la AABB)
- 
				tmyke
 - Messages : 1554
 - Inscription : lun. 24/juil./2006 6:44
 - Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E
 
J'avais un peu omis l'instruction qui est associée. J'ai mis à jour les archives de la version 12, et ecris unCpl.Bator a écrit :Recoucou
comment je peut utilisé ceci :
; TEXTURE CLAMP
#ETC_REPEAT = 0
#ETC_CLAMP=1
#ETC_CLAMP_TO_EDGE=2
#ETC_CLAMP_TO_BORDER=3
#ETC_MIRROR=4
petit exemple qui est dedans (le 049) pour illustrer cela.
Il suffit de parcourir l'arbre hiérarchique que tu créé, avec les instructions:Cpl.Bator a écrit :Suggestion :
Code : Tout sélectionner
*Scene = iLoadLightMappingScene("medias/SimpleBox.m3d") Global ab.AABBOX iNodeBoundingBox(*Scene, @ab) ; set global physical dimension scene iSetWorldSize(ab\MinEdge\x, ab\MinEdge\y, ab\MinEdge\z, ab\MaxEdge\x, ab\MaxEdge\y, ab\MaxEdge\z) Debug ab\MinEdge\x End
*Scene est un pivot parent de plusieurs meshs
ce pivot me donne accès à la scene complete
peut on pour n'importe quelle fonction du moteur parcourir les enfants
et appliquer les modifications ou avoir accès au données ?
(ici la AABB)
Code : Tout sélectionner
iNodeNumChildren()
iNodeChildren()
Force et sagesse...
						- 
				Anonyme
 
- 
				Anonyme
 
- 
				tmyke
 - Messages : 1554
 - Inscription : lun. 24/juil./2006 6:44
 - Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E
 
Il n'y a pas d'instruction pour cela, mais je vais voir pour en créer une. Les XEffect méritent de murirCpl.Bator a écrit :j'avais oublié de mettre le dossier des shaders... :/
par contre impossible de déplacer une shadowlight ?
et il y a pas mal de boulot dessus en fait, mais le potentiel est là
Je vais corriger, en effet cela ne prend pas en compte le redimensionnement éventuel.Cpl.Bator a écrit :iPickCamera() ne marche pas correctement lorsque le viewport est redimensionné.
Un petit code, pour tester et voir comment arriver au resultat et debbuguer éventuellementCpl.Bator a écrit :j'ai toujours le même soucis pour avoir une caméra sans projection 3D.
Force et sagesse...
						- 
				Anonyme
 
Bien sur :
ligne 241.
			
			
									
									
						ligne 241.
Code : Tout sélectionner
IncludePath "includes"   :   IncludeFile "n3xtD_PB.pbi"
IncludePath "./"
ExamineDesktops()
Global W.i = DesktopWidth(0)
Global H.i = DesktopHeight(0)
; 
; IncludeFile "Interface.pbi.pb"
; 
; 
Procedure Inteface_CreateMenu()
*menu.IGUIContextMenu =iAddMenuGUI()
  iAddItem_GUIContexMenu(*menu, "Fichier", -1, #True, #True)
  iAddItem_GUIContexMenu(*menu, "Edition", -1, #True, #True)
  iAddItem_GUIContexMenu(*menu, "Collector", -1, #True, #True)
  iAddItem_GUIContexMenu(*menu, "A propos", -1, #True, #True)
  
    *submenu=iGUIContexMenu_SubMenu(*menu, 0)
    iAddItem_GUIContexMenu(*submenu, "Ouvrir", 101)
    iAddItem_GUIContexMenu(*submenu, "Sauvegarder", 102)
    iAddItem_GUIContexMenu(*submenu, "Quitter", 103)
  
    *submenu=iGUIContexMenu_SubMenu(*menu, 2)
    iAddItem_GUIContexMenu(*submenu, "Importer un mesh", 501)
    iAddItem_GUIContexMenu(*submenu, "Ouvrir la bibliotheque", 502)
    iAddItem_GUIContexMenu(*submenu, "Importer une bibliotheque", 503)
;iAddWindowGUI(0,42,256,H,"Texture",#True)
EndProcedure
  
Procedure Interface_DrawGroundGrid(Size.l=100)
     For z = -Size/2 To Size/2
      For x = -Size/2 To Size/2
           iDrawLine3D(x,0,z,x+1,0,z,$505050) 
           iDrawLine3D(x,0,z,x,0,z+1,$505050)        
      Next 
     Next  
     iDrawLine3D(Size/2+1,0,Size/2+1,-Size/2,0,Size/2+1,$505050) 
     iDrawLine3D(Size/2+1,0,Size/2+1,Size/2+1,0,-Size/2,$505050) 
EndProcedure
Procedure Interface_DrawXYGrid(Size.l=100)
     For y = -Size/2 To Size/2
      For x = -Size/2 To Size/2
           iDrawLine3D(x,y,0,x+1,y,0,$505050) 
           iDrawLine3D(x,y,0,x,y+1,0,$505050)        
      Next 
     Next  
     iDrawLine3D(Size/2+1,Size/2+1,0,-Size/2,Size/2+1,0,$505050) 
     iDrawLine3D(Size/2+1,Size/2+1,0,Size/2+1,-Size/2,0,$505050) 
EndProcedure
Procedure Interface_DrawYZGrid(Size.l=100)
EndProcedure
  
Procedure ContextMenu()
  *menu =iAddContexMenuGUI(iGetMouseX(),iGetMouseY(), 350,  250, #Null, 49)
  iAddItem_GUIContexMenu(*menu, "text1",50)
  iAddItem_GUIContexMenu(*menu, "text2",51)
  iAddSeparator_GUIContexMenu(*menu)
  iAddItem_GUIContexMenu(*menu, "text3", 52, #True, #True, #False )
  iAddItem_GUIContexMenu(*menu, "text4", 55)
    ; sub menu
    *submenu=iGUIContexMenu_SubMenu(*menu, 3)
    iAddItem_GUIContexMenu.l(*submenu, "subText31", 53, #True, #False, #True )
    iAddItem_GUIContexMenu.l(*submenu, "subText32", 54)
EndProcedure
  
Procedure Interface_TextureMenu()
EndProcedure
  
ProcedureC GUIEventCallBack(eventGUI.l, idGUI.l,  *GUIElement.IGUIElement) 
  If( eventGUI=#EGET_MENU_ITEM_SELECTED)
      idx.l = iGUIContexMenu_ItemSelected(*GUIElement)
      id.l  = iGUIContexMenu_ItemCommandId(*GUIElement,idx)
      
     
      Select id
        Case 103 : End 
      
      EndSelect
      
      
  EndIf
       
EndProcedure
Structure rect_render
  min.VECTOR2
  max.VECTOR2
EndStructure
iSetAntiAlias(#True)
*app = iCreateGraphics3D(W,H,32,1)
;-----------------------------------
; load font png
iLoadFont("font.png")
Global *font.IGUIFont = iGetFont()
Global view_xyz.rect_render
VECTOR2_(view_xyz\min,(W/2)+5,(H/2)+5)
VECTOR2_(view_xyz\max,W-2,H-2)
Global view_xz.rect_render
VECTOR2_(view_xz\min,2,42)
VECTOR2_(view_xz\max,(W/2)-5,(H/2)-5)
Global view_xy.rect_render
VECTOR2_(view_xy\min,(W/2)+5,42)
VECTOR2_(view_xy\max, W-2, (H/2)-5)
Global view_yz.rect_render
VECTOR2_(view_yz\min,2,(H/2)+5)
VECTOR2_(view_yz\max, (W/2)-5, H-2)
Inteface_CreateMenu()
iGUIEventCallBack(@GUIEventCallBack())
  
;-----------------------------------------
; APPLICATION CAMERA 
;-----------------------------------------
Global *cam3D.ICamera = iCreateCamera( )
iPositionNode(*cam3D, 10,10,10)
iPointTargetNode(*cam3D,  0,0,0)
Global *camXZ.ICamera = iCreateCamera( )
Mat.MATRIX
iPositionNode(*camXZ, 0,20,0)
iPointTargetNode(*camXZ,  0,0,0)
Global *camXY.ICamera = iCreateCamera( )
iPositionNode(*camXY, 0,0,-20)
iPointTargetNode(*camXY,  0,0,0)
Global *camYZ.ICamera = iCreateCamera( )
iPositionNode(*camYZ, 0,0,-20)
iPointTargetNode(*camYZ,  0,0,0)
c=iCreateCube(1)
iScaleMeshBuffer(iMeshGeometry(c),10,1,10)
iColorGUI(2,$FFCACACA)
iColorGUI(1,$FFCACACA)
iColorGUI(5,$FFCACAFF)
Repeat
;   If iGetMouseEvent(#MOUSE_BUTTON_RIGHT)
;     ContextMenu()
;   EndIf 
 
  If iGetKeyDown(#KEY_ESCAPE)
    Quit=1
  EndIf
  If iGetKeyDown(#KEY_ARROW_UP)
    iMoveNode(*cam3D, 0,0,0.5)
  EndIf
  If iGetKeyDown(#KEY_ARROW_DOWN)
    iMoveNode(*cam3D, 0,0,-0.5)
  EndIf
If iGetMouseX()>W/2+5 And iGetMouseY()>H/2+5
If iGetMouseEvent(#MOUSE_BUTTON_LEFT)
   iTurnNode(*cam3D, iGetDeltaMouseY()*0.5, iGetDeltaMouseX()*0.5,0)
EndIf 
  If iGetMouseEvent(#MOUSE_BUTTON_RIGHT)
     iMoveNode(*cam3D,iGetDeltaMouseX()*0.2,0,0)
  EndIf 
EndIf 
  
  iBeginScene(0,0,0)
      
   
    iSetViewPort(view_xyz\min\x,view_xyz\min\y,view_xyz\max\x,view_xyz\max\y)
    iActiveCamera(*cam3D)
    iDrawScene()
    Interface_DrawGroundGrid(50)
    
  
    iSetViewPort(view_xz\min\x,view_xz\min\y,view_xz\max\x,view_xz\max\y)
    iActiveCamera(*camXZ)
    iDrawScene()
    Interface_DrawGroundGrid(50)
    
    iSetViewPort(view_xy\min\x,view_xy\min\y,view_xy\max\x,view_xy\max\y)
    iActiveCamera(*camXY)
    iDrawScene()
    Interface_DrawXYGrid(50)
   
    Mat.MATRIX
    iProjectionMatrixOrthoLH(W,H,@Mat,0.01,1000)
    iProjectionMatrixCamera(*camYZ,@Mat,#True) 
    iSetViewPort(view_yz\min\x,view_yz\min\y,view_yz\max\x,view_yz\max\y)
    iActiveCamera(*camYZ)
    iDrawScene()
    
    iSetViewPort( 0,0,W,H)
    
    
    iDrawRectangle2D((W/2)-5,42,(W/2)+5,H,$FFCACACA,$FFCACACA,$FFCACACA,$FFCACACA)
    iDrawRectangle2D(0,(H/2)-5,W,(H/2)+5,$FFCACACA,$FFCACACA,$FFCACACA,$FFCACACA)
    
    iDrawGUI()
    
  iEndScene()      
    
Until Quit=1
iFreeEngine()- 
				Anonyme
 
ca marche , par contre la caméra ne se comporte plus comme une caméra 3D , mais je vais pouvoir me débrouillé. 
- ivisiblenode(), désactive l'affichage , mais aussi le body de newton si il y en a un , un flag pour avoir le choix ?
- Commandes pour avoir une representation fillaire d'un node ( avec ou sans back face culling )
@+
			
			
									
									
						- ivisiblenode(), désactive l'affichage , mais aussi le body de newton si il y en a un , un flag pour avoir le choix ?
- Commandes pour avoir une representation fillaire d'un node ( avec ou sans back face culling )
@+