Histoire d'un Cube (Notions de base à la 3D)

Généralités sur la programmation 3D
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: Histoire d'un Cube (Notions de base à la 3D)

Message par djes »

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é.
klystron
Messages : 149
Inscription : mar. 02/déc./2014 12:16

Re: Histoire d'un Cube (Notions de base à la 3D)

Message par klystron »

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+
Avatar de l’utilisateur
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)

Message par falsam »

@djes: Merci pour cette lecture qui a eu pour répercussion un léger mal de tète :)
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é.)
ç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 :pour compiler son code il faut avoir dans le meme répertoire, le fichier engine3D.dll, pour le lire.
C'est faux.

- 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%
Avatar de l’utilisateur
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)

Message par falsam »

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()
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%
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Histoire d'un Cube (Notions de base à la 3D)

Message par comtois »

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
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.
Avatar de l’utilisateur
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)

Message par falsam »

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.
:arrow: http://www.purebasic.fr/english/viewtop ... 36&t=63070

:idea: 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%
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: Histoire d'un Cube (Notions de base à la 3D)

Message par Ollivier »

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...
Avatar de l’utilisateur
SPH
Messages : 4722
Inscription : mer. 09/nov./2005 9:53

Re: Histoire d'un Cube : Un peu de relief

Message par SPH »

falsam a écrit : lun. 08/juil./2013 16:33 Télécharger le fichier compressé suivant.
Mer et Ciel.zip (Source 4.31 Mo)
On le dézip où exactement (dans purebasic6) ?
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
Avatar de l’utilisateur
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)

Message par falsam »

SPH a écrit : sam. 14/janv./2023 15:38 On le dézip où exactement (dans purebasic6) ?
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%
Répondre