User Tag List

Resultados 1 al 11 de 11

Tema: Pasar de un punto 3d a 2d

  1. #1

    Fecha de ingreso
    May 2004
    Ubicación
    Tarragona
    Mensajes
    1,015
    Mencionado
    17 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    3
    Agradecer Thanks Received 
    40
    Thanked in
    Agradecido 22 veces en [ARG:2 UNDEFINED] posts

    Pasar de un punto 3d a 2d

    Hola, estoy haciendo unas pruebas para construir unos ejemplo en 3dimensiones.
    Resulta que no encuentro ninguna web que me explique convertir o proyectar una coordenada 3d a 2d.

    Si alguno sabe alguna web o algo para que pueda leer a ver si lo entiendo se lo agrecederia.

    PD: He mirado en google y no he encontrado nada que me sirva.

    gracias.

  2. #2

    Fecha de ingreso
    Feb 2005
    Mensajes
    1,120
    Mencionado
    7 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    60
    Agradecer Thanks Received 
    84
    Thanked in
    Agradecido 50 veces en [ARG:2 UNDEFINED] posts
    El concepto basico es este:
    x2d = x3d/z3d
    y2d = y3d/z3d

    Luego, dependiendo de las operaciones que le apliques a las coordenadas en 3D, haras zooms, cambios de perspectiva, etc.
    Para alejar ya acercar la camara, multiplicas o divides x3d e y3d. Para cambios de perspectiva, multiplicaras y dividiras la z3d. Por ejemplo si la z3d vale 1 siempre, tendras el efecto de una vista colocada en el infinito, perdiendose le perspectiva
    Última edición por anibarro; 18/02/2008 a las 21:14

  3. #3

    Fecha de ingreso
    May 2004
    Ubicación
    Tarragona
    Mensajes
    1,015
    Mencionado
    17 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    3
    Agradecer Thanks Received 
    40
    Thanked in
    Agradecido 22 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por anibarro Ver mensaje
    El concepto basico es este:
    x2d = x3d/z3d
    y2d = y3d/z3d

    Luego, dependiendo de las operaciones que le apliques a las coordenadas en 3D, haras zooms, cambios de perspectiva, etc.
    Para alejar ya acercar la camara, multiplicas o divides x3d e y3d. Para cambios de perspectiva, multiplicaras y dividiras la z3d. Por ejemplo si la z3d vale 1 siempre, tendras el efecto de una vista colocada en el infinito, perdiendose le perspectiva
    No quiero hacer nada complicado, simplemente queria hacer alguna tonteria con el wiimote, que dependiendo de donde me mueva pues me aleje de la camara, se acerque o se mueva izquierda derecha (mirandolo de cara), y si algo me saliera pues no se, rotar al camara tb.
    Primero queria dibujar un cuadrado y con eso ya me basta para hacer la prueba.

  4. #4

    Fecha de ingreso
    Jan 2007
    Ubicación
    Ciudad Catedral, Reino de Dick
    Mensajes
    3,638
    Mencionado
    7 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    151
    Agradecer Thanks Received 
    100
    Thanked in
    Agradecido 79 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por anibarro Ver mensaje
    El concepto basico es este:
    x2d = x3d/z3d
    y2d = y3d/z3d
    Sí, la fórmula básica es esa, pero se te ha olvidado la distancia. Este es un cuarto valor que indica la distancia a la que se encuentra el punto de vista a la pantalla.

    En uno de mis proyectos calculo la distancia así:

    DstPant = (cos (FOV / 2) * (ancho_pantalla / 2)) / sin (FOV / 2);

    FOV es "Field Of View", esto es, el ángulo de la "lente". cos es coseno y sin es seno.

    Añadiendo esto a lo que ha dicho anibarro, la fórmula quedará así:

    x = (x3d / z3d) * DistPant
    y = (y3d / z3d) * DistPant

    Cita Iniciado por anibarro Ver mensaje
    Luego, dependiendo de las operaciones que le apliques a las coordenadas en 3D, haras zooms, cambios de perspectiva, etc.
    Para alejar ya acercar la camara, multiplicas o divides x3d e y3d. Para cambios de perspectiva, multiplicaras y dividiras la z3d. Por ejemplo si la z3d vale 1 siempre, tendras el efecto de una vista colocada en el infinito, perdiendose le perspectiva
    Me parece que el día que dieron eso yo no fui a clase

    Las coordenadas 3D funcionan igual que las 2D: incrementas o reduces los valores de los ejes y el punto se mueve en un sentido o en otro.

    Por cierto, que girar puntos o vértices es un pelín complicado. Normalmente se utilizan matrices pero yo conocía unas fórmulas para realizar el giro directamente que funciona muy bien con objetos simples y es más rápido. El problema es que no lo tengo a mano y no lo tendré durante una larga temporada .
    Proyectos actuales ----> MinGRo
    Entorno de desarrollo ----> FreePascal | Vim

  5. #5

    Fecha de ingreso
    May 2004
    Ubicación
    Tarragona
    Mensajes
    1,015
    Mencionado
    17 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    3
    Agradecer Thanks Received 
    40
    Thanked in
    Agradecido 22 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por Ñuño Martínez Ver mensaje
    Sí, la fórmula básica es esa, pero se te ha olvidado la distancia. Este es un cuarto valor que indica la distancia a la que se encuentra el punto de vista a la pantalla.

    En uno de mis proyectos calculo la distancia así:

    DstPant = (cos (FOV / 2) * (ancho_pantalla / 2)) / sin (FOV / 2);

    FOV es "Field Of View", esto es, el ángulo de la "lente". cos es coseno y sin es seno.

    Añadiendo esto a lo que ha dicho anibarro, la fórmula quedará así:

    x = (x3d / z3d) * DistPant
    y = (y3d / z3d) * DistPant

    Me parece que el día que dieron eso yo no fui a clase

    Las coordenadas 3D funcionan igual que las 2D: incrementas o reduces los valores de los ejes y el punto se mueve en un sentido o en otro.

    Por cierto, que girar puntos o vértices es un pelín complicado. Normalmente se utilizan matrices pero yo conocía unas fórmulas para realizar el giro directamente que funciona muy bien con objetos simples y es más rápido. El problema es que no lo tengo a mano y no lo tendré durante una larga temporada .
    Thnks!!! En cuanto pueda me pongo ha hacer algo de pruebas con el wiimote.

  6. #6

    Fecha de ingreso
    Dec 2005
    Mensajes
    8,005
    Mencionado
    43 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    643
    Agradecer Thanks Received 
    635
    Thanked in
    Agradecido 410 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    52
    Cita Iniciado por Ñuño Martínez Ver mensaje
    Sí, la fórmula básica es esa, pero se te ha olvidado la distancia. Este es un cuarto valor que indica la distancia a la que se encuentra el punto de vista a la pantalla.

    En uno de mis proyectos calculo la distancia así:

    DstPant = (cos (FOV / 2) * (ancho_pantalla / 2)) / sin (FOV / 2);

    FOV es "Field Of View", esto es, el ángulo de la "lente". cos es coseno y sin es seno.

    Añadiendo esto a lo que ha dicho anibarro, la fórmula quedará así:

    x = (x3d / z3d) * DistPant
    y = (y3d / z3d) * DistPant

    Me parece que el día que dieron eso yo no fui a clase

    Las coordenadas 3D funcionan igual que las 2D: incrementas o reduces los valores de los ejes y el punto se mueve en un sentido o en otro.

    Por cierto, que girar puntos o vértices es un pelín complicado. Normalmente se utilizan matrices pero yo conocía unas fórmulas para realizar el giro directamente que funciona muy bien con objetos simples y es más rápido. El problema es que no lo tengo a mano y no lo tendré durante una larga temporada .
    No es más que un producto de matrices.

    Si multiplicas por
    (1 0 0)
    (0 1 0)
    (0 0 1)
    Tienes lo mismo. (es a matríz unidad de dimensión 3)

    si multilicas por
    (sen(alfa) 0 cos(alfa)))
    (0 1 0 )
    (cos(alfa) 0 sen(alfa)))

    Tienes una rotación (si no se me ha ido la olla).

    En fin, siempre es multiplicar por la matriz de giro o por un multiplo o submultiplo de la matriz unidad para hacer escalados.
    A veces hago cosas

  7. #7

    Fecha de ingreso
    May 2004
    Ubicación
    Tarragona
    Mensajes
    1,015
    Mencionado
    17 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    3
    Agradecer Thanks Received 
    40
    Thanked in
    Agradecido 22 veces en [ARG:2 UNDEFINED] posts

    Ángulo de la lente

    Cita Iniciado por Ñuño Martínez Ver mensaje
    Sí, la fórmula básica es esa, pero se te ha olvidado la distancia. Este es un cuarto valor que indica la distancia a la que se encuentra el punto de vista a la pantalla.

    En uno de mis proyectos calculo la distancia así:

    DstPant = (cos (FOV / 2) * (ancho_pantalla / 2)) / sin (FOV / 2);

    FOV es "Field Of View", esto es, el ángulo de la "lente". cos es coseno y sin es seno.

    Añadiendo esto a lo que ha dicho anibarro, la fórmula quedará así:

    x = (x3d / z3d) * DistPant
    y = (y3d / z3d) * DistPant

    Me parece que el día que dieron eso yo no fui a clase

    Las coordenadas 3D funcionan igual que las 2D: incrementas o reduces los valores de los ejes y el punto se mueve en un sentido o en otro.

    Por cierto, que girar puntos o vértices es un pelín complicado. Normalmente se utilizan matrices pero yo conocía unas fórmulas para realizar el giro directamente que funciona muy bien con objetos simples y es más rápido. El problema es que no lo tengo a mano y no lo tendré durante una larga temporada .
    Holas! gracias por contestar. Una cosa, el nagulo de la lente cual debe ser? Es que no tengo ni idea. Debe estsar en radianes o en grados? Supongo que en radianes.

  8. #8

    Fecha de ingreso
    Jan 2007
    Ubicación
    Ciudad Catedral, Reino de Dick
    Mensajes
    3,638
    Mencionado
    7 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    151
    Agradecer Thanks Received 
    100
    Thanked in
    Agradecido 79 veces en [ARG:2 UNDEFINED] posts
    El ángulo debe indicarse en la medida que utilicen las funciones cos y sin. Si son las funciones C de toda la vida, pues sí, serán radianes. En cuanto al tamaño, creo que con 48º (0'838 radianes) se veía bien, aunque no lo recuerdo bien.
    Proyectos actuales ----> MinGRo
    Entorno de desarrollo ----> FreePascal | Vim

  9. #9

    Fecha de ingreso
    May 2004
    Ubicación
    Tarragona
    Mensajes
    1,015
    Mencionado
    17 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    3
    Agradecer Thanks Received 
    40
    Thanked in
    Agradecido 22 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por Ñuño Martínez Ver mensaje
    El ángulo debe indicarse en la medida que utilicen las funciones cos y sin. Si son las funciones C de toda la vida, pues sí, serán radianes. En cuanto al tamaño, creo que con 48º (0'838 radianes) se veía bien, aunque no lo recuerdo bien.
    Ya tengo ganas de ponermE!!!
    gracias.
    < - >
    Cita Iniciado por &#209;u&#241;o Mart&#237;nez Ver mensaje
    S&#237;, la f&#243;rmula b&#225;sica es esa, pero se te ha olvidado la distancia. Este es un cuarto valor que indica la distancia a la que se encuentra el punto de vista a la pantalla.

    En uno de mis proyectos calculo la distancia as&#237;:

    DstPant = (cos (FOV / 2) * (ancho_pantalla / 2)) / sin (FOV / 2);

    Lo que si he notado es que hay un punto de la figura que siempre se keda en 0,0 de la pantalla, fijo, por lo que se deforma. Que puede pasar?


    FOV es "Field Of View", esto es, el &#225;ngulo de la "lente". cos es coseno y sin es seno.

    A&#241;adiendo esto a lo que ha dicho anibarro, la f&#243;rmula quedar&#225; as&#237;:

    x = (x3d / z3d) * DistPant
    y = (y3d / z3d) * DistPant

    Me parece que el d&#237;a que dieron eso yo no fui a clase

    Las coordenadas 3D funcionan igual que las 2D: incrementas o reduces los valores de los ejes y el punto se mueve en un sentido o en otro.

    Por cierto, que girar puntos o v&#233;rtices es un pel&#237;n complicado. Normalmente se utilizan matrices pero yo conoc&#237;a unas f&#243;rmulas para realizar el giro directamente que funciona muy bien con objetos simples y es m&#225;s r&#225;pido. El problema es que no lo tengo a mano y no lo tendr&#233; durante una larga temporada .
    Una cosilla, si z3d vale 0 ke pasa?al dividir por 0 todo al carajo!
    < - >
    Acabo de hascer una prueba r&#225;pidilla pero el resultado no es lo que esperaba. Trabajo con enteros, por lo que se pierde algo.
    Defino 12 puntos 3d, transformo esos 12 puntos a 2d y luego dentro de un bucle segun tocas un cursor o otro incremento distancia o decremento o tb cambio la x y la Y de la c&#225;mara. Pero no lo acabo de ver bien del todo. PAsan cosas raras.


    p1 = new Point3D(1, 1, 1);
    p2 = new Point3D(2, 1, 1);
    p3 = new Point3D(1, 1, 2);

    p4 = new Point3D(1, 2, 1);
    p5 = new Point3D(1, 1, 1);
    p6 = new Point3D(1, 1, 2);

    p7 = new Point3D(1, 2, 1);
    p8 = new Point3D(2, 1, 1);
    p9 = new Point3D(1, 1, 1);

    p10 = new Point3D(1, 2, 1);
    p11 = new Point3D(2, 1, 1);
    p12 = new Point3D(1, 1, 2);

    como vereis repito algun punto pero no pasa nada. En principio esto tendria que ser una piramide con 4 caras.
    no se si se me escapa algo.

    Bueno, he solucionado una cosa, simplemente trabajndo con floats y a la hora de pintar pues lo paso a entreros. Con esto keda algo mejor, pero... de ahi hasta que parezca algo guapo...
    Última edición por cdrman; 20/02/2008 a las 19:02 Razón: Edición automática anti doble-post.

  10. #10

    Fecha de ingreso
    Jan 2007
    Ubicación
    Ciudad Catedral, Reino de Dick
    Mensajes
    3,638
    Mencionado
    7 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    151
    Agradecer Thanks Received 
    100
    Thanked in
    Agradecido 79 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por cdrman Ver mensaje
    Una cosilla, si z3d vale 0 ke pasa?al dividir por 0 todo al carajo!
    No debes dibujar nada que quede detr&#225;s de la c&#225;mara. Precisamente debes comprobar que z3d sea siempre mayor que cero. Si proyectas puntos que est&#233;n tras el punto de vista te pasar&#225;n cosas raras, como dices m&#225;s adelante.

    M&#237;rate este tutorial. Aunque se llama "crear un motor de portales 3D" incluye mucha informaci&#243;n sobre gr&#225;ficos 3D, matem&#225;ticas, matrices, etc. desde la base. Est&#225; en ingl&#233;s, s&#233; que es una perrada pero es de lo mejor que he encontrado y merece la pena el esfuerzo. Aprovecha a leerlo porque el sitio web est&#225; cerrado y cualquier d&#237;a de estos lo borran todo.
    Proyectos actuales ----> MinGRo
    Entorno de desarrollo ----> FreePascal | Vim

  11. #11

    Fecha de ingreso
    May 2004
    Ubicación
    Tarragona
    Mensajes
    1,015
    Mencionado
    17 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    3
    Agradecer Thanks Received 
    40
    Thanked in
    Agradecido 22 veces en [ARG:2 UNDEFINED] posts
    No es que tenga u nivel de ingl&#233;s excelente pero bueno.... algo entiendo.

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •