Raycaster



Raycaster

Se utiliza un emisor de rayos (o raypicking) para interactuar con objetos 3D desde el punto de vista de la cámara. El emisor de rayos logra esto al lanzar una línea que sigue el tronco de la cámara y verifica si hay colisiones con mallas 3D a lo largo del camino.

En GBEngine, cada escena tiene un raycaster de forma predeterminada que usa la primera cámara para renderizar. El emisor de rayos adjunto a la escena se actualiza cada fotograma con las coordenadas del mouse.

El código a continuación se puede usar para probar el objeto raycaster, comenzamos obteniendo los materiales rojo y azul del programa. En el método de actualización usamos el método raycaster intersectObjects para verificar si el mouse está encima de algún objeto.

Después de obtener la lista de objetos cruzados, los recorremos y cambiamos su material según el botón del mouse que esté presionado en ese momento.



var red, blue;

function initialize()
{
	red = program.getMaterialByName("red");
	blue = program.getMaterialByName("blue");
}

function update()
{
	//Check interseted objects
	var intersects = scene.raycaster.intersectObjects(scene.children);

	//Intersections list contains object, point of intersection, distance, uv and face
	for(var i = 0; i < intersects.length; i++)
	{
		if(Mouse.buttonPressed(Mouse.LEFT))
		{
			intersects[i].object.material = red;
		}
		else if(Mouse.buttonPressed(Mouse.RIGHT))
		{
			intersects[i].object.material = blue;
		}
	}
}

El método intersectObjects devuelve una lista de objetos de intersección, cada objeto de intersección tiene los siguientes atributos. Para hacer Raycast un solo objeto también es posible usar el método intersectObject que solo devuelve un solo objeto de intersección.

distance – distance between the origin of the ray and the intersection
point – point of intersection, in world coordinates
face – intersected face
faceIndex – index of the intersected face
indices – indices of vertices comprising the intersected face
object – the intersected object
uv - U,V coordinates at point of intersection


Las intersecciones se ordenan por distancia, el primer objeto en la lista de intersecciones es siempre el que está más cerca de la cámara. Si todo funcionó como se esperaba, debería tener algo similar a la siguiente demostración. Utilice el botón izquierdo del ratón para pintar los cubos de azul y el botón derecho del ratón para pintarlos de rojo.


Raycaster GBEngine Demo











NUESTROS Partners
image
Official

MANTENTE CONECTADO

Twitch
image image
Facebook
image image
Twitter
image image
YouTube
image image
Instagram
image image
Vimeo
image image