Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parHenriette Gilbert Modifié depuis plus de 6 années
1
// croquis de code pour redimensionner une boîte lors d'un drag de souris
var ray1 = camera.computeRay(old_mouse_x,old_mouse_y); var ray2 = camera.computeRay(mouse_x,mouse_y); var v1 = Vec3.cross( raycast_normalAtIntersection, ray1.direction ); var v2 = Vec3.cross( raycast_normalAtIntersection, v1 ); Plane plane = new Plane( v2, raycast_intersectionPoint ); var intersection1 = plane.intersects(ray1); var intersection2 = plane.intersects(ray2); if ( intersection1!==null && intersection2!==null ) { var translation = Vec3.diff( intersection2, intersection1 ); // project the translation onto the normal, // so that it is only along one world-space axis translation = Vec3.mult( raycast_normalAtIntersection, Vec3.dot( raycast_normalAtIntersection, translation ) ); // apply the translation to the appropriate face of the box, to resize the box ... }
2
n ray1 ray2 ( mouse_x, mouse_y ) ( old_mouse_x, old_mouse_y )
3
Ces deux points sont les intersections entre ray1 et ray2 avec une face de la boîte. On pourrait prendre la différence entre ces points pour obtenir un vecteur de translation, mais ce vecteur serait parallèle au plan de la face. On cherche plutôt un vecteur parallèle à n; un genre de projection de (ray2.origin – ray1.origin) sur n. n ray1 ray2 ( mouse_x, mouse_y ) ( old_mouse_x, old_mouse_y )
4
Nous allons donc bâtir un plan P qui passe par ce point, et qui est parallèle à n. Nous allons ensuite trouver les intersections entre ray1 et ray2 avec le plan P, et utiliser la différence entre ces intersections comme vecteur final. Notez qu’il y a une infinité de plans passant par le point surligné qui sont parallèles à n. Parmi cette infinité de plans, nous choisirons celui qui est le plus perpendiculaire possible à ray1. n ray1 ray2 ( mouse_x, mouse_y ) ( old_mouse_x, old_mouse_y )
5
intersection1 n ray1 ray2 ( mouse_x, mouse_y ) ( old_mouse_x, old_mouse_y )
6
v1 = n × ray1.direction Nous cherchons un plan P passant par intersection1 qui est parallèle à n et parallèle à v1 v1 intersection1 n ray1 ray2 ( mouse_x, mouse_y ) ( old_mouse_x, old_mouse_y )
7
v2 = n × v1 Nous cherchons un plan P passant par intersection1 qui est perpendiculaire à v2 v1 intersection1 n v2 ray1 ray2 ( mouse_x, mouse_y ) ( old_mouse_x, old_mouse_y )
8
Voici le plan P passant par intersection1, perpendiculaire à v2, et parallèle à n et parallèle à v1
ray1 ray2 ( mouse_x, mouse_y ) ( old_mouse_x, old_mouse_y )
9
intersection1 et intersection2 sont les intersections entre ray1 et ray2 avec le plan P.
La différence (intersection2-intersection1) est un vecteur parallèle à n dont la longueur correspond au changement de dimension désiré pour la boîte. v1 intersection2 intersection1 n v2 ray1 ray2 ( mouse_x, mouse_y ) ( old_mouse_x, old_mouse_y )
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.