Gestion d'objet 3D comment faire?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Gestion d'objet 3D comment faire?

Message par GallyHC »

Bonjour,

Voila je n'ai pas encore utilisé PB pour l'utilisation de la 3D. Mais j'en aurais besoin pour mon projet de gestionnaire DMX512.

Ce que je doit faire pour le moment, c'est de charger un Objet (pour le moment fait en lightwave). l'objet par lui même reste fixe par contre des éléments de celui peuvent bouger. Comme l'image ci-dessous.

Image

Cette objet est ce que l'on appel en lumière "une lyre". en gros la base est fixe et il y a deux mouvements (toujours en lumière le PAN et le TILT). Par ailleurs je voudrais aussi pouvoir changer la couleur jaune si je le désire.

Juste ou cas ou je met l'objet au format "OBJ" diviser en 3 parties :

http://www.koakdesign.info/upload/gally ... heah_1.obj
http://www.koakdesign.info/upload/gally ... heah_2.obj
http://www.koakdesign.info/upload/gally ... heah_3.obj

Je que j'aimerais c'est d'avoir des bons conseils pour bien commencer à faire cela et surtout ne pas faire plein de test inutile car je penses qui a des pros de la 3D ici :).

Merci d'avance,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Gestion d'objet 3D comment faire?

Message par GallyHC »

Bonjour,

Visiblement pas grand monde pour m'aidé sur la théorie de ce qui a de mieux à faire...

Je vais surement sup le topic car je vais devoir faire plein de test ;) tant pis ce sera pour une prochaine lolll

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Gestion d'objet 3D comment faire?

Message par Backup »

logiquement !
Image

si j'avais a faire ça , je ferai 3 objets

une base (cube)
une Fourche , (celle qui tien le Spot) et qui sera Rotative , et qui sera "enfant" de la base
le Spot qui sera "enfant de la fourche" qui sera rotatif Verticale seulement , comme il est enfant de la fourche, il tournera horizontalement avec ...
la fonction creant un lien Parent -Enfant semble etre :

Code : Tout sélectionner

AttachEntityObject(#Entity, Os$, ObjetID [, x, y, z, Tangage, Roulis, Lacet])






[HS ON]
je dois dire que depuis mon enorme deception du moteur DreamMotion 3D qui pour moi etait vraiment super
j'ai carrement laissé tombé la 3D ....

je trouve que Ogre est surement mieux geré sur Purebasic, mais je trouve compliqué de prime abords le nom et le fonctionnement des fonctions ....

lorsque la doc me dit :
"FetchOrientation(ObjetID)
Description

Renvoie le quaternion représentant l'orientation d'un objet. Les valeurs du quaternion peuvent être obtenues avec GetX(), GetY(), GetZ() et GetW().
"
j'ai l'impression d'avoir affaire a l'huissier dans le Film les 3 Freres des inconnus ....
il le faudrait deja courrir sur un moteur de recherche pour savoir deja ce que c'est qu'un quaternion :mrgreen:

autant Purebasic est fait pour les "débutants" ... autant la partie 3d semble faites pour une élite sortie de Fac ....
(Fred/Comtois/G-rom) si tu (vous) me lis (ez) .... faudrai peut etre repenser ce coté là .... )
tout le monde n'est pas Feru en 3D ...

lorsque je fait une comparaison avec DarkBasic , la 3d est bien plus Facile a comprendre ..
les fonctions aussi ... peut etre un model a suivre pour ce qui concerne les Termes utilisés ...
j'avais jamais entendu parler de Quaternions avec le DarkBasic .... :roll:

[HS OFF]
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Gestion d'objet 3D comment faire?

Message par Micoute »

Jolie réincarnation, monsieur Dobro.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Gestion d'objet 3D comment faire?

Message par GallyHC »

Bonjour,

merci "Spock", par contre il serait temps de virtualité mon code source lolllllllllllllll...

Ouep j'étais sur la logique l'un fichier avec les 3 objets différencier. J'avais déjà fait pas mal de test en 3d mais 100% calculé et en VB6 (voir: http://www.vbfrance.com/codes_auteur/GALLY/1602.aspx). La j'avous avoir un peu peur en regardant ce qui a dans PB.

