Comment obtenir les coordonnées d'Écran à partir d'un Point 3D? Opengl
J'ai vu beaucoup d'Écran-Coordonner mondiale de coordonner les messages, mais n'ont pas vu le contraire. Est-il un moyen facile d'obtenir à l'écran des coordonnées d'un point 3d, à partir de n'importe quel angle je l'ai vue il? Je suis à l'aide de C++ et opengl
C'est une copie exacte de stackoverflow.com/questions/724219/...
Elvheim: Presque une copie exacte. Cette question est spécifique au C++ et OpenGL. L'autre question est non. En fait, l'autre question est taggés avec "Java".
Elvheim: Presque une copie exacte. Cette question est spécifique au C++ et OpenGL. L'autre question est non. En fait, l'autre question est taggés avec "Java".
OriginalL'auteur Aero | 2010-09-25
Vous devez vous connecter pour publier un commentaire.
erjot la réponse est incomplète.
Il y a 2 choses supplémentaires à prendre en compte.
homogeneous = P . M . world
, lehomogeneous
vecteur est un 4-d de vecteur dans l'espace homogène. En particulier, pour le ramener à la [-1:1]^3 cube, vous avez besoin de diviser ses 3 premières coordonnées parhomogeneous.w
.cube.x = homogeneous.x /homogeneous.w
(ce que certains appellent la projection de fracture).window.x = viewport.x + viewport.width * (cube.x+1)/2
Dans le cas où vous vous souciez de la finale de Z, la transformation n'est pas en passant par le viewport, mais DepthRange à la place.
OriginalL'auteur Bahbar
Écran-les coordonnées d'un sommet est simplement le résultat de la multiplication de telles sommet par sa projection et de la matrice modelview:
screen_coordinates = projection_matrix * modelview_matrix * world_coordinates
Vous pouvez le faire à la main (surtout si vous utilisez des mathématiques de la bibliothèque pour faire des opérations sur des matrices) ou de l'utilisation gluProject, par exemple:
Pour juger si elle donne de corriger les coordonnées de l'espace ou non vous avez besoin de plus de détails sur l'OP du monde de l'installation, par exemple, je n'ai pratiquement jamais utiliser la fenêtre d'affichage les paramètres de mes jeux 2D. Mais il semble que votre boule de cristal fonctionne parfaitement thx pour downvote 🙂
ps. n'est-ce pas d'OpenGL (fixe fonction pipeline) PROJECTION de la matrice contenant le programme d'installation de la fenêtre d'affichage? et quels sont les cas, vous devez explicitement diviser par w? GLSL est de le faire par défaut.
vous utilisez la Fenêtre d'affichage, si vous le connaissez ou pas. Qu'est ce qui vous permet de dessiner à l'ensemble de votre fenêtre (et généralement quelque chose que vous changer si votre fenêtre change de taille). gluProject prend 9 params, pas 8. Vous avez retiré de la fenêtre d'affichage,... Et non, la projection ne contient pas de fenêtre de la transformer. Il apporte des primitives pour la [-1:1] cube, comme dans mon post. C'est à ce moment d'écrêtage qui se passe. Avant de fenêtre de la transformer. GLSL (je suppose que vous parliez de l'généré shaders?) n'est certainement pas en faisant w-diviser, car il doit se produire après la tonte trop (la tondeuse fonctionne sur les coordonnées homogènes).
OriginalL'auteur erjot
L'un de l'autre chose. Rappelez-vous, gluProject donne les coordonnées de l'endroit où le début de système de coordonnées commence à le coin en bas à gauche. Coordonnées de l'écran de commencer à le coin en haut à gauche. Pour obtenir les valeurs des coordonnées de l'écran de la valeur de y doit être soustraite de la hauteur de l'OpenGL appareil.
Par exemple dans Qt GLWidget pour dessiner un texte (0,1,2) les coordonnées du monde ça se passe:
gluProject(0,1,2,modelMatrix,projMatrix,sc.x,sc.y,sc.z);
renderText(sc.x,height()-sc.y"(0,1,2)");
OriginalL'auteur Kaz