[n3xt-D] un moteur pour PureBasic

Généralités sur la programmation 3D
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Et est-ce que tu penses que tu peux faire quelque chose de ce côté-là (et non des moindres, je te l'accorde) ou bien est-ce que ça te semble trop lourd et à côté du sujet essentiel de N3xt?
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 »

Il y a toujours moyen, après tout dépend du temps de travail que cela représente, ainsi que le gain réél pour
les utilisateurs actuels (autant dire proche de zero).
Cet aspect représente-t-il un obstacle pour toi quand à l'utilisation de N3xtD ?
Force et sagesse...
Avatar de l’utilisateur
SPH
Messages : 4937
Inscription : mer. 09/nov./2005 9:53

Message par SPH »

Je n'ai entrelus que le premier post mais je réagis immediatement : quel grand malheur de réinventé la roue qui a ete 25 fois créée....
Les nouveaux moteurs 3D ont un vrai sens quand ils sont spécialisés pour un effet particulier. Par exemple, faire un moteur pour tout jeux en vu isometrique a la diablo2 (ca permet d'optimiser a mort des aspects en en laissant tomber d'autres)
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Pour n'avoir entrelu que le premier post, N3xt-D n'est pas une réinvention de la roue. C'est une version modifiée et améliorée de Irrlicht.
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 »

Progi1984 a écrit :Pour n'avoir entrelu que le premier post, N3xt-D n'est pas une réinvention de la roue. C'est une version modifiée et améliorée de Irrlicht.
effectivement ;)
SPH a écrit :Je n'ai entrelus que le premier post mais je réagis immediatement : quel grand malheur de réinventé la roue qui a ete 25 fois créée....
Les nouveaux moteurs 3D ont un vrai sens quand ils sont spécialisés pour un effet particulier. Par exemple, faire un moteur pour tout jeux en vu isometrique a la diablo2 (ca permet d'optimiser a mort des aspects en en laissant tomber d'autres)
Dans l'absolue, tu as certainement raison. Quelque soit le domaine, les système spécialisé sont forcement
plus performant que les systèmes généraux, censé pouvoir couvrir la plupart des situations.

Les moteurs 3D n'échappe pas à cette règle. Maintenant, N3xtD reste un projet destiné au plus grand nombre,
et avant tout dans un but initiatique, permettant de faire à peut près tout. Les plus exigeant iront certainement voir ailleurs,
les plus compétant écriront leur propre moteur, c'est encore la meilleurs solution pour coller au mieux au
projet que l'on souhaite monter...
Force et sagesse...
Anonyme

Message par Anonyme »

Voici les dernière erreurs du makefile sous linux.
Terminal a écrit :Dans le fichier inclus à partir de CGUIProgressBar.cpp:3:
CImageGUISkin.h:4:22: erreur: Irrlicht.h : Aucun fichier ou dossier de ce type
donc , j'ouvre se fameux CGUIProgressBar.cpp , je le compare avec d'autre
CGUIxxx.cpp et je vois qu'il manque cette directive :
#ifdef _IRR_COMPILE_WITH_GUI_
mais le problème n'est pas là , dans CImageGUISkin.h , il ne trouve pas Irrlicht.h , en mettant irrlicht.h , la compilation continue.

la dernière erreur réside dans le makefile :
Terminal a écrit : Pas de règle pour fabriquer la cible « n3xtd_XEffect.o », nécessaire pour « libN3xtD.a ». Arrêt.
erreur de syntaxe , le cpp du fichier objet est n3xtd_XEffects.cpp et non pas n3xtd_XEffect.cpp , manque juste le 's' ;)
ta juste à rajouté le s dans le makefile , et sa roule. ;)
je vais de se pas , essayer de fabriquer un pont 3d qui casse si des objet trop lourd sont dessus ! :D
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 »

Merci comme d'habitude pour les essais Linux, ce qui me permet de corriger mes erreur.
Je met à jour tout cela, et la correction sera dispo dans les package que je mettrais à jour dès demain si
tout va bien ;)
Force et sagesse...
Anonyme

