В общем случае не следует создавать объекты внутри displayFunc (как правильно указал dark_charlie). Но это просто плохая практика, не более того.
Если вам требуется обнаружение столкновений, вы должны сделать его синхронным с рендерингом, то есть вызвать его из вашего displayFunc (в конце).
Я думаю, причина, по которой вы хотите использовать таймер, состоит в том, чтобы иметь физику постоянного шага. Обычно это делается другим способом, используя gettimeofday () (или GetTickCount () для окон), чтобы получить время, и в зависимости от времени, прошедшего между кадрами, физика называется N раз. Это даст вам гораздо лучшую точность, чем использование таймеров GLUT, поскольку таймеры работают с точностью до 10 секунд миллисекунд, что может быть много при работе с быстро движущимися объектами, что приводит к заиканию.