Git Product home page Git Product logo

motor3d's Introduction

Motor3D

Proyecto de Investigación en el Laboratorio de Sistemas de la UTN-FRC (1999)


                Engine 3D versión 0.04 (LOE3D004)
                                                         9/05/1999 22:32

Objetivo: Incorporarle al Engine el corte 3D de los objetos simulando la visión mediante un frustrum (pirámide truncada) y, por lo tanto, haciendo el clipping contra él.

Autor: Rubén Alejandro Falcón ([email protected])

Para ello se llevaron a cabo los siguientes cambios con respecto a la versión 0.03:

        * Se agrega el módulo de corte 3D mediante el frustrum.
        * Dentro de la función Draw() (módulo main.c):
                 - se elimina la llamada a Initmatrix() , ya que no es
                   necesaria la inicialización de la matrix a rotar.
                 - la función ProductMatrix se ha modificado debido a
                   que no actualizaba la matriz de la cámara, además de
                   realizar mal el producto de las matrices (ups!). Por
                   lo primero los objetos eran rotados convenientemente
                   (al rotar la cámara en forma local) pero los
                   acercamientos y alejamientos, que se producían en el
                   eje z del espacio de la cámara, eran iguales al los
                   del eje z del espacio de mundo 3D. Por lo segundo las
                   rotaciones se daban sobre el mundo3D, no sobre las
                   el nuevo espacio de la cámara (esto quedaba
                   evidenciado luego de rotar sobre el eje z 90 grados).
                   Estos bugs fueron encontrados en esta versión ya que
                   ahora nos podemos mover libremente por el "world
                   space" ;-).
        * En la función DrawObject3D(): ya no se le pasa como parámetro
          la matriz rotada ya que esta se utiliza para actualizar a la
          matriz de la cámara (en ProductMatrix() ) y los objetos
          son posicionados con esta última que es global.
        * Se declara el polígono clippoly, que será el nuevo polígono
          luego de los cortes necesarios contra los planos del frustrum y
          que es, al final, el que se dibujará.
        * Siguiendo dentro de la función DrawObject3D(), el polígono,
          luego de haberse comprobado que se encuentra de frente a la
          cámara ( Hidden() ), es pasado como parámetro a la función
          ClipToFrustrum() definiendo las coordenadas (las nuevas en caso
          de corte) del segundo parámetro: clippoly.

Otras modificaciones:

        * Para hacer más intuitivo la creación de los polígonos se cambia
          el sistema de coordenadas 2D de la pantalla

                          🡡                             🡡 y+
                          |                              |
                          |                              | 
                          |                              |         x+
          de  🡠----------|----------🡢   a   🡠----------|----------🡢
                          |         x+                   |
                          |                              |
                          |                              |
                          🡣 y+                          🡣

          agregando un signo menos (-) en la función ProyectPolygon().

Comentarios de la versión:

        * Se inicializa y muestra un nuevo objeto ob2 que representaría
          el piso del mundo 3D, aunque sea posible traspasarlo :-). Este
          objeto ayuda bastante para ubicarnos tridimensionalmente.
        * Creo que este es el momento adecuado de empezar a optimizar
          las rutinas, ya que el punto flotante y el cálculo de las
          funciones trigonométricas se están haciendo sentir.
          Según los testeos los fps varían alrededor de los 35 en este
          ejemplo particular de 13 polígonos.
        * Algunos documentos interesantes se en encuentran en .\Docs

Grupo de Investigación Engine 3D, LabSis - FRC - UTN:

      Rodrigo Matías Cabrera   [email protected]
      Pablo Alfredo Castro     [email protected]
      Rubén Alejandro Falcón   [email protected]
      Leonardo David Gonzalez  [email protected]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.