Mesh gratuit pour ogre

Généralités sur la programmation 3D
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Mesh gratuit pour ogre

Message par comtois »

Il y a 2 sortes de meshes; ceux qu'on peut instancier (en créant des entities) et ceux qu'on ne peut pas :)

Un mesh 'instanciable' s'obtient soit avec la fonction LoadMesh(), soit en le créant manuellement et en précisant #True dans la fonction FinishMesh(#True).
il doit être de type #PB_Mesh_TriangleList lors de sa création (type par défaut).

Pour utiliser ce type de mesh , il faut donc l'instancier en créant une entity.


Un mesh non 'instanciable' s'obtient en le créant manuellement et en précisant #False dans la fonction FinishMesh(#False).
Il peut être de tous les types possibles :
#PB_Mesh_TriangleList : the mesh will be composed of a list of triangles (default).
#PB_Mesh_TriangleStrip: the mesh will be composed of a list of connected triangles (vertices are shared).
#PB_Mesh_TriangleFan : the mesh will be composed of a list of triangles sharing the same central vertex point.
#PB_Mesh_PointList : the mesh will be composed of a list of points.
#PB_Mesh_LineList : the mesh will be composed of a list of lines.
#PB_Mesh_LineStrip : the mesh will be composed of a list of connected lines (vertices are shared).


Avec ce type de mesh, on ne peut pas créer d'entity, pour le rendre visible il faut l'attacher à un node (voir les exemples MeshManual.pb dans le répertoire 3D).

On peut définir un material pour ces 2 types de mesh avec la commande SetMeshMaterial().

Si le material est défini au niveau du mesh, lors de la création de l'entity on peut l'écrire ainsi

Code : Tout sélectionner

CreateEntity(#Entity, MeshID(#Mesh), #PB_Material_None)
au lieu de

Code : Tout sélectionner

CreateEntity(#Entity, MeshID(#Mesh), MaterialID(#Material))
Voir l'exemple SetMeshMaterial.pb dans le répertoire 3D.
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.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Mesh gratuit pour ogre

Message par comtois »

SPH a écrit :Quel est le plus petit code pour afficher un mesh ?
Version non 'instanciable', le mesh doit être attaché à un node

Code : Tout sélectionner

InitEngine3D()
InitSprite()
InitKeyboard()
OpenScreen(800, 600, 32, "3D")

#Camera = 0
#Mesh = 0
#Node = 0

CreateMesh(#Mesh)
  MeshVertexPosition(-5, 0, -5)
  MeshVertexPosition( 0, 0,  5)
  MeshVertexPosition( 5, 0, -5)
FinishMesh(#False)

CreateNode(#Node)
AttachNodeObject(#node, MeshID(#mesh))

CreateCamera(#Camera, 0, 0, 100, 100)
MoveCamera(#Camera, 20, 100, 20, #PB_Absolute)
CameraLookAt(#Camera, NodeX(#node), NodeY(#node),NodeZ(#node))

Repeat
  ExamineKeyboard()
  RenderWorld()
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
Version instanciable, il permet de créer autant d'entités que l'on souhaite.

Code : Tout sélectionner

InitEngine3D()
InitSprite()
InitKeyboard()
OpenScreen(800, 600, 32, "3D")

#Camera = 0
#Mesh = 0
#Entity = 0

CreateMesh(#Mesh)
  MeshVertexPosition(-5, 0, -5)
  MeshVertexPosition( 0, 0,  5)
  MeshVertexPosition( 5, 0, -5)
FinishMesh(#True)

CreateEntity(#Entity, MeshID(#mesh), #PB_Material_None)

CreateCamera(#Camera, 0, 0, 100, 100)
MoveCamera(#Camera, 20, 100, 20, #PB_Absolute)
CameraLookAt(#Camera, EntityX(#Entity), EntityY(#Entity),EntityZ(#Entity))

Repeat
  ExamineKeyboard()
  RenderWorld()
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
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
SPH
Messages : 4944
Inscription : mer. 09/nov./2005 9:53

Re: Mesh gratuit pour ogre

Message par SPH »

Merci pour les 2 exemples.

Une entity, est ce comme une occurence dans flash ? (une sorte de copie d'objet quoi)
Que veux dire "instancier" ?

!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.12LTS- 64 bits
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Re: Mesh gratuit pour ogre

Message par Frenchy Pilou »

Dans les programmes 3D une instanciation est une copie d'objet avec la particularité qu'ensuite n'importe quelle modification de n'importe lequel de ces objets copiés (y compris l'original) se répercutera sur tous les autres! :)
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
SPH
Messages : 4944
Inscription : mer. 09/nov./2005 9:53

Re: Mesh gratuit pour ogre

Message par SPH »

ENTITE = MESH + MATERIEL
ok

!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.12LTS- 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Mesh gratuit pour ogre

Message par Backup »

SPH a écrit : Une entity, est ce comme une occurence dans flash ? (une sorte de copie d'objet quoi)
Que veux dire "instancier" ?

pour faire un paralelle avec la librairie Sprite

un mesh serai comme une image ...
et l'entity serai comme un Sprite

tu as besoin d'une image pour donner corp a un Sprite , qui est a la base une coque vide !!

la c'est pareil , une entity a besoin d'un mesh pour exister ... les concepts se ressembles ... :)

la meme image peut servir pour plusieurs Sprite
le meme Mesh peut servir pour plusieurs Entity ;)
Avatar de l’utilisateur
SPH
Messages : 4944
Inscription : mer. 09/nov./2005 9:53

Re: Mesh gratuit pour ogre

Message par SPH »

Ok :P

!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.12LTS- 64 bits
Répondre