2017-08-19 4 views
0

Je fais un lanceur de sorts de rayon. L'objet ray a Vect2 origin et Vect2 direction. origin est le vecteur de la caméra. La direction est calculée par ce code2 rayons dimensions intersection avec la place

var a = (cam_dir - fov) + (((fov * 2)/width) * x); 
// x is the current x position of the screen. width is screen width 
var b = a * Math.PI/180; // radians 
ray.direction = new Vect2(Math.sin(b), Math.cos(b)); 

Le raycaster world est un tableau. Chaque élément est soit 0, soit un nombre positif. Je boucle ces valeurs et c'est là que j'ai besoin d'aide.

Étant donné un rayon qui a été calculé comme ci-dessus, et une boîte avec une largeur de 1, comment puis-je trouver la distance du rayon jusqu'au point où le rayon croise la boîte?

Si vous voulez mon regard de code fortement commenté à ce pastebin. Il y a un commentaire où j'ai besoin d'aide. De plus, il n'y a pas besoin d'ajouter le Vect2.add ou de soustraire ou de point ou de travers etc etc Je sais comment les faire et je l'ai fait tant de fois donc ne les définissez pas :) Merci uuuu

Répondre

0

Si vous avez besoin de trouver toutes les intersections avec grille, regardez here pour les liens à l'algorithme Amanatides-Woo.

Si seulement avec un carré, écrire des équations paramétriques pour rayons et de les résoudre pour les bords carrés

x = origin.x + direction.x * t 
y = origin.y + direction.y * t 

Trouver paramètre t pour le bord gauche ou à droite de la place (en fonction de direction.x signe), ainsi qu'à des ou le bord inférieur du carré (selon le signe direction.y). Vérifiez que l'intersection est sur le bord carré réel (pas sur sa continuation), et choisissez une valeur t inférieure s'il y a deux intersections valides.

Il existe également de nombreux algorithmes pour line clipping