[n3xt-D] un moteur pour PureBasic
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)
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)
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
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.
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
-
- Messages : 1554
- Inscription : lun. 24/juil./2006 6:44
- Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E
effectivementProgi1984 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.

Dans l'absolue, tu as certainement raison. Quelque soit le domaine, les système spécialisé sont forcementSPH 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)
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...
Voici les dernière erreurs du makefile sous linux.
CGUIxxx.cpp et je vois qu'il manque cette directive :
la dernière erreur réside dans le makefile :

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 !
donc , j'ouvre se fameux CGUIProgressBar.cpp , je le compare avec d'autreTerminal 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
CGUIxxx.cpp et je vois qu'il manque cette directive :
mais le problème n'est pas là , dans CImageGUISkin.h , il ne trouve pas Irrlicht.h , en mettant irrlicht.h , la compilation continue.#ifdef _IRR_COMPILE_WITH_GUI_
la dernière erreur réside dans le makefile :
erreur de syntaxe , le cpp du fichier objet est n3xtd_XEffects.cpp et non pas n3xtd_XEffect.cpp , manque juste le 's'Terminal a écrit : Pas de règle pour fabriquer la cible « n3xtd_XEffect.o », nécessaire pour « libN3xtD.a ». Arrêt.

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 !

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 :
il faut que la masse soit >= 100 pour bien voir le bug.
edit2 : Pareil pour les cones
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
-
- Messages : 1554
- Inscription : lun. 24/juil./2006 6:44
- Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E
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.
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...().
cela devrait être dispo avant la fin du WE normalement.
Je regarde aussi cette histoire de bug sur les Cones et Cylindres.
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.
J'avoue ne pas trop saisir la subtilité, j'suis dur à la détente, on en avait déjà parlé effectivement,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.
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...().
Effectivement, je vais voir pour ajouter tout cela. Il manque encore quelques fonctions physique, je m'en occupe,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...
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...
Avec le terrain , le fog marche bien , pas avec des nodes simple :
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 !
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()
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 !

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