Вы можете получить текущую матрицу для каждого объекта:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(x,y,z);
glRotate(r,1,0,0);
glTranslate(-x,-y,-z);
for (i=0 to 20) objects
glpushMatrix();
... some matrix transformations specific for the object
... and get the final matrix and store it to object member
glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat*)&object->modelMatrix);
draw_object()
glpopMatrix();
При пересечении лучей просто умножьте матрицу объекта на координату локальной точки, чтобы получить ее в абсолютном пространстве, где определен луч.