002 :
Code : Tout sélectionner
ligne71 : IMA
Code : Tout sélectionner
La fenêtre s'ouvre pour se refermer aussitôt
066 : Réglé !
067 : Pas Réglé !
220 : Pas Réglé !
Code : Tout sélectionner
ligne71 : IMA
Code : Tout sélectionner
La fenêtre s'ouvre pour se refermer aussitôt
Code : 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()
EndProcedure
Code : 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))
EndProcedure
Code : 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()