Comment un modèle 3D est-il traité dans une unité?
Quand j'ai un modèle aléatoire que je veux adapter dans mon port de vue je ne sais pas s'il est trop grand ou pas, si je dois le traduire pour être au milieu ...
Je pense qu'un objet 3d pourrait avoir c'est propre origine.Modèle 3D à intégrer dans la fenêtre d'affichage
Répondre
Désolé, votre question est très floue. Je suppose que vous voulez centrer un modèle 3D sur une fenêtre. Vous pouvez y parvenir en calculant la boîte englobante du modèle. Pour ce faire, parcourez tous les polygones et obtenez les coordonnées X/Y/Z minimum/maximum. La boîte de délimitation donnée par les points (min_x,min_y,min_z)
et (max_x,max_y,max_z)
contiendra le modèle entier. Vous pouvez maintenant centrer le modèle en regardant le centre de cette boîte. Avec quelques calculs supplémentaires (en fonction de votre FOV), vous pouvez également obtenir les bordures gauche/droite/supérieure/inférieure à l'intérieur de votre fenêtre.
Vous devez trouver un volume englobant, une forme qui entoure tous les sommets de l'objet, pour votre objet plus facile à utiliser que l'objet lui-même. Les sphères sont souvent utilisées pour cela. Soit l'artiste peut définir la sphère dans le cadre des informations du modèle, soit vous pouvez l'élaborer au moment de l'exécution. Calcul de la sphère optimale est très difficile, mais vous pouvez obtenir une bonne approximation en utilisant les éléments suivants:
determine the min and max value of each point's x, y and z
for each vertex
min_x = min (min_x, vertex.x)
max_x = max (max_x, vertex.x)
min_y = min (min_y, vertex.y)
max_y = max (max_y, vertex.y)
min_z = min (min_z, vertex.z)
max_z = max (max_z, vertex.z)
sphere centre = (max_x + min_x)/2, (max_y + min_y)/2, (max_z + min_z)/2
sphere radius = distance from centre to (max_x, max_y, max_z)
En utilisant ce domaine, déterminer la position du monde qui permet la sphère à visualiser en pleine - géométrie simple déterminera ce .
«j'ai donc essayé de le réduire »
La meilleure chose à faire dans cette situation est de ne pas transformer votre modèle du tout! Laisse-le. Ce que vous voulez changer, c'est votre appareil photo.
Commencez par calculer la zone de délimitation de votre modèle quelque part dans l'espace 3D.
Ensuite, calculez le rayon en prenant le maximum (aabb.max.x-aabb.min.x, aabb.max.y-aabb.min.y, aabb.max.z-aabb.min.z). C'est brut, mais ça fait le travail.
Pour centrer l'objet dans la fenêtre, placez la caméra sur la position de l'objet. Si Y est votre axe avant, soustrayez le rayon de Y. Si Z est l'axe avant, soustrayez-le à la place. Soustrayez un facteur de fudge pour que vous passiez le mauvais plan près du plan afin que votre modèle ne soit pas découpé. J'utilise des quaternions dans mon moteur avec une belle méthode lookat(). Appelez donc lookat() et passez au centre de la boîte englobante. Voila! Votre objet est centré dans la fenêtre, quel que soit son emplacement dans le monde. Cela place toujours l'axe de la caméra aligné, vous pouvez donc avoir envie de transformer la caméra en espace modèle, soustrayez le rayon, puis regardez à nouveau le centre. Ensuite, vous regardez toujours l'arrière du modèle. La clé est toujours le lookat().
Voici un exemple de code de mon moteur. Il vérifie pour voir si nous essayons d'encadrer un morceau de terrain statique, si c'est le cas d'une hauteur, d'une lumière ou d'un maillage statique. Un visuel est tout ce qui attire dans la scène et il existe des dizaines de types différents. Une instance Visual :: Instance est une copie du visuel, ou où le dessiner.
void EnvironmentView::frameSelected(){
if(m_tSelection.toInstance()){
Visual::Instance& I = m_tSelection.toInstance().cast();
Visual* pVisual = I.toVisual();
if(pVisual->isa(StaticTerrain::classid)){
toEditorCamera().toL2W().setPosition(pt3(0, 0, 50000));
toEditorCamera().lookat(pt3(0));
}else if(I.toFlags()->bIsLight){
Visual::LightInstance& L = static_cast<Visual::LightInstance&>(I);
qst3& L2W = L.toL2W();
const sphere s(L2W.toPosition(), L2W.toScale());
const f32 y =-(s.toCenter()+s.toRadius()).y();
const f32 z = (s.toCenter()+s.toRadius()).y();
qst3& camL2W = toEditorCamera().toL2W();
camL2W.setPosition(s.toCenter()+pt3(0, y, z));//45 deg above
toEditorCamera().lookat(s.toCenter());
}else{
Mesh::handle hMesh = pVisual->getMesh();
if(hMesh){
qst3& L2W = m_tSelection.toInstance()->toL2W();
vec4x4 M;
L2W.getMatrix(M);
aabb3 b0 = hMesh->toBounds();
b0.min = M * b0.min;
b0.max = M * b0.max;
aabb3 b1;
b1 += b0.min;
b1 += b0.max;
const sphere s(b1.toSphere());
const f32 y =-(s.toCenter()+s.toRadius()*2.5f).y();
const f32 z = (s.toCenter()+s.toRadius()*2.5f).y();
qst3& camL2W = toEditorCamera().toL2W();
camL2W.setPosition(L2W.toPosition()+pt3(0, y, z));//45 deg above
toEditorCamera().lookat(b1.toOrigin());
}
}
}
}
- 1. Rendre un modèle 3D transparent
- 2. Pourquoi OpenGLES étire mon modèle 3D?
- 3. Framerate irrégulier à l'entrée de la souris dans l'application 3D
- 4. Intégrer des classes de physique personnalisées avec OGRE 3D?
- 5. Bibliothèque pour intégrer la vue 3D dans une application de swing?
- 6. Comment présenter un sous-modèle dans une scène 3D?
- 7. Application en place des transformations au modèle 3D dans WPF
- 8. Comment intégrer une fenêtre Powershell dans une autre fenêtre wpf ou un formulaire Windows?
- 9. Adobe Flex - Comment intégrer un composant dans la "fenêtre" d'une image?
- 10. Fenêtre popup semblable à la fenêtre modale
- 11. Développer 2D en 3D avec projection orthographique et modèle étiré
- 12. Comment intégrer le ItemTemplate pour un ListBox wpf dans les ressources de la fenêtre?
- 13. Intersection ligne à ligne dans l'espace 3D
- 14. Quel format de modèle 3D devrais-je utiliser?
- 15. Fichiers 3D dans vb.net
- 16. Plusieurs formulaires dans la fenêtre C#
- 17. Intégrer Web Widget (?) Dans la page Web
- 18. Recharger la fenêtre parent à partir de la fenêtre enfant
- 19. Windows Terminal - Windows Formulaire à intégrer cmd
- 20. Intégrer iCalendar dans Moodle
- 21. Sélection d'une bibliothèque SOAP à intégrer à la webapp ISAPI
- 22. jquery ajouter à la fenêtre
- 23. Comment afficher une fenêtre système Windows/X dans un espace 3D sur une texture?
- 24. Intégrer SVG dans XUL
- 25. calcul vectoriel 3D dans WPF
- 26. Lien dans la fenêtre contextuelle ne ferme pas la fenêtre?
- 27. Obtenez la valeur d'une fenêtre à une autre fenêtre - javascript
- 28. Intégrer WPF et Windows Forms
- 29. Intégrer pdb dans l'assemblage
- 30. Objet 3D interactif dans Surface
i grabé un modèle aléatoire sur Internet et je voulais le montrer dans opengl pour l'apprentissage, mais je ne vois rien, mais en tordant un peu, je peux voir un mouvement, donc j'ai essayé de l'escalader bas, c'est un peu mieux, donc je voulais savoir comment je pourrais obtenir les limites du modèle comme vous l'avez dit pour s'adapter au modèle à mon avis – CiNN