[n3xt-D] un moteur pour PureBasic

Généralités sur la programmation 3D
Anonyme

Message par Anonyme »

Pour les triangles ( je peut pas lire les chm sous ubuntu )

le code est certainement faux :

Code : Tout sélectionner

*Cube = iCreateCube(1)
iPositionNode(*Cube,0,0,3)
iRotateNode(*Cube,45,45,45)
*geo.i = iMeshGeometry(*Cube)

Count = iMeshBufferPolyCount(*geo)
Dim *TriangleBuffer.i(Count)
*TriangleBuffer() = iMeshBufferIndicesBuffer(*geo)

*Triangle.VECTOR3 = *TriangleBuffer(0)

Debug *Triangle\x
Debug *Triangle\y
Debug *Triangle\z
si tu pouvais m'aiguiller :)
Avatar de l’utilisateur
venom
Messages : 3128
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

je peut pas lire les chm sous ubuntu

Code : Tout sélectionner

sudo apt-get install xchm
tiens très pratique :wink:





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
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 »

Bon, je viens de faire de nouveau une mise à jour des sources et du package PB.

Le petit code que tu donne ci-dessus ne fonctionne pas je pense.
Voici d'une manière simple ce que j'écrirais:

Code : Tout sélectionner

Count = iMeshBufferPolyCount(*geo)
*TriangleBuffer.w
*TriangleBuffer = iMeshBufferIndicesBuffer(*geo)
 ; première face:
 Debug PeekW(*TriangleBuffer)
 Debug PeekW(*TriangleBuffer+2)
 Debug PeekW(*TriangleBuffer+4)
Sinon, avec les ajouts de la dernière mise à jour, on peux écrire:

Code : Tout sélectionner

*meshbuf.IMeshBuffer = iMeshGeometry(*cube)

; récupère le nombre de triangles
num.l = iMeshBufferPolyCount.l(*meshbuf)
Global v0.l, v1.l, v2.l
Global vert.VECTOR3 
; parcour tous les triangles
For i = 0 To num-1
  iMeshBufferFace(*meshbuf, i, @v0, @v1, @v2)
  ; les 3 vertices de la face
  Debug v0
  Debug v1
  Debug v2
  ; récupère chaqu'un des 3 vertex
  iMeshBufferVertex(*meshbuf, @vert, v0)
  vv0$ = StrF(vert\x)+" "+StrF(vert\y)+" "+StrF(vert\z)
  iMeshBufferVertex(*meshbuf, @vert, v1)
  vv1$ = StrF(vert\x)+" "+StrF(vert\y)+" "+StrF(vert\z)
  iMeshBufferVertex(*meshbuf, @vert, v2)
  vv2$ = StrF(vert\x)+" "+StrF(vert\y)+" "+StrF(vert\z)
  Debug vv0$
  Debug vv1$
  Debug vv2$
Next
Voilà. Faut aussi penser que Irrlicht travail en u16 pour ces indices, autrement dit du
'unsigned short' soit des données en 16 bits non signées.

8)
Force et sagesse...
Anonyme

Message par Anonyme »

Impecable , sauf que j'ai besoin des vertex des triangles "tranformé" après rotation / translation :D
ca doit bien être stocké quelque part :)
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 »

Arrfff. C'est tout a fait possible, mais il n'y a pas de fonction directe pour cela, mais je vais
pondre un truc ;)
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

Message par tmyke »

bon, voici une petite procedure qui transforme chaque vertex (sous forme d'un vecteur)
en fonction de la position du node

Code : Tout sélectionner

Procedure TransformVertex(*node.IMesh, *v.VECTOR3)

  Protected mat.MATRIX
 
  iNodeTransformation(*node, @mat\m[0])
  Matrix_TransformVect(*v, @mat\m[0] )
  
EndProcedure

*v contient le vertex à transformer mais aussi le résultat après le traitement.
Cela devrait correspondre à ce que tu cherches
Force et sagesse...
Anonyme

Message par Anonyme »

pas trop gros , ca va te faire mal... :D

sinon ,

ca plante ici

Exemple 35 :
*node.INode = iPickCamera(*cam, iGetMouseX(), iGetMouseY(), #ENT_PICKFACE)

et ici :

Exemple 36 :
res.l = iCollisionPoint(Lstart\x, Lstart\y, Lstart\z, Lend\x, Lend\y, Lend\z, *mesh)

le 41 fonctionne correctement.
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 »

Cpl.Bator a écrit :pas trop gros , ca va te faire mal... :D
C'est pour cela que je me suis cantoné à 5 lignes (deux post au dessus). :D Image

Cpl.Bator a écrit : sinon ,

ca plante ici

Exemple 35 :
*node.INode = iPickCamera(*cam, iGetMouseX(), iGetMouseY(), #ENT_PICKFACE)

et ici :

Exemple 36 :
res.l = iCollisionPoint(Lstart\x, Lstart\y, Lstart\z, Lend\x, Lend\y, Lend\z, *mesh)

le 41 fonctionne correctement.


Le soucis, c'est que chez moi cela tourne sans soucis, et sur 3 machines, sous Window par contre :?
Force et sagesse...
Anonyme

Message par Anonyme »

Tu as du faire des modifs des sources , je ne peut même plus utilisé mes source du shooter.

pour ta petite fonction , elle ne transforme rien. :/
Ca reste tel quelle. :)
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 »

Cpl.Bator a écrit :Tu as du faire des modifs des sources , je ne peut même plus utilisé mes source du shooter.
Pas plus que cela, mais des fois il suffit d'un rien. Je ferais des tests en rentrant demain soir pour
voir ce qui peut éventuellement clocher, et tout remettre à plat.
Cpl.Bator a écrit :pour ta petite fonction , elle ne transforme rien. :/
Ca reste tel quelle. :)
Hmm, chez moi cela fonctionne nickel, je vais finir par croire que l'on ne teste pas le même chose :D
La nuit permet d'aérer et oxygéner les méninges, je serais plus clairvoyant demain 8)
Force et sagesse...
Anonyme

Message par Anonyme »

tu as raisons , on ne teste pas la même chose.
j'ai vérifier les fonctions matricielle une par une , le code source... etc...
pas d'erreurs... et en dernier ( comme d'hab ) un éclair !

