Projection - la Transformation de la 3d à la 2d
J'ai un problème ou bien, je ne sais pas comment transformer de points 3d avec x,y,z les valeurs de 2d point,
Je dois dessiner de projection, où j'ai, x,y,z les valeurs pour les points mais je ne sais pas comment faire pour les transformer en 2d donc je peux me déplacer sur mon axe.
J'ai été en regardant autour de wiki et google, howevever je ne suis pas tout à fait sûr de la matrice des transformations dois-je utiliser pour obtenir de résultat voulu.
savez-vous quel plan que vous voulez projeter sur? comment serait cet avion (sous quelle forme)?
Eh bien, tbh je ne sais pas à propos de l'avion, cependant, j'ai de la fonction j'ai donc calculer z point x y de min max, et puis, je dois mettre les points sur l'axe, que j'ai peint au-dessus et je n'ai aucune idée de comment même de commencer à faire cela, j'ai regardé plusieurs films sur de tracer des points cependant, j'ai tracé de la fonction, j'ai donc en quelque sorte à relier les points, j'ai trouvé qu'il a à faire quelque chose avec de la matrice, mais bon, pas sûr de ce que la matrice de transformation dois-je appliquer
Vous pouvez trouver utile: en.wikipedia.org/wiki/3D_projection et tout ce qui est lié à elle
Eh bien, tbh je ne sais pas à propos de l'avion, cependant, j'ai de la fonction j'ai donc calculer z point x y de min max, et puis, je dois mettre les points sur l'axe, que j'ai peint au-dessus et je n'ai aucune idée de comment même de commencer à faire cela, j'ai regardé plusieurs films sur de tracer des points cependant, j'ai tracé de la fonction, j'ai donc en quelque sorte à relier les points, j'ai trouvé qu'il a à faire quelque chose avec de la matrice, mais bon, pas sûr de ce que la matrice de transformation dois-je appliquer
Vous pouvez trouver utile: en.wikipedia.org/wiki/3D_projection et tout ce qui est lié à elle
OriginalL'auteur user2141889 | 2013-04-05
Vous devez vous connecter pour publier un commentaire.
Nous allons d'abord supposer l'appareil photo à la recherche de votre scène est centrée à l'origine, et en regardant la
-z
direction.Alors:
une projection en perspective est donnée par:
x' = x/z
y' = y/z
une projection orthographique est donnée par:
x' = x
y' = y
(c'est à dire, juste jeter la composante z)
Maintenant que vous avez appliqué l'étape ci-dessus, vous pourriez obtenir un point qui est à
(x',y') = (-28.4, +134.5)
. Vous devez maintenant à l'échelle et du centre sur la base de la résolution de votre écran et l'appareil photo "zoom" et le ratio d'aspect : par exemple, vous souhaiterez peut-être multiplier parZoom
et ajouterscreen_center
à la fois votrex
ety
composants (attention: plus le rendu graphique de systèmes dey
direction pointant vers le bas, de sorte que vous pourriez avoir besoin pour échanger des signes pour lesy
composant). Vous pourrait encore se retrouver avec des pixels avec des coordonnées négatives ou dont les coordonnées sont plus grand que votre taille du canevas. Juste les jeter : il signifie qu'ils sont à l'extérieur de votre point de vue frustum.Enfin, vous pourriez vous demander que faire si votre appareil photo est pas pointant vers
-z
ou pas centrée à l'origine. Pour le plus tard, c'est simple: il suffit de soustraire la caméra coordonnées de la composante de l'ensemble de vos points 3D avant de faire quoi que ce soit. Pour la rotation de la caméra, il est également assez facile : il vous suffit de faire pivoter vos points à l'inverse de la façon dont votre caméra est tournée avant de faire quoi que ce soit. Cela signifie simplement que vous devez multiplier toutes vos coordonnées 3D par la transposition de la rotation de la caméra de la matrice. L'idée derrière cette étape est que le déplacement de la caméra autour est exactement le même que le déplacement de vos points dans la direction inverse (et il arrive que de l'inverse d'une matrice de rotation est la transposition de cette même matrice).OriginalL'auteur WhitAngl
Je vous recommande fortement de l'aide d'un graphique existante paquet pour ce faire, plutôt à essayer d'écrire vos propres bibliothèques. Je ne sais pas en quelle langue vous travaillez dans mais OpenGL est un open source du moteur graphique qui peut être utilisé pour le rendu 3D et a la croix-de la langue de la comparabilité de sorte qu'il pourrait être l'endroit pour commencer.
Si vous insistez pour le faire à la main, il est un très bon exemple de code dans la réponse à la cette question.
OriginalL'auteur EsotericNonsense
Vous avez seulement besoin de prendre l'angle de la caméra en compte si vous avez l'intention de faire pivoter votre forme en 3 dimensions. Si vous avez une solide compréhension de l'algèbre et de trigonométrie, il vaut la peine l'effort supplémentaire, car il rend votre programme plus souple, mais si vous n'êtes pas trop chaîne en mathématiques, je voudrais recommander la solution suivante.
Ce dont vous avez besoin pour être en mesure de faire pour projeter une image 3D en 2D simple est de créer et d'équation qui carte.
Vous pouvez le faire en définissant trois mappages forme d'un point 3D à 2D point.
J'ai utilisé (-.7,-.7) pour le z d'accès parce que ce point est d'environ 1 unité à partir de l'origine et à mi-chemin entre le x et le y accéder.
Après vous avez ces trois points que vous avez suffisamment d'informations pour calculer un point arbitraire x,y,z.
En infographie à l'origine d'une grille n'est pas au centre de l'écran, mais plutôt dans le coin en haut à gauche. Afin d'utiliser l'équation nous qui vient d'être généré dans notre programme, nous devons définir un décalage pour déplacer l'origine au centre de l'écran. Nous appellerons ce décalage de point(Ox, Oy).
Avec le décalage notre équation est la suivante.
OriginalL'auteur EsotericNonsense
J'ai trouvé une façon de projet 3D dans Isométrique 2D.
J'ai Supposé un angle pour la Vue Isométrique et, bien sûr, d'un point 3D de projet comme
qui dx, dy et dz sont vos valeurs personnalisées.
j'ai eu ensuite pour calculer un Delta Valeur pour X et Y Incrémente et Décrémente comme
OK, que, maintenant, je vais le Projet de points 3D en 2D point:
et le résultat final qui fonctionne le mieux dans RadDiagram.
Ce qui concerne/
2565452
etc. vous pouvez diviser X, Y et Z parDim ScaleValue As Ineger = 10000
OriginalL'auteur Hamed Zakery Miab
Cela fonctionne pour moi: (en vb).
f_nodes sont le plat nœuds, a_nodes sont la 3d nœuds après transformation sur les alpha, bêta et gamma. (x,y,z) est un point. Il y a de plus sophistiqué sur le.
OriginalL'auteur Chris