Surtout je ne sais pas comment commençais cela...

Ce n'est pas logique, car la je sèche complément et pourtant j'ai fait plein de recherche sur la 3d et les façon de faire.

Donc c'est plus sur la façon que PB gère cela ma demande... Enfin après il ne faut pas que ce topic parte dans une autre logique comme un peu déjà MR "Spock". Même si j'avous que cela ma fait un peu rire.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Fred
Site Admin
Messages : 2809
Inscription : mer. 21/janv./2004 11:03

Re: Gestion d'objet 3D comment faire?

Message par Fred »

Avec tous les exemples fournis qui sont quand même plutôt courts et explicites pour la plupart, tu n'arrives pas à commencer ton programme ?

Par ailleurs je ne suis pas d'accord avec Dobro, j'ai milité pour la 3D reste simple et si j'y arrive vous devriez y arriver aussi car je suis nul en 3D. L'exemple que t'as pris n'est pas du tout représentatif du reste des commandes, comme d'habitude avec la preuve par l'exemple. Ce code ne me parait pas d'une complexité absurde pour peu qu'on prenne le temps de l'étudier:

Code : Tout sélectionner

;
; ------------------------------------------------------------
;
;   PureBasic - Entity
;
;    (c) 2002 - Fantaisie Software
;
; ------------------------------------------------------------
;

#CameraSpeed = 1

IncludeFile "Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY, RollZ


