#include <r3freng.h>
/* create rendering engine */
rend = R3New(R3CLID_FRENGINE, R3TAG_END);
/* pass scene to the renderer */
R3DoA(rend, R3FRM_BEGINWORLD, NULL);
R3DoA(root, R3PRIMM_RENDER,
R3PRIMA_RenderEngine, rend,
R3PRIMA_RenderAlways, TRUE,
R3TAG_END);
R3DoA(dreng, R3FRM_ENDWORLD, NULL);
If you need to cast several rays, you should used optimized ray-surface intersection
R3DoA(rend, R3FRM_OPTIMIZEHIT, NULL);
And then you are ready to shoot rays:
for(...) {
fromp = ..;
dir = ..;
hitfound = R3DoA3(rend, R3FRM_FINDHIT, &fromp, &dir, &intersectp);
if(hitfound) {
R3DoA(rend, R3FRM_EVALHITGEOMETRY, &normal);
...