[n3xt-D] un moteur pour PureBasic

Généralités sur la programmation 3D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

vous etes en train de nous préparer un beau jouet là ! :)
Anonyme

Message par Anonyme »

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
Anonyme

Message par Anonyme »

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)
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Cpl.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
J'avais un peu omis l'instruction qui est associée. J'ai mis à jour les archives de la version 12, et ecris un
petit exemple qui est dedans (le 049) pour illustrer cela.
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)
Il suffit de parcourir l'arbre hiérarchique que tu créé, avec les instructions:

Code : Tout sélectionner

iNodeNumChildren()
iNodeChildren()
si j'ai bien compris le sens de ta question ;)
Force et sagesse...
Anonyme

Message par Anonyme »

Impec ^^

Par contre ( je vais publier une archive dans les minutes qui suivent )
j'ai essayé d'appliquer xeffect avec le lightmapping , mais c'est noir ^^
rien qui s'affiche.
Anonyme

Message par Anonyme »

j'avais oublié de mettre le dossier des shaders... :/

par contre impossible de déplacer une shadowlight ?
Anonyme

Message par Anonyme »

j'ai toujours le même soucis pour avoir une caméra sans projection 3D.
Anonyme

Message par Anonyme »

iPickCamera() ne marche pas correctement lorsque le viewport est redimensionné.
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Cpl.Bator a écrit :j'avais oublié de mettre le dossier des shaders... :/

par contre impossible de déplacer une shadowlight ?
Il n'y a pas d'instruction pour cela, mais je vais voir pour en créer une. Les XEffect méritent de murir
et il y a pas mal de boulot dessus en fait, mais le potentiel est là ;)

Cpl.Bator a écrit :iPickCamera() ne marche pas correctement lorsque le viewport est redimensionné.
Je vais corriger, en effet cela ne prend pas en compte le redimensionnement éventuel.
Cpl.Bator a écrit :j'ai toujours le même soucis pour avoir une caméra sans projection 3D.
Un petit code, pour tester et voir comment arriver au resultat et debbuguer éventuellement ;)
Force et sagesse...
Anonyme

Message par Anonyme »

Bien sur :
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()
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

En fait c'est parce-que tu as un petit point en guise de représentation sur l'écran an bas à gauche ?

Par exemple remplace W et H par W/60 et H/60 par exemple.
Force et sagesse...
Anonyme

Message par 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 )


@+
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Ici, ça ne fonctionne pas du tout. J'ai une carte NVidia Quadro NVS 55/280 PCI. Même si c'est peu courant, en général, je n'ai aucun souci.
J'ai l'erreur "L'application n'a pas réussi à s'initialiser correctement (0xc0150002)" sur tous les exemples.
dakota
Messages : 20
Inscription : sam. 06/juin/2009 22:01

Message par dakota »

@djes

J'ai eu le meme problème, chez moi c'était l'antivirus "Norton Antivirus".
pour info j'ai eu le prolème au boulot cette fois avec "McAfee".
Enfin ,moi je dis ça des fois que ...
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Merci pour l'info, je vais essayer. J'ai désactivé MacAfee... Mais je ne peux pas le désinstaller ici... C'est curieux quand même!
Répondre