Proyección de 3d a 2d

Quería saber alguna fórmula para determinar la posición por e y de un punto, en base a la posición xyz en un espacio 3d. Osea, dar 3 datos (xyz) para que la fórmula me diga que la posición por e y del punto que yo marque es igual a tanto. Necesito una fórmula para (y) y otra para (x).
Respuesta

La D de la fórmula se refiere a la distancia del ojo a la pantalla del monitor y generalmente se usa un valor estadístico de 2 m. Debes poner ese valor de tal forma que utilice las mismas unidades en las que estás trabajando el render en 3D

1 respuesta más de otro experto

Respuesta
1
Son matrices, lo que ocurre es que el programa de Todoexpertos elimina los espacios. De todas formas es equivalente lo siguiente:
x' = x*cos(a) -y*sen(a)
y' = x*sen(a) +y*cos(a)
z' = z
donde a es el ángulo que rota el eje OZ.
x' = x*cos(b) -z*sen(b)
y' = y
z' = x*sen(b) + z*cos(b)
y b es lo que has rotado el eje OY hasta ese momento. Y por último:
x' = x
y' = y*cos(c) -z*sen(c)
z' = y*sen(c) + z*cos(c)
Rotas primero sobre OZ (con la variable a, que es el ángulo este), y obtienes x1, y1, z1, y estos los pones en las segundas fórmulas a la derecha y obtienes x2, y2, y3, y estos los pones en las terceras fórmulas a la derecha, y obtienes x3, y3, z3, que serán las coordenadas del punto una vez rotados los tres ejes. Finalmente utiliza las fórmulas de xp, yz para obtener el valor del pixel en pantalla.
Con respecto a esto último, hay unas fórmulas en el web que pone lo siguiente (parece que se trata de un programador de gráficos):
m_ancho = ancho_pantalla / 2;
m_alto = alto_pantalla / 2;
x_pantalla = (+(x_3D / z_3D) + m_ancho) * m_ancho;
y_pantalla = (-(y_3D / z_3D) + m_alto) * m_alto;
La verdad enti muy poco con todas esas lineas y barras, pero no te molesto más creo que no lo voy a entender...
Lo siento no entendí bien, pero ya esta me rindo.no entendí bien las formuals.
/ cos(a) -sen(a) 0 \ /x\
| sen(a) cos(a) 0 | |y|
| 0 0 1 | |z|
\ / \ /
Así obtienes la rotación al rededor del eje OZ.
Rotación HOY:
/ cos(b) 0 -sen(b)\ /x\
| 0 1 0 | |y|
| sen(b) 0 cos(b)| |z|
\ / \ /
Rotación OX:
/ 1 0 0 \ /x\
| 0 cos(c) -sen(c)| |y|
| 0 sen(c) cos(c) | |z|
\ / \ /
Los ángulos a, b y c son distintos.
Aplica las rotaciones siempre en el mismo orden. Y luego aplicas las fórmulas para pasar a coordenadas de pantalla.
En perspectiva cónica un hombre se encuentra en el punto medio de una pantalla a una altura de Y/2, donde Y es el alto de la pantalla. Tirando la línea desde un punto P(x, y, z) hasta el punto de mira (detrás de la pantalla), se corta la pantalla en (x', y', z'). Suponemos que z' es siempre 0. Lo que queremos es x' y y'. Para ello necesitamos la distancia DE del hombre a la pantalla. Por conveniencia, suponemos que el eje Z pasa por la cabeza del hombre.
tg (alfa) = z+D/y
Multiplicando por D, obtenemos y':
y'= D(z+D)/y
x'= D(z+D)/x
Gracias por tu respuesta. La verdad no entendí demasiado ya que no soy estudiante de matemática ni nada de eso solo estoy tratando de programar una proyecciond e un cubo y poder rotarlo con las flechas del teclado, para eso necesito crear 8 puntos que serian los vértices y darles a cada uno el valor de xyz para que una fórmula(en caso 2, para por e y) me calcule la posición POR e Y del cubo en la pantalla o sea, necesito la fórmula de px y de py.
Gracias
Las fórmulas que pides son éstas:
x' = D(z+D)/x
y' = D(z+D)/y
(No me preguntes qué vale DE, porque no lo sé, pero hace que se vea más o menos distorsionado, o sea, produce distintos efectos, y si quisieras un valor de DE de forma que se vea natural, te aconsejo que busques en Google.)
Las coordenadas de la pantalla, eso sí, están al revés y el (0,0) no está en el centro como he supuesto. Hay que cambiar las fórmulas un poco:
px = (Ancho/2) - D(z+D)/x
py = (Alto/2) - D(z+D)/y
En donde Ancho POR Alto es la resolución de pantalla.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas