el formato de archivo quake 2 md2 (teoría)

 C Programming >> Programación C >  >> Tags >> File
el formato de archivo quake 2 md2 (teoría)

Puede usar una tabla precompilada de normales y usar una tabla de búsqueda para seleccionar una que sea "suficientemente buena" para un caso particular. Cada triángulo está en un plano distinto, y es ese plano el que tiene una normal, no el triángulo en sí.

Por ejemplo, imaginemos que tenemos un punto. Expandir ese punto en una esfera para los propósitos de esta discusión hace que sea un poco más fácil de comprender conceptualmente. Si dibujas un círculo perfecto alrededor de esa esfera en el y eje, luego gire ese círculo en el x eje 1 grado cada vez, terminará con 360 círculos. Si toma una normal en intervalos de 1 grado a lo largo de cada uno de esos círculos, terminará con 360 ** 2 puntos. A partir de ahí, tu normal es el vector desde el centro de la esfera hasta ese punto de la esfera, y es una normal para un plano construido tangencialmente al punto de la esfera. Lo que obtienes si calculas estos dos para cada punto en esa esfera es una tabla de normales precalculada, que casi seguramente será lo suficientemente buena para la mayoría de las situaciones. Ahora solo necesita diseñar un esquema de búsqueda para esos datos (plano -> normal).


Ya se ha respondido, pero quiero arrojar algo más de luz al respecto.

La tabla contiene vectores que cubren la superficie de la esfera unitaria de manera bastante uniforme. Parece que el conjunto de 162 vectores son las esquinas de un icosaedro subdividido. Esto se hace para comprimir con pérdida vectores 3D de longitud unitaria a un índice (8 bits), consulte cuantificación vectorial. Para almacenar un vector normal arbitrario, puede buscar en la tabla la coincidencia más cercana y almacenar el índice de esta coincidencia en su lugar. Con esta tabla de 162 vectores bien distribuidos, se espera que el ángulo entre el vector original y el aproximado esté por debajo de 11°, lo que parece ser lo suficientemente bueno para el motor Quake2.


El formato de archivo MD2 especifica que cada vértice tiene un "índice normal", y esta es una búsqueda en una tabla de normales bien conocida. Asumiría que estas normales se distribuyen alrededor de una esfera. Presumiblemente, la herramienta que construyó el modelo eligió la más apropiada de estas normales para cada vértice.

Con respecto a la primera respuesta:si desea un modelo muy facetado (como un cubo), entonces cada polígono tiene su propia normal, y cada uno de los vértices que forman ese polígono debe usar el mismo vector normal. Sin embargo, si desea un sombreado suave (como un torso), es común que cada vértice de un polígono tenga un vector normal diferente. Esto permite que la iluminación varíe a lo largo del polígono, lo que es útil tanto en escenarios de iluminación por vértice como por píxel.