Page 5 sur 5

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

Publié : jeu. 18/déc./2014 9:41
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é.

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

Publié : jeu. 18/déc./2014 19:08
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+

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

Publié : jeu. 18/déc./2014 22:51
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 :)

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

Publié : jeu. 03/sept./2015 22:39
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()

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

Publié : jeu. 03/sept./2015 23:07
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

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

Publié : jeu. 03/sept./2015 23:34
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.

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

Publié : ven. 04/sept./2015 15:49
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...

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

Publié : sam. 14/janv./2023 15:38
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.
🥰

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

Publié : sam. 14/janv./2023 17:29
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.