Tengo muchos puntos pequeños para dibujar en la superficie de una esfera. Están situados por dos ángulos lat ∈ [-PI/2,PI/2] y long ∈ [-PI,PI] y el mismo radio R .
Mi cámara está apuntando directamente al centro de la esfera, y también está ubicada con ángulos de latitud y longitud. Sin embargo, su distancia desde el centro puede variar, pero siempre es mayor que R , llamémoslo d .
Para cada punto visible, tengo que hacer otros cálculos además del renderizado real, por lo que para hacer que el bucle de animación sea más rápido, me gustaría saber cuáles son visibles y cuáles no.
Lo que he probado:
No los represente si esta condición es verdadera: Math.abs(point.position.long - camera.position.long) > Math.PI/4 && Math.abs(point.position.lat - camera.position.lat) > Math.PI/4
Lo cual solo funciona cuando la latitud de la cámara es 0, porque si estás en un polo, el rango de longitudes que quieres ver es en realidad 2*PI, pero quieres un rango de latitud reducido.
Luego intenté tener en cuenta la latitud al calcular el rango de longitud, usando Math.PI/4 + 3/2*Math.abs(this.rotation.lat) en lugar de solo Math.PI/4 y es mejor pero aún no Perfecto.
Me gustaría saber cómo podría lograr esto y, en el mejor de los casos, tener en cuenta la configuración de la cámara, tal vez con sus matrices de proyección o vista de modelo (uso THREE.js para que estén disponibles) para reducir realmente la cantidad de puntos prestados.
Muchas gracias,