Bonjour,
Je viens de mettre un projet Delphi Sydney sur mon GitHub
c'est un projet qui permet d'afficher le modèle 3D du Rover Perseverance à partir du modèle GLB fourni par la NASA :)
Pièce jointe 593937
Version imprimable
Bonjour,
Je viens de mettre un projet Delphi Sydney sur mon GitHub
c'est un projet qui permet d'afficher le modèle 3D du Rover Perseverance à partir du modèle GLB fourni par la NASA :)
Pièce jointe 593937
salut
le choix de la VCL te restreint dans ton choix de cible.
il est quand même dommage :
- de ne pas utiliser les Tmesh ou TCustomMesh mises a notre disposition par Delphi
- être obligé de tout Ré-écrire alors que de puissant outils ont été mis à notre disposition en FMX
sinon bon et beau boulot ;)
avec CrossVCL tu peux porter l'appli sur d'autres plateforme ;)
par ailleurs, je suis un fan incontesté de OpenGL, or FMX utilise DX sous Windows et rend impossible (difficile) de faire un rendu OpenGL sous Windows.
et TMesh ne sera jamais aussi rapide que le code que j'ai fait pour OpenGL...Et qui pourrait être tout aussi rapide pour DX mais en l'adaptant.
Par ailleurs, tu noteras sur l'unit Execute.GLB est indépendante de la plateforme, la partie Windows/OpenGL est dans la classes descendante TGLBOpenGLModel ...donc on peut imaginer un TGLBFMXModel :)
alors j'ai tenté de faire une version FMX...elle fonctionne presque, mais les éléments sont mal positionnés...et je ne comprend pas pourquoi :aie:
Pièce jointe 594084
c'est ici que ça se passe, je crée un TDummy qui devrait orienter ses enfants correctement, ça correspond à ce code OpenGL
Cela passe bien en fmx chez moi
Pièce jointe 594122
euh...c'est mon projet ça ? avec quelle version de Delphi ?tu ne charges par un GLB là je suppose ?
oui mais ça c'est facile, un .OBJ n'a pas de hiérarchie :)
et ce qui m'intéresse c'est de pouvoir lire la GLB directement, ce que je fais très bien sous OpenGL mais j'ai un soucis pour transposer les transformations sous FMX...il y a quelque chose qui m'échappe.
Dis-toi que pour l'instant tu fais une compression à la "César" :mouarf:
salut
dis moi tu n'aurais pas un problème de chaînage
même si tu change le parent a posterioriCode:
1
2
3
4 procedure TGLBModelReader.CreatePrimitives(AParent: TFmxObject; const APrimitives: TArray<TPrimitive>); ... LMesh := TMesh.Create(LRoot); ...
j'aurai plutôt fait
Code:
1
2
3
4
5 procedure TGLBModelReader.CreatePrimitives(AParent: TFmxObject; const APrimitives: TArray<TPrimitive>); ... LMesh := TMesh.Create(AParent); ...
de plus pour les coordonné de texture
quand je lis le OpenGl
alors que dans ton codeCode:glTexCoordPointer(2, GL_FLOAT, 2 * SizeOf(Single), Pointer(texcoord));
tu l'associe au vertexcount qui lui est de trois (nombre de point déterminant ton triangle)
cela risque d'aller cherché un pointer ou il y en a pas ,Non ?
ne pas tenir compte pour la texture j'ai mal analysé :D
pour le moment il n'y a que cela qui me vient a l'esprit
il faut peut être aussi forcer le context pour qu'il dessinne des triangles comme tu le fait pour opengl
à priori LRoot c'est le Owner, pas la Parent...et pour ce qui est du rendu, bien que je trouve bizarre que les roues soient en ovale, ça m'a l'air bon...par contre le positionnement relatif des enfants n'est clairement pas bon
mais je vais partir sur un modèle plus simple pour comprendre ce qu'il se passe :) un parent, et un enfant avec juste une transformation, car là le modèle est trop complexe pour y voir clair
Bon j'ai trouvé !
1) pour construire un modèle comme cela, il faut obligatoire passer la propriété WrapMode de TMesh à TMeshWrapMode.Original, sinon le modèle est remise à l'échelle par rapport aux dimensions du Mesh :)
2) il fallait inverser l'ordre des transformations
3) j'ai du trouver un nouveau calcul pour le Quaternion (qu'on peut faire par un produit de deux matrices 4x4 !) car les rotations n'étaient pas bonnes.
comme indiqué plus haut, j'ai créé un TGLBBuilder qui m'a permis de construire un modèle simple avec les seules transformations que je voulais tester et j'ai pu comprendre ce qui foirait :D