Message par Anonyme »

Te fait pas chier à mettre à jour , je vais t'envoyer des bugs :D


le 1° iFog() ne fonctionne pas.
Anonyme

Message par Anonyme »

iGetDeltaMouseX() & iGetDeltaMouseY() ne fonctionne toujours pas correctement. même si la souris est sur un des bords de l'écran , mousedelta doit renvoyer (en pixel) le mouvement effectuer par la souris , pas le curseur.
Anonyme

Message par Anonyme »

je viens de faire le tour des fonctions "physique" , il n'est pas possible de récuperé la force exercé sur un body ou un joint

je m'explique :

Imagine que je créer un body statique
un second plus bas , qui lui est dynamique
les 2 body sont relié par des joints qui simule des cordes
je voudrais pouvoir casser les cordes en fonction du poids que j'exerce sur le second body.

Bien sur , je peut "bricolé" des fonctions , je teste tout les body qui sont en collisions , je recupère la masse et la vélocité de chacun , je détermine le poids avec une formule que je ne connais pas encore.
Je suppose que newton propose déjà se genre de fonction , non ?



edit:


Bug avec les collisions et les cylindres :

Code : Tout sélectionner

*cylinder = iCreateCylinder(1,5,$00FFFFFF,16)
iRotatenode(*cylinder,0,0,90)
 iPositionNode(*cylinder,0,5.5,0)
