struct CDIV_M3D{
 void * camera; // Código identificador de la cámara
 
 int file,      // Fichero de FPG
     graph,     // Gráfico del suelo
     width,     // Ancho del suelo
     depth,     // Profundidad del suelo
     region,    // Región en la que se va a representar
     z;         // Plano de profundidad de la escena 3D

 CDIV_3D_POINT
  position,     // Posición de la cámara en las coordenadas X, Y, Z
  distance,     // Distancia de la cámara en las coordenadas X, Y, Z
  angle3d;      // Ángulo de rotación de la cámara en las coordenadas X, Y, Z
};
struct CDIV_M3D m3d[10];

Esta estructura de 10 registros contiene ciertos campos relacionados con parámetros modificables de las ventanas de modo 3D. Los diez registros tienen los mismos nombres de campos, pero cada uno de ellos modifica los parámetros de una ventana de modo 3D diferente (ya que pueden activarse hasta 10 ventanas de este tipo).

Una ventana de modo 3D se podría definir como una región de pantalla que muestra un plano gráfico tridimensionalmente abatido. Por ejemplo como una hoja de papel con un dibujo que pusiéramos horizontal, visualizándose en pantalla como un suelo (o techo) virtual.

Para que un registro (del 0 al 9) de la estructura m3d tenga sentido, primero debe activarse dicha ventana de modo 3D (del 0 al 9) con la función start_3d() (ver esta función para más información sobre las ventanas de modo 3D).

Se entiende que los campos de esta estructura son complementarios a los parámetros de llamada de esta última función. Para poder observar un ejemplo práctico de un modo 3d, se puede acceder a la ayuda sobre la función start_3d().


Forma de uso de la estructura m3d:

Para acceder a estos campos se debe preceder el nombre del campo por la palabra m3d, el número de registro entre corchetes y el símbolo . (punto).

Por ejemplo, si se inicializaran dos ventanas, la número 0 y la número 1, se podría acceder al campo camera de ambas ventanas como m3d[0].camera y m3d[1].camera, respectivamente. Cuando se acceda a la ventana número 0 se puede, además, omitir el número de ventana entre corchetes, es decir, que la variable m3d->camera y la variable m3d[0].camera son, a todos los efectos, la misma para el lenguaje.


Se muestra a continuación una descripción detallada de cada campo

camera - Código identificador del proceso al que sigue la cámara. Para mover la cámara que controla la visión del modo 3D, únicamente se debe crear un proceso de modo 3D, un proceso que tenga su variable local ctype = c_3d_cam, y poner su código identificador en el último parámetro de la función start_3d() o la variable camera de esta estructura si desea cambiar de cámara. Tras esto, simplemente se deben modificar las variables locales x, y, z ( "x" indicará el desplazamiento horizontal, "y" indica el desplazamiento vertical y "z" el desplazamiento hacia el fondo), y angle3d de este proceso el ángulo a que nos desplazamos (Por ejemplo, se puede utilizar la función advance3d() para mover hacia delante la cámara).

El campo camera puede ser NULL en cuyo caso la cámara 3D será manejada manualmente por las variables de la escena 3D que más adelante se describen.

file - Los gráficos que se pretendan abatir en la ventana deben estar en un fichero cuyo código de fichero se debe especificar aquí, como segundo parámetro de la función. Los gráficos cargados con las funciones load_map() o load_pcx() (o creados con new_map()) se utilizarán como si pertenecieran al primer fichero (el fichero con el código 0).

gráfico - El código del gráfico principal que se va a abatir en la ventana y debe pertenecer al fichero anteriormente indicado. El ancho y alto del gráfico de la textura debe ser potencia de dos, pero puede ser diferente, ejemplo: una textura 64x16 está bien, pero una de 17x3 no.

with - Ancho de la superficie, puede tomar cualquier valor siempre que sea mayor que 0 e inferior a 10000.

depth - Profundidad o distancia de la superficie, igual que el ancho puede tomar cualquier valor siempre que sea mayor que 0 e inferior a 10000.

region - Aquí se indicará la región rectangular de pantalla en la que se va a mostrar, si se indica 0 como número de región, se mostrará en toda la pantalla. El resto de regiones se deben definir previamente con la función define_region() (una región no es más que una zona rectangular de la pantalla).

z - Prioridad de impresión del modo 3D, aquí se indica en qué plano de profundidad se debe pintar esta ventana, respecto al resto de procesos. Por defecto, esta variable valdrá 256 lo cual quiere decir que, como los procesos por defecto tienen su variable local z a 0, la ventana de modo 3D se pintará en un plano de profundidad mayor, más al fondo, visualizándose los gráficos de los procesos por encima de la ventana. No obstante los procesos que sean de modo 3D (ctype = c_3d_object o ctype = c_3d_cam) se visualizarán en el mismo plano de profundidad que la superficie 3D.

position - Posición (x, y, z) de la cámara. Definimos dicha posición accediendo a sus variables x, y, z de la siguiente forma: position.x = 0; position.y = 0;

angle3d - Ángulo de rotación sobre las coordenadas (x, y, z) de la cámara. Definimos dicha posición accediendo a sus variables x, y, z de la siguiente forma: angle3d.y = 0;

distance - Distancia (x, y, z) de la cámara al proceso seguido. Definimos dicha distancia accediendo a sus variables x, y, z de la siguiente forma: distance.z = -50;


Ver: Datos globales - start_3d() - stop_3d()