002 :
Code : Tout sélectionner
ligne71 : IMACode : Tout sélectionner
La fenêtre s'ouvre pour se refermer aussitôt066 : Réglé !
067 : Pas Réglé !
220 : Pas Réglé !
Code : Tout sélectionner
ligne71 : IMACode : Tout sélectionner
La fenêtre s'ouvre pour se refermer aussitôtCode : Tout sélectionner
MaScene3D = iCreateScene()
MaScene2D = iCreateScene()
iSetCurrentScene(MaScene3D)
iCreateCube(10) ; Dans MaScene3D
iSetCurrentScene(MaScene2D)
iCreateSprite3D("spr.png",10) ; Dans MaScene2D
iSetCamera3D(Parametres...)
iDrawScene(MaScene3D)
iSetCamera2D(Parametres...)
iDrawScene(MaScene2D)Coolj'ai trouvé , il faut jouer avec la couleur emisive du mesh ! la galère, mais ca claque
As-tu regardé l'exemple 047, qui permet de créer plusieurs scenes manager et des utiliser ?petite suggestion , je suis en train de me faire un Lens Flare.
il faut que je sépare la scene 3D de la scene 2D , et que je fasse un rendu de chaque séparément , la 3D , puis la 2D.
cela implique que je dois stocker toute mes nodes 3D dans une liste , idem pour la 2D.
je dois switché la visibilité des nodes suivant le rendu ( rendu 3D , je desactive les nodes 2D...)
je propose une sorte de "scene manager"
Oui, on ecris par exempleje n'arrive pas à faire fonctionner iProjectedX() & iProjectedY() , ca renvois bien en théorie les coordonnées écran d'un node ?
Code : Tout sélectionner
yy.l=iProjectedY(*mesh)
xx.l=iProjectedX(*mesh)
iDrawText(*font, "TEXTE"  ,  XX,YY, 0,0, $ff00ffff)
J'avais pas vu ^^tmyke a écrit : Cpl.Bator
Coolj'ai trouvé , il faut jouer avec la couleur emisive du mesh ! la galère, mais ca claque
As-tu regardé l'exemple 047, qui permet de créer plusieurs scenes manager et des utiliser ?petite suggestion , je suis en train de me faire un Lens Flare.
il faut que je sépare la scene 3D de la scene 2D , et que je fasse un rendu de chaque séparément , la 3D , puis la 2D.
cela implique que je dois stocker toute mes nodes 3D dans une liste , idem pour la 2D.
je dois switché la visibilité des nodes suivant le rendu ( rendu 3D , je desactive les nodes 2D...)
je propose une sorte de "scene manager"
C'est trop fragmenté pour illustré le problème , mais j'ai isolé le soucis :tmyke a écrit :Oui, on ecris par exempleje n'arrive pas à faire fonctionner iProjectedX() & iProjectedY() , ca renvois bien en théorie les coordonnées écran d'un node ?Maintenant, un petit code illustrant ton soucis me permettrais d'y voir plus clairCode : Tout sélectionner
yy.l=iProjectedY(*mesh) xx.l=iProjectedX(*mesh) iDrawText(*font, "TEXTE" , XX,YY, 0,0, $ff00ffff)
Code : Tout sélectionner
Procedure iRenderAllScene(*cam,width.l, height.l)
; RENDU 3D
     iScene3DIsVisible( #True)   
     iScene2DIsVisible( #False)
     Set3DCamera(*cam)
     iDrawScene()
; RENDU 2D     
     iScene2DIsVisible( #True)     
     iScene3DIsVisible( #False)
     Set2DCamera(*cam,width, height)
     iDrawScene()
EndProcedureCode : Tout sélectionner
Procedure Set2DCamera(*cam,width.l, height.l)
  Protected Dim mat.f(15)  
  iCameraProjectionMatrix(*cam, @proj_matrix(0))
  iProjectionMatrixOrthoLH( width, height, @mat(0) )
  iProjectionMatrixCamera(*cam,  @mat(0),  #False)
EndProcedure
Procedure Set3DCamera(*cam)
  iProjectionMatrixCamera(*cam,  @proj_matrix(0))
EndProcedureCode : Tout sélectionner
iRenderAllScene(etc...
yy.l=iProjectedY(S)
xx.l=iProjectedX(S)
iDrawText(*font, "TEXTE"  ,  XX,YY, 0,0, $ff00ffff)
Oui, vue que tu semble modifier les valeur dans ton code, il se peut qu'il ai du mal à retrouver ses petitles projections ne marche pas , certainement du à un problème de matrice de vue ou un truc du genre...
matrice pas à jour ?
Cela m'avait déjà effleuré. J'avais peur que cela alourdisse le code, mais en fait il sembleje préconise l'utilisation de commande iBegin3D() & iBegin2D()
Je vais voir pour faire un petit code la dessus d'ici à demain soirCpl.Bator a écrit :Au lieu de posté un gros code dégueulasse , je vais tenté de t'expliquer simplement mon "challenge"
- J'ai une sphère
- J'ai un sprite3D ( pour un hud )
- Une camera en freefly
Je veut que le sprite 3D suivent la sphère tout simplement. le sprite doit être affiché en mode 2D , donc pas de profondeur pour lui.
le fait de switché en 2D/3D fait déconner iProjectedX() & Y()
Code : Tout sélectionner
; Include files 
IncludePath "includes"   :   IncludeFile "n3xtD_PB.pbi"
; Globales
Global	anglex.f, angley.f, flagXDown.w
Global	mox.f, omx.f, moy.l, omy.l
Global *app.l, Quit.l
;----------------------------------------------------------
; open n3xt-D screen
*app = iCreateGraphics3D(800,600)
; << OR >>
;*app = iCreateGraphics3D(800,600, 32, #False, #True, #EDT_DIRECT3D9)
If *app= #Null
  End
EndIf
 
 
  SetCurrentDirectory("media/") 
;-----------------------------------------
; set ambient light
; iAmbientLight( color.l=$ffaaaaaa)
;----------------------------------------
; create light and set position
 *light.ILight = iCreateLight($ffffffff, 45)
 iPositionNode(*light, 0,30,10)
; turn off MipMap
iTextureCreation( #ETCF_CREATE_MIP_MAPS, #False )
;----------------------------------------
 ; load 3D objects 
  Global *obj1.IObject = iLoad3DObject("plane.3ds")
  Global *obj2.IObject = iLoad3DObject("earth.x")
;-----------------------------------------
; create plane
*plane.IMesh =  iCreateMesh(*obj1)
;-----------------------------------------
; create tiger
Global *sphere.IMesh =  iCreateMesh(*obj2)
iPositionNode(*sphere, 0,0.5,5)
iScaleMeshBuffer(iMeshGeometry(*sphere), 1.5,1.5,1.5)
;-----------------------------------------
; create first  camera
Global *cam.ICamera = iCreateCamera( )
iPositionNode(*cam, 0,10,-15)
iTurnNode(*cam, 15,0,0)
;-----------------------------------
; load font png
iLoadFont("courriernew.png")
Global *font.IGUIFont = iGetFont()
iPointNode(*cam, *sphere)
; load logo
*logo.ITexture = iLoadTexture("logo_128.png")
; ---------------------------------------
;           main loop
; ---------------------------------------
Repeat
    
 	; control earth
  If iGetKeyDown(#KEY_ARROW_UP)
    iTranslateNode(*sphere, 0,0,0.5)
    iPointNode(*cam, *sphere)
  EndIf
  If iGetKeyDown(#KEY_ARROW_DOWN)
    iTranslateNode(*sphere, 0,0,-0.5)
    iPointNode(*cam, *sphere)
  EndIf
  If iGetKeyDown(#KEY_ARROW_RIGHT)
    iTranslateNode(*sphere, 0.5,0,0)
    iPointNode(*cam, *sphere)
  EndIf
  If iGetKeyDown(#KEY_ARROW_LEFT)
    iTranslateNode(*sphere, -0.5,0,0)
    iPointNode(*cam, *sphere)
  EndIf
  If iGetKeyDown(#KEY_KEY_R)
    iTranslateNode(*sphere, 0,0.5,0)
    iPointNode(*cam, *sphere)
  EndIf
  If iGetKeyDown(#KEY_KEY_F)
    iTranslateNode(*sphere, 0,-0.5,0)
    iPointNode(*cam, *sphere)
  EndIf
  
  
  
	; move camera with dir key and mouse (left click)
  If iGetMouseEvent(#MOUSE_BUTTON_LEFT)
  		If flagXDown=0
  			omx = iGetMouseX()
  			omy = iGetMouseY()
  			flagXDown=11
  		Else
  			moy = iGetMouseY()-omy
  			angley=(moy/10.0)
  			omy= iGetMouseY()
  			mox = iGetMouseX()-omx
  			anglex=(mox/10.0)
  			omx= iGetMouseX()
  			iTurnNode(*cam, angley, anglex,0)
  		EndIf
  Else
  	 		flagXDown=0
  EndIf
	; if Escape Key, exit	
  If iGetKeyDown(#KEY_ESCAPE)
    Quit=1
  EndIf
  xx.l = iProjectedX(*sphere)
  yy.l = iProjectedY(*sphere)
  	; ---------------
  	;      Render
  	; ---------------
  iBeginScene()
    iDrawScene()
    iDrawText(*font, "DirKey and R/F for move earth",  10,10,0,0, $ff00ffff)
    iDrawRectImage2D(*logo ,xx, yy, 0,0,128,59, $ffffffff, #Null, #True )
  iEndScene()
Until Quit=1
; end
iFreeEngine()