2009-02-20 7 views
4

Je travaille sur un raytracer pour un grand projet, dans le but de produire des rendus réalistes sans se soucier du temps CPU. Fondamentalement pré-rendu, donc je vais pour la précision sur la vitesse. J'ai quelques difficultés à maîtriser certains des concepts mathématiques les plus avancés dans le domaine de l'éclairage. Fondamentalement, j'ai un point pour ma lumière. En supposant qu'il n'y ait pas de chute de distance, je devrais pouvoir utiliser le point sur le polygone que j'ai trouvé, et comparer la normale à ce point à l'angle d'incidence sur la lumière pour déterminer ma valeur d'illumination. Donc, compte tenu d'un point sur un plan, de la normale pour ce plan et de la lumière ponctuelle, comment pourrais-je déterminer cet angle?Comment calculez-vous l'angle d'incidence?

La raison pour laquelle je demande est que je ne peux pas trouver de référence pour trouver l'angle d'incidence. Je peux trouver beaucoup de références détaillant ce qu'il faut faire une fois que vous l'avez, mais rien ne me dit comment l'obtenir en premier lieu. J'imagine que c'est quelque chose de simple, mais je ne peux tout simplement pas le comprendre.

Merci

Répondre

8

Le dot product de la surface vecteur normal et le vecteur de lumière incidente vous donnera le cosinus de l'angle d'incidence, si vous avez normalisé vos vecteurs.

+0

Je viens de jeter un coup d'œil à mon ancien code raytracer de l'université, et en effet la seule fois qu'il mentionne l'angle d'incidence est liée au cosinus de celui-ci, qui est calculé exactement de cette façon. –

0
+0

Belle composition pour les équations, Kevin. Qu'avez-vous utilisé pour le faire? – duffymo

+0

On dirait qu'il a utilisé http://yourequations.com, site propre. –

+1

http://www.yourequations.com/ J'attendais une question sur laquelle je pourrais l'utiliser. –

0

REMARQUE: D'où je suis assis en ce moment, je ne peux pas télécharger une image pour vous. Je vais essayer de vous le dire avec des mots, cependant.

Voilà comment vous pouvez imaginer ce processus:

Définir alt text http://www.yourequations.com/eq.latex?%5Chat%7Bn%7D comme normale normalisée (le vecteur vertical qui sort de votre polygone plan et de la longueur de l'unité, ce qui rend le calcul plus facile).

Définissez alt text http://www.yourequations.com/eq.latex?p_0 comme point de globe oculaire.

Définissez alt text http://www.yourequations.com/eq.latex?p_1 comme le point d'impact de votre «rayon d'œil» sur le polygone.

Définir alt text http://www.yourequations.com/eq.latex?%5Chat%7Bv%7D en tant que vecteur normalisé pointant de alt text http://www.yourequations.com/eq.latex?p_1 à alt text http://www.yourequations.com/eq.latex?p_0. Vous pouvez écrire comme ceci:

alt text http://www.yourequations.com/eq.latex?%5Chat%7Bv%7D%20=%20%5Cfrac%7B%5Coverrightarrow%7B(p_0%20-%20p_1)%7D%7D%7B||p_0%20-%20p_1||%7D

Donc, vous avez créé un vecteur qui pointe de alt text http://www.yourequations.com/eq.latex?p_1 à alt text http://www.yourequations.com/eq.latex?p_0 puis divisé ce vecteur par sa propre longueur, vous donnant un vecteur de longueur 1 qui pointe de alt text http://www.yourequations.com/eq.latex?p_1 à alt text http://www.yourequations.com/eq.latex?p_0

la raison pour laquelle nous sommes allés à tout ce problème est que nous aimerions vraiment l'angle alt text http://www.yourequations.com/eq.latex?%5Ctheta qui est l'angle entre le alt text http://www.yourequations.com/eq.latex?%5Chat%7Bn%7D normal et ce vecteur alt text http://www.yourequations.com/eq.latex?%5Chat%7Bv%7D que vous venez de créer.Un autre mot pour theta est l'angle d'incidence .

Un moyen facile de calculer cet angle d'incidence est d'utiliser le dot product. En utilisant les termes définis ci-dessus, vous prenez les composantes x, y et z de chacun de ces vecteurs de longueur unitaire, vous les multipliez et vous ajoutez les sommes pour obtenir le produit scalaire.

alt text http://www.yourequations.com/eq.latex?%5Chat%7Bn%7D%20%5Ccdot%20%5Chat%7Bv%7D%20=%20%5Ccos%7B%5Ctheta%7D%20=%20n_x%20%20v_x%20+%20n_y%20%20v_y%20+%20n_z%20%20v_z

Pour calculer alt text http://www.yourequations.com/eq.latex?%5Ctheta, par conséquent, vous simplement utiliser le cosinus inverse sur le produit scalaire:

alt text http://www.yourequations.com/eq.latex?%5Ctheta%20=%20%5Carccos%28%5Chat%7Bn%7D%20%5Ccdot%20%5Chat%7Bv%7D%29

Edit: a modifié le ci-dessus pour ajouter yourequations.com formatage.