Umanga, canto considera cómo responder en línea ... tal vez debería inscribirse :)
En primer lugar debo disculparme por algo que le da la equivocada - que hice la cara posterior sacrificio de uno. Pero el que necesitas es muy similar y es por eso que me confundí ... d'oh.
Obtenga la posición de la cámara como vector del mouse como se dijo anteriormente.
Para cada contorno, recorra todos los cordones de dos en dos (0-1, 1-2, 2-3, ... n-0) y haga un vec de ellos como antes. Es decir. caminar por el contorno.
Ahora haga la cruceta de esos dos (borde de contorno a vec de ratón) en lugar de entre pares como dije antes, haga eso para todos los pares y agregue todos los vectores.
Al final encuentra la magnitud del vector resultante. Si el resultado es cero (teniendo en cuenta los errores de redondeo), entonces está fuera de la forma, independientemente de la orientación. Si estás interesado en enfrentarlo, en lugar de la mag puedes hacer ese dot prod con el vector del mouse para encontrar el enfrentamiento y probar el signo +/-.
Funciona porque el algoritmo encuentra la distancia entre la línea del vector y cada punto. Cuando los resumes y estás afuera, todos cancelan porque el contorno está cerrado. Si estás dentro, entonces todos se resumen. Es en realidad la Ley de campos electromagnéticos de Gauss en física ...
Consulte: http: //en.wikipedia.org/wiki/Gauss%27s_law y tenga en cuenta que "el lado derecho de la ecuación es la carga total encerrada por S dividido por la constante eléctrica "notando la palabra" encerrado "- es decir, cero significa que no está encerrado.
Todavía puede hacer esa optimización con los cuadros delimitadores para la velocidad.
aprecio todas las respuestas, ya que solo puedo dar crédito a la generosidad una vez y seleccionar una respuesta. Escojo la respuesta de Kos como correcta, ya que he implementado y otorgado generosidad a Redrobes, para obtener una buena explicación de la geometría. gracias a todos. –
Mira cómo Irrlicht lo hace, ejemplo './7.collision' en 1.8.1 lo hace. –
El nombre de esta operación es "ray casting": https://unity3d.com/learn/tutorials/modules/beginner/physics/raycasting una física de Bullet también puede hacerlo: http://bulletphysics.org/mediawiki-1.5 .8/index.php/Using_RayTest –