// pass the mouse over the sphere, the blue box shows the direction of the // ray cast collision normal
// make a sphere (will automatically be placed at 0,0,0) CreateObjectSphere(1,50,48,48)
// create a blue box that will show the direction of the ray cast normal CreateObjectBox(2,1,1,20) SetObjectColor(2,0,0,255,255)
// create a directional light CreateLightDirectional(1,-1,-1,1,255,255,255)
// position the camera and have it look at the centre of the "map" SetCameraPosition(1,0,0,-100) SetCameraLookAt(1,0,0,0,0)
do
// get the position of the pointer (mouse) pointer_x =GetPointerX() pointer_y =GetPointerY()
// get the x, y and z unit vectors based on the pointer position unit_x# =Get3DVectorXFromScreen(pointer_x,pointer_y) unit_y# =Get3DVectorYFromScreen(pointer_x,pointer_y) unit_z# =Get3DVectorZFromScreen(pointer_x,pointer_y)
// calculate the start of the ray cast, which is the unit vector + the camera position start_x# = unit_x# start_y# = unit_y# start_z# = unit_z#-100
// calculate the end of the vector, which is the unit vector multiplied by the length of the ray cast and then add the camera position to it end_x# =800*unit_x# end_y# =800*unit_y# end_z# =800*unit_z#-100
// only ray cast against the sphere ifObjectRayCast(1,start_x#,start_y#,start_z#,end_x#,end_y#,end_z#)=1
// get the coordinates of the intersect intersect_x# =GetObjectRayCastX(0) intersect_y# =GetObjectRayCastY(0) intersect_z# =GetObjectRayCastZ(0)
// get the ray cast normal normal_x# =GetObjectRayCastNormalX(0) normal_y# =GetObjectRayCastNormalY(0) normal_z# =GetObjectRayCastNormalZ(0)
// position the blue box at the intersect point and orientate to point in the direction of the normal SetObjectPosition(2,intersect_x#,intersect_y#,intersect_z#) SetObjectLookAt(2,intersect_x#+normal_x#,intersect_y#+normal_y#,intersect_z#+normal_z#,0)
// if the ray cast intersects the sphere then show the blue box SetObjectVisible(2,1)
else
// if the ray cast does not intersect the sphere then hide the blue box SetObjectVisible(2,0)
endif
sync()
loop
Help make AGK better by submitting an example for this command! (All examples are subject to approval)