Calculo Vectorial y OpenGL

Codigos y Ejecutables:

Suma_Vect

Resta_Vect

Cruz_Vect

Yo y OpenGL

La primera vez que escuche de OpenGL fue de una compañera de la facultad (Verónica para ser mas exacto), para ese tiempo yo ya estaba enfadado de solo tener una pantalla en negro y texto para trabajar.

Trataba de buscar alguna forma de hacer algo mas que pantallas en negro, había probado muchas cosas, hasta que le dejaron una tarea de investigar sobre OpenGL a mi compañera Veronica y ahi fue donde comenzó todo. Pero no fue hasta casi un año después que pude arrancar una pantalla en negro de OpenGL en windows, casi me dieron ganas de llorar cuando la vi.

Me encontré con muchos baches en el camino antes de realmente entender como trabaja OpenGL, pero finalmente creo saber como trabaja en forma básica.

Si te interesa aprender algo de OpenGL desde cero (Con conocimientos básicos de C)

visita: http://nehe.gamedev.net/

La familia de aplicaciones Vect

Vect va a ser el nombre distintivo para la familia de aplicaciones que voy a desarrollar, por el momento tengo en mente desarrollar las siguientes aplicaciones:

  • Suma de vectores
  • Resta de vectores
  • Producto cruz
  • Volumen de un paralelepipedo
  • Campo Vectorial
  • Vectores N,B y T (Triedro Móvil)

Implementaciones

La primera API que comencé a usar fue la de Windows y ya que en la página de NeHe también la usan, quise comenzar a desarrollar este proyecto en C con API de Windows.

En Windows uso lo siguiente:

  • Visual Studio Profesional 2005
  • API de Windows con editor visual de recursos
  • Librerias de OpenGL de Windows
  • documentación del Visual Studio

Tiempo después me di cuenta que existía LWJGL (EN: Lightweight Java Game Library ES: Librería de Juegos Ligera de Java ), había visto JOGL (Java OpenGL), pero me pareció que LWJGL se adaptaba mejor a lo que quería hacer. LWJGL me permite trabajar en multiplataforma sin necesidad de ajustar muchas cosas (A mi parecer lo que hace fuerte a Java).

Para Trabjar en Java uso lo siguiente:

  • LWJGL
  • NetBeans 6.8 (Mac OS X)

A pesar de que existen diferencias significativas entre Java y C con Api de Windows en esencia es lo mismo.

Paradigma de Vect

En Java y en C existe el mismo un paradigma basico (por obvias razones difieren en implementación). El paradigma es el siguiente:

Un modulo se encarga de leer el bufer y dibujar correctamente la ventana, mientras que otro modulo se encarga de administrar el bufer correctamente y las opciones de dibujado (Agregar, Mover , Quitar, Antialiasing, etc.), ambos módulos comparten las banderas de dibujado y el buffer como medio de comunicación. Cabe mencionar que tanto en Java como en C cada modulo tiene su propio hilo de ejecución, y por lo tanto corren paralelamente.

C es estructurado y Java es Objetos, por lo tanto aquí es donde se bifurca el diseño de cada uno, a pesar de que el diseño básico es el mismo ambos no pueden seguir estrictamente con el mismo paradigma.

Por lo tanto se tendrá que adaptar un híbrido entre el paradigma Vect y un paradigma estructurado para C, y para Java un híbrido entre el paradigma Vect y un paradigma de Objetos.

Paradigma Estructurado (Lenguaje C)

C++/Java es al Objeto como C es a la función. Esta es una frase que menciona el libro de programación de C/C++ de Deitel & Deitel. ¿Que significa?, que lo que vayamos a hacer en C hay que hacerlo en forma de funciones y de estructura de datos.

Antes de comenzar a ver código lo mas recomendable es hacer una párrafo el cual describa de forma detallada lo que el programa debe de hacer (independientemente del lenguaje), y de aquí, para C es recomendable identificar los verbos, ya que cada verbo es una acción y por lo tanto una función.

El párrafo:

Una aplicación Vect es una aplicación que utiliza una ventana en 3D y un cuadro de dialogo. La ventana de 3D dibuja vectores a partir de un buffer ademas de una cuadricula. Aparte debe de capturar el ratón, cuando el ratón es arrastrado en la ventana todo el dibujado debe rotar conforme el ratón se mueve, todo en torno al punto de en el cual se comenzó a arrastrar el ratón, si el ratón es arrastrado horizontalmente, la escena rota alrededor del eje Y, si el ratón es arrastrado verticalmente, la escena es rotada en el eje X.

El cuadro de dialogo debe de permitir interfaces gráficas que permitan al usuario controlar el Antialiasing, la transparencia y la cuadricula, así como administrar el buffer de vectores (las opciones de administrar van desde agregar vectores, mover los vectores y eliminarlos).

El cuadro de dialogo y la ventana de dibujado en 3D solo se pueden comunicarse con variables intermedias (banderas de dibujado y buffers de vectores), cada ventana tiene su propio hilo de ejecución.

Para dibujar un vector primero se calcula los ángulos polares del mismo (azimutal y polar), esto es para dibujar el vector con la flecha bien ubicada, los componentes del vector se dibujar en forma diferente, solo considerando su magnitud y sentido, no se calcula ni angulo polar ni azimutal.

El párrafo anterior encapsula el paradigma Vect básico, faltaría adaptarlo a C, que es el siguiente apartado.

Estructurando el Párrafo

2 comentarios to “Calculo Vectorial y OpenGL”

  1. Jonathan.Aponte Says:

    lo puedes compartir nuevamente

    • tejonbiker Says:

      Buen día, por el momento he dejado estancado un poco los proyectos debido a la carga académica de mis otras materias, aun no se si volveré a liberar el código fuente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: