Je souhaite générer des rayons de la caméra dans le plan de visionnage. Pour ce faire, j'ai besoin de ma position de la caméra ("œil"), de haut, de droite et de vecteurs (où est le vecteur de la caméra dans la direction de l'objet que la caméra regarde) et p, le point sur le plan de visualisation. Une fois que je les ai, le rayon généré est: où T est la distance le long du rayon (supposez t = 1 pour l'instant). P> Ma question est, Comment puis-je obtenir les coordonnées 3D du point P étant donné qu'il est situé en position (i, j) sur l'avion de visualisation? Supposons que les coins supérieurs gauche et inférieur du plan de visualisation sont donnés. P> Remarque: le plan de visualisation n'est pas réellement un plan dans le sens où il ne s'étend pas infiniment dans toutes les directions. Au contraire, on peut penser à cet avion comme une image de largeur. Dans la direction X, la plage est de 0 à> la largeur et dans la direction Y La plage est de 0 -> hauteur. Je souhaite trouver la coordonnée 3D du (i, j) e élément, 0
p> p>
3 Réponses :
solution générale de l'iTNersection d'une ligne et d'un avion Voir http : //local.wasp.uwa.edu.au/~pbourke/geometry/planeline/ p>
VOTRE GRAPHIQUE GRAPHICS LIB (OpenGL / DirectCX, etc.) peut avoir une façon standard de faire cela p>
Edit: Vous essayez de trouver l'intersection 3D d'un point d'écran (par exemple, un curseur de la souris) avec un objet 3D dans votre scène? p>
Je n'essaie pas de trouver l'intersection d'une ligne et d'un avion. J'essaie réellement de générer la ligne. C'est-à-dire que le deuxième point final de la ligne est non connu et c'est ce que j'essaie de résoudre. Le "plan de visualisation" n'est que la terminologie. Ce n'est pas en fait un avion (puisqu'un avion s'étend infiniment dans toutes les directions). Plutôt ce "plan" a une dimension fixe et j'essaie de comprendre les coordonnées 3D de chacun des points de l'avion (les points de l'avion à partir de 0 à la largeur dans la direction x et 0 à la hauteur dans la direction de Y)
C'est ce que ces algorithmes atteignent. Vous pouvez identifier les polygones représentés dans un pixel, ainsi que les coordonnées barycentiriques dans i> it.
Pour fonctionner à P, vous avez besoin de la distance de la caméra dans le plan de détourage à proximité (écran), de la taille de la fenêtre située dans le plan de détourage proche (ou de l'angle de vue, vous pouvez calculer la taille de la fenêtre à partir de la taille de la fenêtre. Afficher l'angle) et la taille de la fenêtre rendue.
En effet, vous obtenez: p> où x et y sont: p>
Quelle est la différence entre view_width et largeur?
@MYX: La largeur est la largeur de l'écran, généralement en pixels. View_Width est la largeur, dans les coordonnées du monde, de la fenêtre positionnée dans le plan de clip près de laquelle la caméra regarde.
Lorsque je branché directement des formules suggérées dans mon programme, je n'ai pas obtenu de résultats corrects (peut-être que certains débogage devaient être effectués). Mon problème initial semblait être dans le malentendu des coordonnées (x, y, z) des points d'angle interpolant. Je traitais x, y, z-coordonnées séparément, où je ne devrais pas (et cela peut être spécifique à l'application, car la caméra peut être orientée dans n'importe quelle direction). Au lieu de cela, la solution s'est avérée une interpolation simple des points d'angle du plan de visualisation: p>
Cela pourrait être à n'importe quel angle. Mais vous savez que le plan de visualisation est perpendiculaire à la caméra et est en direction de
caméra_tawards code>. Ainsi,
caméra_teowards code> est le vecteur perpendiculaire au plan de visualisation et
caméra_eye + caméra_towards code> est le centre du plan de visualisation de la taille de la largeur de la taille *.
Désolé - a supprimé mon commentaire car j'ai fini par comprendre la question mieux. Mais (@all) Par souci de clarté Depuis que MyX a posté une réponse, j'ai demandé si le plan de visualisation pouvait être à n'importe quel angle, ou s'il s'agissait toujours d'un certain angle par rapport à la caméra.