Page 38 sur 48

Re: [n3xt-D] un moteur pour PureBasic

Publié : dim. 11/oct./2009 22:58
par Progi1984
Avec la nouvelle release,

002 :

Code : Tout sélectionner

ligne71 : IMA
003 :

Code : Tout sélectionner

La fenêtre s'ouvre pour se refermer aussitôt
005 : Pas Réglé ! (regarde du coté de la lib Desktop)
066 : Réglé !
067 : Pas Réglé !
220 : Pas Réglé !

Re: [n3xt-D] un moteur pour PureBasic

Publié : lun. 12/oct./2009 11:01
par Anonyme
j'ai trouvé , il faut jouer avec la couleur emisive du mesh ! la galère :D , mais ca claque :mrgreen:

Re: [n3xt-D] un moteur pour PureBasic

Publié : lun. 12/oct./2009 13:01
par Anonyme
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"

ex :

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)

Re: [n3xt-D] un moteur pour PureBasic

Publié : lun. 12/oct./2009 14:27
par Anonyme
je n'arrive pas à faire fonctionner iProjectedX() & iProjectedY() , ca renvois bien en théorie les coordonnées écran d'un node ?

Re: [n3xt-D] un moteur pour PureBasic

Publié : lun. 12/oct./2009 18:11
par tmyke
Progi1984
merci de nouveau pour cette remonté.

sample 2: je cherche, je ne trouve pas pour le moment, d'autant que je n'ai jamais le soucis.
va vraiment falloir que je me décide à installer une distrib Linux...

sample 3: normal, car c'est une application spécifique windows, donc... (iCreateGraphics3DWin)

sample 5: j'ai changé les instructions qui posait problème, avec des instruction portables.

sample 67: bizarre, j'avais réglé le soucis, d'autant que j'avais le plantage moi aussi, ce
qui m'avais permit de mettre le doigt dessus...

sample 200: et 201 aussi d'ailleurs, je suis content, car j'ai trouvé une machine oui j'ai
le soucis ce qui va bien m'aider dans le debug....

A la lumière de tout cela, tout ce qui aura pu être réglé le sera dans la prochaine update, je dirais
à vue de pif vendredi si tout va bien... ;)

Cpl.Bator
j'ai trouvé , il faut jouer avec la couleur emisive du mesh ! la galère :D , mais ca claque :mrgreen:
Cool 8)
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"
As-tu regardé l'exemple 047, qui permet de créer plusieurs scenes manager et des utiliser ?

je n'arrive pas à faire fonctionner iProjectedX() & iProjectedY() , ca renvois bien en théorie les coordonnées écran d'un node ?
Oui, on ecris par exemple

Code : Tout sélectionner

yy.l=iProjectedY(*mesh)
xx.l=iProjectedX(*mesh)
iDrawText(*font, "TEXTE"  ,  XX,YY, 0,0, $ff00ffff)
Maintenant, un petit code illustrant ton soucis me permettrais d'y voir plus clair ;)

Re: [n3xt-D] un moteur pour PureBasic

Publié : lun. 12/oct./2009 18:20
par Progi1984
Que dire de mieux ? Sinon regarde du coté de VirtualBox :) et Merci :) :)

Re: [n3xt-D] un moteur pour PureBasic

Publié : lun. 12/oct./2009 18:41
par Anonyme
tmyke a écrit : Cpl.Bator
j'ai trouvé , il faut jouer avec la couleur emisive du mesh ! la galère :D , mais ca claque :mrgreen:
Cool 8)
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"
As-tu regardé l'exemple 047, qui permet de créer plusieurs scenes manager et des utiliser ?
J'avais pas vu ^^

tmyke a écrit :
je n'arrive pas à faire fonctionner iProjectedX() & iProjectedY() , ca renvois bien en théorie les coordonnées écran d'un node ?
Oui, on ecris par exemple

Code : Tout sélectionner

yy.l=iProjectedY(*mesh)
xx.l=iProjectedX(*mesh)
iDrawText(*font, "TEXTE"  ,  XX,YY, 0,0, $ff00ffff)
Maintenant, un petit code illustrant ton soucis me permettrais d'y voir plus clair ;)
C'est trop fragmenté pour illustré le problème , mais j'ai isolé le soucis :

j'utilise cette procédure pour le rendu :
les sous-procédures sont issue de ton exemple.

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
sous-procedure :

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

si je fait :

Code : Tout sélectionner

iRenderAllScene(etc...
yy.l=iProjectedY(S)
xx.l=iProjectedX(S)
iDrawText(*font, "TEXTE"  ,  XX,YY, 0,0, $ff00ffff)
les projections ne marche pas , certainement du à un problème de matrice de vue ou un truc du genre...
matrice pas à jour ?

mais je vais explorer la piste du scene manager pour supprimer mes listes.

Re: [n3xt-D] un moteur pour PureBasic

Publié : lun. 12/oct./2009 19:04
par Anonyme
le mélange 2D/3D est vraiment galère.
je préconise l'utilisation de commande iBegin3D() & iBegin2D() :mrgreen:

Re: [n3xt-D] un moteur pour PureBasic

Publié : lun. 12/oct./2009 19:35
par Anonyme
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()

Re: [n3xt-D] un moteur pour PureBasic

Publié : lun. 12/oct./2009 19:36
par tmyke
les projections ne marche pas , certainement du à un problème de matrice de vue ou un truc du genre...
matrice pas à jour ?
Oui, vue que tu semble modifier les valeur dans ton code, il se peut qu'il ai du mal à retrouver ses petit
lors de l'execution des ces instrucitons.
je préconise l'utilisation de commande iBegin3D() & iBegin2D()
Cela m'avait déjà effleuré. J'avais peur que cela alourdisse le code, mais en fait il semble
que cela soit l'inverse, donc je vais voir ce que je peux faire ;)

Re: [n3xt-D] un moteur pour PureBasic

Publié : lun. 12/oct./2009 19:37
par tmyke
Cpl.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()
Je vais voir pour faire un petit code la dessus d'ici à demain soir ;)

Re: [n3xt-D] un moteur pour PureBasic

Publié : mar. 13/oct./2009 17:59
par tmyke
Salut, désolé pour l'heure, je viens juste de rentrer. Comme promis, voici un code qui devrait correspondre à ce que tu cherchais dans
ton explication ci-dessus:

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()
C'est à améliorer, c'est en fait juste pour le principe, si cela peut t'aider.

Je vais reprendre le code au niveau des soucis dont nous avons parlé, avec une mise à jour d'ici à vendredi
si tout va bien, samedi au plus tard (demain et jeudi au moins je ne suis pas là, et oui boulot, boulot et encore boulot)

Re: [n3xt-D] un moteur pour PureBasic

Publié : mar. 13/oct./2009 18:06
par Anonyme
C'est bien ca , à une chose près , c'était un sprite , pas une image , je voulais profité du blending hardware , a moins que l'on puisse le faire avec des images , en tout cas pas vu de commande pour ca. ;)

Re: [n3xt-D] un moteur pour PureBasic

Publié : mar. 13/oct./2009 18:18
par tmyke
Ben en fait une image est une textue, je pense que cela doit être possible, après le repas, je ferais quelques
tests pour voir.

Re: [n3xt-D] un moteur pour PureBasic

Publié : mar. 13/oct./2009 18:30
par Anonyme
Ouais , mais fait vite quoi !
j'ai pas que ca à foutre de t'attendre ! :twisted:
je rigole hein ! bon app ;)