Vamos a empezar por la perspectiva caballera. En ella, el eje X (anchura) y el Z (altura) se muestran "en verdadera magnitud" (a tamaño real), y el eje Y (profundidad) forma 135 grados con ellos:
Las distancias en el eje Y se suelen representar "reducidas", en un factor de 1/2, o bien de 2/3 o de 3/4.
Representar un punto 3D en pantalla usando este método es fácil:
- La coordenada X se representará tal cual, correspondiendo con la coordenada X de nuestra pantalla, salvo quizás un desplazamiento a un lado o a otro, para colocar el origen de coordenadas en un punto que no sea la esquina de la pantalla, y salvo quizá un factor de escala para poder ver las cosas con mayor o menor detalle.
- La coordenada Z del espacio (vertical) corresponderá con la coordenada Y de nuestra pantalla, salvo el desplazamiento del origen, quizá un factor de escala, y con una diferencia importante: es habitual que la Y de una pantalla crezca hacia abajo, y la Z del sistema de coordenadas suele crecer hacia arriba, así que habrá que cambiar de signo.
- Cada avance en el eje Y del espacio (profundidad), se reflejará en un ligero avance hacia abajo en la pantalla (y*0.5) y un ligero retroceso en horizontal (-y*0.5)
Por tanto, las coordenadas X e Y en pantalla de un punto de coordenadas reales (X,Y,Z), si no hacemos ningún cambio de escala, serían:
xPantalla = x + desplazX
yPantalla = -z + (y * 0.5) - (x * 0.5) + desplazY
Así un fuente de Basic256 que dibujara un "muelle" (un círculo "estirado hacia arriba", para que sus puntos tengan coordenadas X, Y, Z, distintas de cero en su mayoría, y se note el efecto de la profundidad y el de la altura) podría ser:
REM Datos del circulo
xCentroCirculo = 200
yCentroCirculo = 180
radioCirculo = 50
REM Desplazamiento del origen
desplazX = 0
desplazY = 200
clg
for i = 1 to 360
REM Calculo la x,y,z reales
x = xCentroCirculo + radioCirculo * cos(radians(i))
y = yCentroCirculo + radioCirculo * sin(radians(i))
z = i
REM Y las coordenadas de pantalla equivalentes
xPantalla = x + desplazX
yPantalla = -z + (y * 0.5) - (x * 0.5) + desplazY
plot xPantalla, yPantalla
pause (0.01)
next i
xCentroCirculo = 200
yCentroCirculo = 180
radioCirculo = 50
REM Desplazamiento del origen
desplazX = 0
desplazY = 200
clg
for i = 1 to 360
REM Calculo la x,y,z reales
x = xCentroCirculo + radioCirculo * cos(radians(i))
y = yCentroCirculo + radioCirculo * sin(radians(i))
z = i
REM Y las coordenadas de pantalla equivalentes
xPantalla = x + desplazX
yPantalla = -z + (y * 0.5) - (x * 0.5) + desplazY
plot xPantalla, yPantalla
pause (0.01)
next i
(Puedes leer más sobre perspectiva caballera, por ejemplo aquí:)
No hay comentarios:
Publicar un comentario