Doom Wiki
Advertisement
Doom Wiki
Ang Binarios

Representación binaria de ángulos.

Los Ángulos son usados por el motor de Doom para describir direcciones, tales como definir de qué manera se está enfrentando a un personaje u objeto.

Ángulos de cosa en WAD[]

Los ángulos de las cosas en los archivos WAD se almacenan como valores cortos de 16 bits que representan grados de arco, que aumentan en sentido antihorario desde el este.

Punto de la brújula Grados
Este
Nordeste 45°
Norte 90°
Noroeste 135°
West 180°
Sudoeste 225°
Sur 270°
Sudeste 315°

Ángulos mientras se ejecuta el juego[]

Internamente, los ángulos se almacenan como valores enteros de 32 bits sin signo, con el cero representando el este o el borde derecho del mapa. Este sistema es conocido como Sistema Binario de Medición Angular o BAMS (por Binary Angular Measurement System). Los  valores crecientes representan ángulos cada vez más hacia la izquierda, usando la gama completa de precisión de 32 bits sin signo de para representar un círculo completo.

De este modo, al norte está representado (en hexadecimal) por 0x40000000, el oeste por 0x80000000 y el sur por 0xC0000000. El nordeste (45 grados) es entonces 0x20000000.

Observe que en este sistema es posible sumar y restar los valores de los ángulos, y los resultados se normalizan de forma automática; los valores irán entre cero y un poco menos de un círculo completo, porque la aritmética sin signo se lleva a cabo en módulos con el tamaño de la palabra de 32 bits.

Los 32 bits se pueden considerar como una fracción de un círculo, es decir, como una fracción binaria con una coma decimal implícita en el extremo izquierdo. Además, si un valor de ángulo se considera como una cantidad con signo, entonces los valores negativos representan la rotación en la dirección opuesta (en sentido horario). El valor más cercano a un grado en este sistema es 0xb60b60.

Ángulos finos[]

Un valor de ángulo se puede comprimir fácilmente dejando fuera los bits menos significativos. Por lo tanto, los ángulos en los archivos WAD se dan como valores cortos de 16 bits. Estos valores se expanden (desplazado hasta 16 bits) durante la carga.

Las funciones trigonométricas seno, coseno y tangente se implementan utilizando tablas de búsqueda. El valor del ángulo se comprime en un índice para usar con estas tablas desplazando hacia abajo 19 bits, lo que da como resultado un valor entre 0 y 8191 denominado "ángulo fino". La precisión resultante es principalmente adecuada para fines de juego y renderizado. Sin embargo, mientras que resulta computacionalmente barato en términos de instrucciones, este método tiene una penalización asociada al tamaño de caché, debido al tamaño de las tablas de búsqueda en cuestión.

Hay que tener en cuenta que desplazar 19 bits a la derecha trunca el valor del ángulo en no más de 360 / 8192 = 0.044 grados.

Bytes de ángulos[]

En el formato de mapa de Hexen y en los scripts ACS, particularmente en los argumentos de linedef especiales, los ángulos a menudo se almacenan como un único byte sin signo que van de 0 a 255. Debido a que este formato representa menos de 360 valores distintos, se sacrifica algo de precisión.

Las siguientes fórmulas se pueden utilizar para hacer la conversión entre grados y bytes de ángulos con números comprendidos entre 0 y 359:

  • angbinario = (grados * 256) / 360
  • grados = (angbinario * 360) / 256

Dependiendo del contexto, los valores 0 y 255 pueden tener significados especiales. Para hacer girar los poliobjetos, 0 significa girar exactamente 360º, mientras que 255 significa girar perpetuamente.

Rotación de planos[]

ZDoom y los source ports compatibles, como Eternity Engine, permite que se puedan girar los planos.

Siguiendo una convención adaptada del motor de Build, estos ángulos comprendidos entre 0 y 359, comienzan con 0 hacia el norte y progresan en una dirección en sentido horario, contrariamente al usual sistema de coordenadas empleadas por el motor de Doom.

Véase también[]

Advertisement