Histoire d'un Cube (Notions de base à la 3D)
Re: Histoire d'un Cube (Notions de base à la 3D)
Falsam> Sur developpez.com : http://jeux.developpez.com/faq/3d/?page=culling
Il y a des petites choses à ajouter qui sont fondamentales, notamment sur le backface culling. On comprend son importance quand on utilise un logiciel "pro" comme lightwave qui permet de maîtriser finement la modélisation. Cette technique concerne l'affichage ou non d'une face en fonction de son vecteur normal. A l'origine, il s'agissait d'éliminer rapidement des faces qui n'étaient pas directement visibles par la caméra. Par exemple, pour un cube, en théorie il y a six faces, mais en pratique, on ne peut en voir que 3 à la fois. Comment éliminer le calcul et l'affichage de ces faces ? Il suffit de calculer leur vecteur normal, on n'affiche la face que s'il est dans la même direction que la caméra.
A savoir : la normale dépend de l'ordre des vertices (les points), par exemple le sens horaire. Si on inverse le sens des points, on inverse la normale, bref, on retourne la face.
Une face est dite double (double sided) si on demande au moteur 3D d'afficher les deux côtés (si on tourne la face, elle est toujours visible). Si cela a parfois un côté pratique, c'est quelque chose qui est physiquement impossible, car l'épaisseur d'un tel objet serait nulle ! Il faut donc se méfier de cette possibilité.
Il y a des petites choses à ajouter qui sont fondamentales, notamment sur le backface culling. On comprend son importance quand on utilise un logiciel "pro" comme lightwave qui permet de maîtriser finement la modélisation. Cette technique concerne l'affichage ou non d'une face en fonction de son vecteur normal. A l'origine, il s'agissait d'éliminer rapidement des faces qui n'étaient pas directement visibles par la caméra. Par exemple, pour un cube, en théorie il y a six faces, mais en pratique, on ne peut en voir que 3 à la fois. Comment éliminer le calcul et l'affichage de ces faces ? Il suffit de calculer leur vecteur normal, on n'affiche la face que s'il est dans la même direction que la caméra.
A savoir : la normale dépend de l'ordre des vertices (les points), par exemple le sens horaire. Si on inverse le sens des points, on inverse la normale, bref, on retourne la face.
Une face est dite double (double sided) si on demande au moteur 3D d'afficher les deux côtés (si on tourne la face, elle est toujours visible). Si cela a parfois un côté pratique, c'est quelque chose qui est physiquement impossible, car l'épaisseur d'un tel objet serait nulle ! Il faut donc se méfier de cette possibilité.
Re: Histoire d'un Cube (Notions de base à la 3D)
Bonsoir à tous,
Je constate,sur le code de Falsam, que les cubes tombés, se sont jamais à la meme place sur le damier.( une fois tombé.)
et pour compiler son code il faut avoir dans le meme répertoire, le fichier engine3D.dll, pour le lire.
A+
Je constate,sur le code de Falsam, que les cubes tombés, se sont jamais à la meme place sur le damier.( une fois tombé.)
et pour compiler son code il faut avoir dans le meme répertoire, le fichier engine3D.dll, pour le lire.
A+
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Histoire d'un Cube (Notions de base à la 3D)
@djes: Merci pour cette lecture qui a eu pour répercussion un léger mal de tète
- Pour compiler un code qui fait appel au moteur Ogre3D, il n'y a pas besoin de la dll engine3D.dll.
- Par contre, si tu crées un exécutable que tu souhaites diffuser ou juste t'en servir alors oui tu as besoin de ce fichier.
Engine3D.dll n'est à inclure que si tu utilises des fonctions 3D
ça me parrait normal puique les rebonds sont aléatoire. Lache un cube chez toi. Il ne retombera jamais à la même place. C'est la même chose dans un model 3D. Je n'ai pas codé quoique ce soit pour simuler le rebond de chaque cube.klystron a écrit :Je constate,sur le code de Falsam, que les cubes tombés, se sont jamais à la meme place sur le damier.( une fois tombé.)
C'est faux.klystron a écrit :pour compiler son code il faut avoir dans le meme répertoire, le fichier engine3D.dll, pour le lire.
- Pour compiler un code qui fait appel au moteur Ogre3D, il n'y a pas besoin de la dll engine3D.dll.
- Par contre, si tu crées un exécutable que tu souhaites diffuser ou juste t'en servir alors oui tu as besoin de ce fichier.
Engine3D.dll n'est à inclure que si tu utilises des fonctions 3D
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Histoire d'un Cube (Notions de base à la 3D)
Avec la version 5.40 LTS il y a quelques changements.
■ Modifications
- EntityPhysicBody() devient CreateEntityBody()
- TerrainPhysicBody() devient CreateTerrainBody()
Les codes concernés par ces modifications seront modifiés avec la version de production de PureBasic 5.40 LTS
■ Nouveautés.
Il est maintenant possible de créer des cones avec la fonction
CreateCone(#Mesh, Radius, Height, [NbBaseSegments, NbHeightSegments])
Si vous avez besoin d'un cône de collision, utilisez la fonction CreateEntityBody() avec le paramètre #PB_Entity_ConeBody
Les autres nouveautés.
- CameraCustomParameter() & ResizeCamera().
- FreeEntityBody() & FreeTerrainBody()
- ApplyEntityTorque(#Entity, x, y, z) - Applique une force rotative
- ApplyEntityTorqueImpulse(#Entity, x, y, z) - Applique une force rotative
J'ai fait des tests et j'avoue que la subtilité entres ces deux fonctions m'interpelle.
- Ajout des paramètres CollisionGroup & CollisionMask pour la fonction RayCollide()
- Ajout des flags #PB_Entity_DisableContactResponse & #PB_Entity_EnableContactResponse pour la fonction SetEntityAttribute()
■ Modifications
- EntityPhysicBody() devient CreateEntityBody()
- TerrainPhysicBody() devient CreateTerrainBody()
Les codes concernés par ces modifications seront modifiés avec la version de production de PureBasic 5.40 LTS
■ Nouveautés.
Il est maintenant possible de créer des cones avec la fonction
CreateCone(#Mesh, Radius, Height, [NbBaseSegments, NbHeightSegments])
Si vous avez besoin d'un cône de collision, utilisez la fonction CreateEntityBody() avec le paramètre #PB_Entity_ConeBody
Les autres nouveautés.
- CameraCustomParameter() & ResizeCamera().
- FreeEntityBody() & FreeTerrainBody()
- ApplyEntityTorque(#Entity, x, y, z) - Applique une force rotative
- ApplyEntityTorqueImpulse(#Entity, x, y, z) - Applique une force rotative
J'ai fait des tests et j'avoue que la subtilité entres ces deux fonctions m'interpelle.
- Ajout des paramètres CollisionGroup & CollisionMask pour la fonction RayCollide()
- Ajout des flags #PB_Entity_DisableContactResponse & #PB_Entity_EnableContactResponse pour la fonction SetEntityAttribute()
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Histoire d'un Cube (Notions de base à la 3D)
ApplyEntityTorqueImpulse() change la vitesse angulaire immédiatement tandis que ApplyEntityTorque() ajoute le couple à l'existant et le restitue au pas suivant de la simulation.
C'est le même principe pour ApplyEntityImpulse() et ApplyEntityForce()
http://www.bulletphysics.org/Bullet/php ... f=9&t=1018
C'est le même principe pour ApplyEntityImpulse() et ApplyEntityForce()
http://www.bulletphysics.org/Bullet/php ... f=9&t=1018
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Histoire d'un Cube (Notions de base à la 3D)
Merci pour cette réponse Comtois mais ça reste quand même flou dans mon esprit.
Que ce soit ApplyEntityTorque() ou ApplyEntityTorqueImpulse() j'arrive à appliquer la même dynamique à un cube. Par contre les paramétres x,y et z sont différents.
J'ai posté un code en ce sens sur le forum anglais qui affiche deux cubes.
Le cube A est animé par ApplyEntityTorqueImpulse()
Le cube B est animé par ApplyEntityTorque()
Quand je presse la touche Espace, le mouvement est le même.
http://www.purebasic.fr/english/viewtop ... 36&t=63070
Pour info l'aide ne s'affiche pas pour ces deux fonctionnalités. Par contre en bas de l'éditeur on peut lire.
ApplyEntityTorqueImpulse(#Entity, x, y, z) - Apply a rotation force to the #Entity
ApplyEntityTorque(#Entity, x, y, z) - Apply a rotation force to the #Entity
Ca manque de subtilité dans les explications.
Que ce soit ApplyEntityTorque() ou ApplyEntityTorqueImpulse() j'arrive à appliquer la même dynamique à un cube. Par contre les paramétres x,y et z sont différents.
J'ai posté un code en ce sens sur le forum anglais qui affiche deux cubes.
Le cube A est animé par ApplyEntityTorqueImpulse()
Le cube B est animé par ApplyEntityTorque()
Quand je presse la touche Espace, le mouvement est le même.
http://www.purebasic.fr/english/viewtop ... 36&t=63070
Pour info l'aide ne s'affiche pas pour ces deux fonctionnalités. Par contre en bas de l'éditeur on peut lire.
ApplyEntityTorqueImpulse(#Entity, x, y, z) - Apply a rotation force to the #Entity
ApplyEntityTorque(#Entity, x, y, z) - Apply a rotation force to the #Entity
Ca manque de subtilité dans les explications.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Histoire d'un Cube (Notions de base à la 3D)
Bonjour Falsam,
déjà merci pour ce travail que je n'ai pas eu le temps de tester.
Si tu as réussi à obtenir 2 séquences similaires de manière parfaite, c'est notable.
Ce travail de comparatif te permet d'observer que bla...Impulse te fait économiser quelques instructions. Peut-être même du temps CPU...
déjà merci pour ce travail que je n'ai pas eu le temps de tester.
Si tu as réussi à obtenir 2 séquences similaires de manière parfaite, c'est notable.
Ce travail de comparatif te permet d'observer que bla...Impulse te fait économiser quelques instructions. Peut-être même du temps CPU...
Re: Histoire d'un Cube : Un peu de relief
On le dézip où exactement (dans purebasic6) ?falsam a écrit : ↑lun. 08/juil./2013 16:33 Télécharger le fichier compressé suivant.
Mer et Ciel.zip (Source 4.31 Mo)
Grand merci pour ton tuto auquel je me réfère pour apprendre.
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.00 - 64 bits
- falsam
- Messages : 7244
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Histoire d'un Cube (Notions de base à la 3D)
Ou tu veux. Par contre le résultat obtenu n'est pas celui qui est prévu. Je vais jeter un œil sur ce code.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%