Page 1 sur 2

Re: Mesh gratuit pour ogre

Publié : ven. 28/juin/2013 23:25
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.

Re: Mesh gratuit pour ogre

Publié : sam. 29/juin/2013 11:17
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)

Re: Mesh gratuit pour ogre

Publié : sam. 29/juin/2013 11:34
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" ?

Re: Mesh gratuit pour ogre

Publié : sam. 29/juin/2013 11:53
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! :)

Re: Mesh gratuit pour ogre

Publié : sam. 29/juin/2013 11:57
par SPH
ENTITE = MESH + MATERIEL
ok

Re: Mesh gratuit pour ogre

Publié : sam. 29/juin/2013 12:37
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 ;)

Re: Mesh gratuit pour ogre

Publié : sam. 29/juin/2013 12:41
par SPH
Ok :P