If InitEngine3D()
  
  Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Models", #PB_3DArchive_FileSystem)
  Add3DArchive("Data/Packs/skybox.zip", #PB_3DArchive_Zip)
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
    
    LoadMesh(0, "robot.mesh")
    
    CreateMaterial(0, LoadTexture(0, "clouds.jpg"))
    CopyMaterial(0, 1)
    CreateMaterial(2, LoadTexture(2, "r2skin.jpg"))
    MaterialShadingMode(0, #PB_Material_Wireframe)
    
    CreateEntity(0, MeshID(0), MaterialID(0))
    CreateEntity(1, MeshID(0), MaterialID(1), -60, 0, 0)
    CreateEntity(2, MeshID(0), MaterialID(2),  60, 0, 0)
    
    StartEntityAnimation(0, "Walk")
    
    EntityRenderMode(0, #PB_Entity_DisplaySkeleton)
    
    SkyBox("stevecube.jpg")
    
    CreateCamera(0, 0, 0, 100, 100)
    MoveCamera(0, 0, 40, 150, #PB_Absolute)
    
    Repeat
      Screen3DEvents()
      
      If ExamineMouse()
        MouseX = -MouseDeltaX() * #CameraSpeed * 0.05
        MouseY = -MouseDeltaY() * #CameraSpeed * 0.05
      EndIf
      
      If ExamineKeyboard()
        
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -#CameraSpeed
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = #CameraSpeed
        Else
          KeyX = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -#CameraSpeed
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = #CameraSpeed
        Else
          KeyY = 0
        EndIf    
        
      EndIf
      
      RotateEntity(1, 0, 1, 0, #PB_Relative)
      RotateEntity(2, 0, 1, 0, #PB_Relative)
      
      RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
      MoveCamera  (0, KeyX, 0, KeyY)
      
      RenderWorld()
      Screen3DStats()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
  
Else
  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf

End
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Gestion d'objet 3D comment faire?

Message par comtois »

j'avais jamais entendu parler de Quaternions avec le DarkBasic ....
Y'a les matrices dans DarkBasic pro, ce n'est pas plus simple pour ceux qui ne connaissent pas :)

J'ai ajouté les quaternions parce que certains demandaient plus de contrôles sur les orientations, et ça passe par les quaternions avec ogre. Mais ce n'est pas une obligation d'utiliser les quaternions, tu peux utiliser les fonctions Rotatexxx().
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: Gestion d'objet 3D comment faire?

Message par comtois »

et il est possible de convertir un quaternion en matrice
http://jeux.developpez.com/faq/math/?pa ... rnions#Q54
ou une matrice en quaternion
http://jeux.developpez.com/faq/math/?pa ... rnions#Q55
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
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Gestion d'objet 3D comment faire?

Message par graph100 »

Et puis plus on vois du controle, plus ça devient compliqué.
Au final la programmation ce n'est pas FAIT pour être simple. PureBasic nous simplifie la tache, mais il faut rester capable de penser.

Après, en 3D, je trouve ça dur de commencer, c'est clair.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Gestion d'objet 3D comment faire?

Message par comtois »

Fred a écrit :j'ai milité pour la 3D reste simple
J'en sais quelque chose, Fred a refusé que j'ajoute ça :)
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: Gestion d'objet 3D comment faire?

Message par comtois »

GallyHC a écrit :Bonjour,

merci "Spock", par contre il serait temps de virtualité mon code source lolllllllllllllll...

Ouep j'étais sur la logique l'un fichier avec les 3 objets différencier. J'avais déjà fait pas mal de test en 3d mais 100% calculé et en VB6 (voir: http://www.vbfrance.com/codes_auteur/GALLY/1602.aspx). La j'avous avoir un peu peur en regardant ce qui a dans PB.

Surtout je ne sais pas comment commençais cela...

Ce n'est pas logique, car la je sèche complément et pourtant j'ai fait plein de recherche sur la 3d et les façon de faire.

Donc c'est plus sur la façon que PB gère cela ma demande... Enfin après il ne faut pas que ce topic parte dans une autre logique comme un peu déjà MR "Spock". Même si j'avous que cela ma fait un peu rire.

Cordialement,
GallyHC
Commence par écrire un truc, on te corrigera si besoin.
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.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Gestion d'objet 3D comment faire?

Message par G-Rom »

Salut GallyHC, avec 3 nodes ton problème est réglé.
une node de base , qui est attaché au socle de ta pièce.
une node qui servira de rotation horizontale , qui est attaché au node de base , la pièce est attaché à cette node.
une dernière node pour la rotation verticale qui est attaché au node de base aussi , la dernière pièce est attaché à cette node.
Tu l'auras compris , chaque pièce à une node , une node de base , et des "enfants" que tu attaches à la node de base.
pour bouger ta piece dans sa globalité tu bouges la node de base , et tu bouges les enfants pour animé ta pièce.
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Re: Gestion d'objet 3D comment faire?

Message par comtois »

un exemple pour convertir tes données en mesh . Il suffit de remplacer le v par MeshVertexPosition() et le f par MeshFace()

Code : Tout sélectionner

IncludeFile "Screen3DRequester.pb"

If InitEngine3D()
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
    
    
    ;- Create a mesh manually
    
    ; Define all the vertices and their attributes
    
    CreateMesh(0)
    
    
    MeshVertexPosition(-9.3138, -5.63431, 6.86589)
    MeshVertexPosition(-9.3138, -5.91071, 7.27779)
    MeshVertexPosition(-9.3138, -6.18706, 7.68969)
    MeshVertexPosition(9.38702, -6.18706, 7.68969)
    MeshVertexPosition(9.38702, -5.63431, 6.86589)
    MeshVertexPosition(-9.3138, -8.66584, -8.11031)
    MeshVertexPosition(-9.3138, -11.1446, -7.84731)
    MeshVertexPosition(-9.3138, -11.4801, -7.38891)
    MeshVertexPosition(-9.3138, -11.8155, -6.9305)
    MeshVertexPosition(-9.3138, -11.8155, 6.77289)
    MeshVertexPosition(-9.3138, -11.1446, 7.68969)
    MeshVertexPosition(-9.3138, -8.66584, 7.95269)
    MeshVertexPosition(-9.3138, -5.63431, -7.02351)
    MeshVertexPosition(-9.3138, -6.18706, -7.84731)
    MeshVertexPosition(9.38702, -8.66584, -8.11031)
    MeshVertexPosition(9.38702, -11.1446, -7.84731)
    MeshVertexPosition(9.38702, -6.18706, -7.84731)
    MeshVertexPosition(9.38702, -5.63431, -7.02351)
    MeshVertexPosition(9.38702, -5.91071, -7.43541)
    MeshVertexPosition(9.38702, -8.66584, 7.95269)
    MeshVertexPosition(9.38702, -11.1446, 7.68969)
    MeshVertexPosition(9.38702, -11.8155, 6.77289)
    MeshVertexPosition(9.38702, -11.8155, -6.9305)
    
    ; Define all the faces, based on the vertex index
    
    MeshFace( 8, 16, 9)
    MeshFace( 7, 16, 8)
    MeshFace(16, 23, 9)
    MeshFace( 9, 23, 10)
    MeshFace(23, 22, 10)
    MeshFace(22, 11, 10)
    MeshFace(21, 11, 22)
    MeshFace(20, 12, 21)
    MeshFace(21, 12, 11)
    MeshFace(20,  3, 12)
    MeshFace( 4,  3, 20)
    MeshFace(17, 19, 15)
    MeshFace(19, 18, 15)
    MeshFace(15, 18, 23)
    MeshFace(18,  5, 23)
    MeshFace(23,  5, 22)
    MeshFace( 5, 20, 22)
    MeshFace( 5,  4, 20)
    MeshFace(20, 21, 22)
    MeshFace(16, 15, 23)
    MeshFace(18, 13, 1)
    MeshFace( 5, 18, 1)
    MeshFace(18, 19, 14)
    MeshFace(19, 17, 14)
    MeshFace(13, 18, 14)
    MeshFace(14, 17, 6)
    MeshFace(17, 15, 6)
    MeshFace( 6, 15, 7)
    MeshFace(15, 16, 7)
    MeshFace( 3,  2, 9)
    MeshFace( 2,  1, 9)
    MeshFace( 1,  6, 9)
    MeshFace( 6,  8, 9)
    MeshFace( 6,  7, 8)
    MeshFace(12,  3, 9)
    MeshFace( 1, 13, 6)
    MeshFace(12,  9, 10)
    MeshFace(13, 14, 6)
    MeshFace(11, 12, 10)
    MeshFace( 1,  2, 4)
    MeshFace( 4,  2, 3)
    MeshFace( 5,  1, 4)
    
    FinishMesh(#True)
    ;-Entity
    CreateEntity(0, MeshID(0), #PB_Material_None)
    ScaleEntity(0, 10, 10, 10)
    
    ;-Camera
    CreateCamera(0, 0, 0, 100, 100)
    MoveCamera(0, 0, 0, 500, #PB_Absolute)
    CameraBackColor(0, RGB(80, 20, 20))
    
    
    Repeat
      Screen3DEvents()
      
      ExamineMouse()
      
      ExamineKeyboard()
      
      RotateEntity(0, 1.1, 0.3, 1.0, #PB_Relative)
      
      RenderWorld()
      
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
  
Else
  MessageRequester("Error", "The 3D Engine can't be initialized", 0)
EndIf

End
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.
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Re: Gestion d'objet 3D comment faire?

Message par Frenchy Pilou »

Dans le temps l'un des premiers à avoir "démocratisé" la 3D pour ordinateur perso c'était JPP!
(oui celui des soucoupes ;)
Il avait filé toutes les formules! La CAO sans peine!
Il a évidemment été pillé! :roll:
Son bouquin où il y avait tout s'appelait "Pangraphe" 8) 1984 Edition PSI
Dessins en 3 dimensions
Programmes Basic pour Apple II avec disquette! :mrgreen:
Le code est dans le bouquin itou! Et c'est super plaisant à lire!
On a pas fait mieux depuis! :D

Il va sans dire que comme c'est du basic, aucune difficulté à l'adapter! ;)

Allez cadeau il l'offre en ligne en PDF: la CAO Sans Peine 8)

Image
Dernière modification par Frenchy Pilou le jeu. 20/juin/2013 0:10, modifié 1 fois.
Est beau ce qui plaît sans concept :)
Speedy Galerie
Fred
Site Admin
Messages : 2809
Inscription : mer. 21/janv./2004 11:03

Re: Gestion d'objet 3D comment faire?

Message par Fred »

Il y a aussi un convertisseur de .obj en mesh OgreAssimpConverter (voir http://www.purebasic.com/documentation/ ... dmesh.html)
Répondre