un sujet intéressant !!
Quelques optimisations qui n´ont pas été évoquées : pour le calcul des normales, il faut utiliser des racines carrées. Cette opération est lente : évite les racines carrées comme la peste -> précalcule tout ce que tu peux.
poru les calculs de distance, par exemple, une optimisation classique : si tu veux comparer 2 distances, compare leur carré si ça peut t´éviter une racine : en effet, une distance est toujours positive, donc, dans ce cas la a<b <=> a²<b².
Sinon, un octree est un découpage récursif malin du monde :
http://cfd.enginsoft.it/st/software/immagini/octree.gif
ce dessin montre un résultat visuel de la chose.
Tu ranges ensuite les triangles dans le bon petit cube, si ce triangle est a cheval sur plusieurs cubes, tu ranges dans le pere commun a ces cubes.
Apres cela, tu calcules, avec ton frustrum, quels cubes de l´octree sont visibles, et tu ne rends que les triangles inclus dedans.
Bonne optimisation.