Dada una cuadrícula de cubos en 3D, ¿cuál es una manera eficiente de calcular un mapa de oclusión desde una perspectiva dada?

¿Estás tratando de calcular el mapa de oclusión para sombras o visibilidad? ¿Es un motor vóxel o … un clon de Minecraft? 🙂

Para abordar este problema, le diría que lo resuma al caso más simple:

Imagine una sola fila de cubos que está mirando de frente (solo puede ver un cubo sin importar cuántos haya en la fila. Cada cubo está vacío o lleno, pero no sabe cuál sin probarlo). significa que tienes que probar cada cubo desde el frente hasta la parte trasera hasta que llegues a uno lleno. En promedio, para una fila de n cubos, la operación tomará desde O (c) (tiempo constante) hasta O (n) ( peor de los casos). Eso no está mal, hasta que comience a factorizar en otras dimensiones: imagine una cuadrícula de tales filas, luego su tiempo de operación se convierte en O (n ^ 2) a (peor de los casos) O (n ^ 3). Cualquier cosa sobre O (n * log (n)), como programador, debería hacer que te encojas.

En esencia, es una operación de “búsqueda” muy básica, y tiene algunas opciones para hacerlo más rápido:

  1. Compresión: comprima todos los cubos en prismas rectangulares más grandes, de esa manera no tendrá que probar cada uno. Los octrees y las particiones de espacio binario pueden ser útiles aquí.
  2. “Fíngelo. Utilice la compresión de probabilidad o “con pérdida” en los datos para que sea más rápido buscarlos, a costa de pequeños errores en el procesamiento.
  3. Cachéalo. Caché la oclusión, si es posible para varios ángulos de visión diferentes, e interpolar linealmente entre los resultados.
  4. Use una combinación de técnicas, o piense mucho y cree las suyas propias. Piense en los datos en términos de diferentes transformaciones o sistemas de coordenadas (es decir, coordenadas polares / esféricas o dimensiones superiores (4)).

More Interesting

Me dieron una tarea de programación de desarrollo de software durante una semana. Se supone que debo terminarlo el próximo lunes, pero esta semana desperdicié mis días laborables de lunes a viernes. ¿Qué debo hacer?

Estoy realmente interesado en la computación paralela y quiero trabajar con ella en el futuro. Para la universidad, ¿debo especializarme en ingeniería informática o informática?

¿Cómo calculan las CPU / GPU funciones matemáticas especiales como sin, cos y sigmoid?

¿Se puede aplicar el aprendizaje automático a cualquier producto? En caso afirmativo, ¿qué sectores tienen más sentido?

¿Qué tan poderosa tiene que ser una computadora para ser considerada una supercomputadora?

Si desea hacer un proyecto interdisciplinario que relacione la ingeniería mecánica, la informática y la biotecnología, ¿cuáles son algunos posibles temas o ideas?

¿Qué formato de archivo para documentos es el más universal y atemporal?

¿Cuáles son las próximas conferencias o talleres importantes sobre procesamiento del lenguaje natural / lingüística computacional?

¿Cuáles son los diferentes tipos de algoritmos de aprendizaje automático?

Cómo resolver el siguiente problema de autómatas finitos

¿Es cierto que la inteligencia artificial matará empleos?

¿Cómo difieren los roles de lingüistas e informáticos en el campo de la PNL?

¿Por qué las computadoras de 16 bits eran mucho más potentes que las de 8 bits?

Criptografía: ¿Cuál es una explicación intuitiva de una red de sustitución-permutación?

¿Cómo se mantiene rápido Internet, a pesar de la creciente cantidad de información?