Il fallait que la scene soit rendu au moins une fois , sinon les matrices ne sont pas à jour... je suis vraiment un crétin par fois... :D


Te casse pas la tête , penche toi vers Xeffects :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 »

Cpl.Bator a écrit :tu as raisons , on ne teste pas la même chose.
j'ai vérifier les fonctions matricielle une par une , le code source... etc...
pas d'erreurs... et en dernier ( comme d'hab ) un éclair !

Il fallait que la scene soit rendu au moins une fois , sinon les matrices ne sont pas à jour... je suis vraiment un crétin par fois... :D
L'essentiel est d'arriver à trouver ou sont les failles, et puis parfois nous sommes tellement pris par
ce que nous faisons, que nous n'avons plus le recul nécessaire à une certaine clairvoyance ;)
Je ferais un tour de N3xtD demain, je re-testerais tous les samples ,et ce sur au moins 3 ou 4 machines,
a tête reposé 8)


Cpl.Bator a écrit :Te casse pas la tête , penche toi vers Xeffects :D
J'ai malgrés tout un peu commencé. Le code compile bien, je n'ai plus qu'a écrire les fonctions externe
pour mettre en oeuvre le truc. Je ne suis pas sûr que cela sera prèt dès demains, mais dans les tous prochain jours par contre , cela devrais le faire ;)

Bonne nuit, et à demain soir.
Force et sagesse...
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

il serait bien de bloquer le fps pour le shooter car bon dur de tester quand on meurt en une seconde :lol:. Quelqu'un a fait un bench sur les perfs des sprite3D de next contre ceux de pure ?


@Tmyke : c'est cool que l'on puisse charger directement a partir de la mémoire mais mhhh je trouve pas dans la doc pour les sprites ^^'.

Pour info c'est ce jeu la que j'aimerais convertir en next :
(Proto-Type le 9 ème)
http://ajva-online.com/modules/smartsec ... ?itemid=17
poshu
Messages : 1138
Inscription : sam. 31/juil./2004 22:32

Message par poshu »

Bon, faut que je teste la nouvelle version aussi, mais cpl.bator est tellement sur la brèche que les versions fix s'enchainent trop vite xD
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 »

cha0s a écrit :il serait bien de bloquer le fps pour le shooter car bon dur de tester quand on meurt en une seconde :lol:. Quelqu'un a fait
un bench sur les perfs des sprite3D de next contre ceux de pure ?
Dans les exemples fournis dans le package, normalement tu as la synchro d'activé, ce qui limite la vitesse d'afichage.
cha0s a écrit :@Tmyke : c'est cool que l'on puisse charger directement a partir de la mémoire mais mhhh je trouve pas dans la doc pour les sprites ^^'.
En fait, dans l'exemple 010 tu as un petit exemple, à la ligne 39 il y a une ligne commentée ( iAddZipFileArchive() ). C'est grace
à cette instruction que tu charge des media qui seront directement exploitable dans ton code.
cha0s a écrit :Pour info c'est ce jeu la que j'aimerais convertir en next :
(Proto-Type le 9 ème)
http://ajva-online.com/modules/smartsec ... ?itemid=17
Sympa comme objectif, et accessible en plus, ce qui a son importance. Les fonctions 2D natives
de PB pourraient largement suffire, non ?


Sinon, j'ai uploadé les package avec une remise à plat et les tests qui vont bien. Y compris sur Shooter,
le tout sous Windows pour ce qui me concerne ;)
Force et sagesse...
Répondre