iSetCollideForm(#CYLINDER_PRIMITIVE)
*dyn_cylinder = iCreateBody(*cylinder)
iMassBody(*dyn_cylinder,100)

il faut que la masse soit >= 100 pour bien voir le bug.

edit2 : Pareil pour les cones
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 »

Pour ce qui est de Ifog, je ne semble pas rencontrer de soucis, par exemple le sample043
tourne apparement sans soucis, dans les deux cas de fog généré.
Sinon, as-tu un petit sample metant en évidence ce qui cloche.

Cpl.Bator a écrit :iGetDeltaMouseX() & iGetDeltaMouseY() ne fonctionne toujours pas correctement. même si la souris est sur un des bords de l'écran , mousedelta doit renvoyer (en pixel) le mouvement effectuer par la souris , pas le curseur.
J'avoue ne pas trop saisir la subtilité, j'suis dur à la détente, on en avait déjà parlé effectivement,
mais je toujours pas capté quel comportement devait avoir cette fonction exactement :(
A l'heure actuelle elle se contente de fournir l'écart entre l'ancienne position de la souris et la position
de celle-ci au moment de l'appel de la fonction iGetDelta...().
Cpl.Bator a écrit :je viens de faire le tour des fonctions "physique" , il n'est pas possible de récupéré la force exercé sur un body ou un joint...
Effectivement, je vais voir pour ajouter tout cela. Il manque encore quelques fonctions physique, je m'en occupe,
cela devrait être dispo avant la fin du WE normalement.

Je regarde aussi cette histoire de bug sur les Cones et Cylindres.
Force et sagesse...
Anonyme

Message par Anonyme »

Avec le terrain , le fog marche bien , pas avec des nodes simple :

Code : Tout sélectionner

IncludePath "includes"   :   IncludeFile "n3xtD_PB.pbi"

ExamineDesktops()
iCreateGraphics3D(DesktopWidth(0),DesktopHeight(0),DesktopDepth(0),#False)



iSetWorldSize(-1000,-1000,-1000,1000,1000,1000)


iAmbientLight($FFCACACA)
Global *Light = icreatelight($FFFFFFFF,3000)
iAttenuationLight(*Light, 1, 1.0/3000, 0)
iPositionNode(*Light,2000,2000,2000)






*Ground = iCreateCube()
*Geometry = iMeshGeometry(*Ground)
iScaleMeshBuffer(*Geometry,10000,1,10000)

iSetCollideForm(#BOX_PRIMITIVE)
*Ground_Body = iCreateBody(*Ground,#False)





*Cone = iCreateCone()
iRotatenode(*Cone,0,0,90)
iPositionNode(*Cone,0,5.5,0)
iSetCollideForm(#CONE_PRIMITIVE)
*dyn_cone = iCreateBody(*Cone)





*Camera = iCreateCamera()
iPositionNode(*Camera,10,10,10)
iPointTargetNode(*Camera,0,0,0)
iFOVCamera(*Camera,120)



;----------------------------------------
; linear fog
iFog( $00ffffcc, #True,  100.0, 600.0)
;iFog( $00ffeeff, #False,  0, 0, 0.0051)



Repeat
  
iUpdatePhysic(0.5)




	; if Escape Key, exit	
  If iGetKeyDown(#KEY_ESCAPE)
    Quit=1
  EndIf


  If iGetKeyDown(#KEY_ARROW_UP)
    iMoveNode(*Camera, 0,0,0.5)
  EndIf
  If iGetKeyDown(#KEY_ARROW_DOWN)
    iMoveNode(*Camera, 0,0,-0.5)
  EndIf
  If iGetMouseEvent(#MOUSE_BUTTON_LEFT)
  		If flagXDown=0
  			omx.f = iGetMouseX()
  			omy.f = iGetMouseY()
  			flagXDown=11
  		Else
  			moy.f = iGetMouseY()-omy
  			angley.f=(moy/10.0)
  			omy.f= iGetMouseY()
  			mox.f = iGetMouseX()-omx
  			anglex.f=(mox/10.0)
  			omx.f= iGetMouseX()
  			iTurnNode(*Camera, angley, anglex,0)
  		EndIf
  Else
  	 		flagXDown=0
  EndIf




camPos.VECTOR3
camDir.VECTOR3

   ; shoot with cube
   If iGetKeyUp(#KEY_SPACE)
     iNodePosition(*Camera, @camPos\x)
     iNodeDirection(*Camera, @camDir\x)
     ; create mesh to shoot
     *cube.IMesh = iCreateSphere(1,20)
     iPositionNode(*cube, camPos\x,camPos\y,camPos\z)
     iRotateNode(*cube, Random(180),Random(180),Random(180))    
     ; create body, no dynamique
     iSetCollideForm(#SPHERE_PRIMITIVE)
     *body.IBodySceneNode = iCreateBody(*cube)
     iVelocityBody(*body, camDir\x*150, camDir\y*150, camDir\z*150)




   EndIf


  iBeginScene(192,192,255)
     iDrawScene()
  iEndScene()



Until Quit=1

iFreeEngine()
ajoute la masse de 100 ou 200 au cone aussi pour voir le bug.


en ceux qui concerne les deltas de la souris , c'est lorsque le curseur est sur un des bords de l'écran , imagine la gauche et que je bouge le curseur vers la gauche , le deltax est = à 0 , alors que je bouge ma souris vers la gauche ! ( le curseur ( la bebete que tu vois à l'écran , la souris ( ce que tu as dans la main ) ) le delta doit renvoyer la valeur du mouvement de la souris , pas du curseur ! imagine que je code un fps , je suis dans la merde pour faire un 360 ! ;)
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 »

Je regarde tout cela, pour que cela soit réglé lors de la prochaine update.

Par contre, pour ce qui est du FOG, en fait ce n'est pas un bug, si tu veux qu'un node réagisse
au fog, il faut le spécifier, et donc ecrire iMaterialFlagNode(*node, #EMF_FOG_ENABLE, #True)

Avec le code ci-dessus, cela fonctionne bien ;)
Force et sagesse...
Anonyme

Message par Anonyme »

ICreateTexture() renvois toujours 0
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 »

Bizarre, sous windows et sur 3 machines différentes, je n'ai pas ce soucis.
J'ai bien un pointer de créé et de renvoyé :?
Force et sagesse...
Répondre