[n3xt-D] un moteur pour PureBasic

Généralités sur la programmation 3D
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Re: [n3xt-D] un moteur pour PureBasic

Message 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é !
Anonyme

Re: [n3xt-D] un moteur pour PureBasic

Message par Anonyme »

j'ai trouvé , il faut jouer avec la couleur emisive du mesh ! la galère :D , mais ca claque :mrgreen:
Anonyme

Re: [n3xt-D] un moteur pour PureBasic

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

Re: [n3xt-D] un moteur pour PureBasic

Message par Anonyme »

je n'arrive pas à faire fonctionner iProjectedX() & iProjectedY() , ca renvois bien en théorie les coordonnées écran d'un node ?
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Re: [n3xt-D] un moteur pour PureBasic

Message 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 ;)
Force et sagesse...
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Re: [n3xt-D] un moteur pour PureBasic

Message par Progi1984 »

Que dire de mieux ? Sinon regarde du coté de VirtualBox :) et Merci :) :)
Anonyme

Re: [n3xt-D] un moteur pour PureBasic

Message 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.
Anonyme

Re: [n3xt-D] un moteur pour PureBasic

Message par Anonyme »

le mélange 2D/3D est vraiment galère.
je préconise l'utilisation de commande iBegin3D() & iBegin2D() :mrgreen:
Anonyme

Re: [n3xt-D] un moteur pour PureBasic

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

Re: [n3xt-D] un moteur pour PureBasic

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

Re: [n3xt-D] un moteur pour PureBasic

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

Re: [n3xt-D] un moteur pour PureBasic

Message 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)
Force et sagesse...
Anonyme

Re: [n3xt-D] un moteur pour PureBasic

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

Re: [n3xt-D] un moteur pour PureBasic

Message 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.
Force et sagesse...
Anonyme

Re: [n3xt-D] un moteur pour PureBasic

Message par Anonyme »

Ouais , mais fait vite quoi !
j'ai pas que ca à foutre de t'attendre ! :twisted:
je rigole hein ! bon app ;)
Répondre