ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Creacion de una linea de 45° grados usando OpenGL Java

José Sánchez EstrellaPráctica o problema7 de Marzo de 2016

3.091 Palabras (13 Páginas)350 Visitas

Página 1 de 13

[pic 1]

INSTITUTO TECNOLÓGICO DE CELAYA

PRACTICA DE LABORATORIO-GRAFICACION

JOSE HUGO SANCHEZ ESTRELLA

        CARRERA

NOMBRE DE LA ASIGNATURA

INGENIERIA EN SISTEMAS COMPUTACIONALES

GRAFICACION

Practica No.

Nombre de la practica

DURACION(HORAS)

1

Creación de una línea de 45° grados usando OpenGL en Netbeans

1

        1;        INTRODUCCION

OpenGL es una librería grafica que permite manipular graficos en 3D.

La librería de ejecuta a mismo tiempo que nuestro programa, sin importar la capacidad grafica de la máquina que usamos.

Esta librería puede usarse bajo cualquier tipo de sistema operativo y es soportada por una gran cantidad de lenguajes de programación.

2;        OBJETIVO

La siguiente práctica tiene como principal objetivo desarrollar habilidades en el manejo del software que permitan reforzar y aplicar los conocimientos de graficación obtenidos en la investigación anterior y en el salón de clases.

3;        MAYERIAL UTILIZADO

  • Hardware:
  • Laptop Dell Inspiron  15 , 5000 Series
  • Procesaor Intel Core i7 -5500
  • CPU 2.40 GHz
  • Memoria RAM 8GB
  • Software:
  • Sistema Operativo Windows 10 64 bits
  • Navegador Google Chrome 48.0.2564
  • NetBeans IDE 8.02

[pic 2]

INSTITUTO TECNOLÓGICO DE CELAYA

PRACTICA DE LABORATORIO-GRAFICACION

JOSE HUGO SANCHEZ ESTRELLA

5;        Desarrollo

Guía de instalación de la librería OpenGL en el IDE Netbeans

1;Nos dirigimos a la siguiente dirección web para descargar la versión oficial de la librería:

http://plugins.netbeans.org/plugin/3260/netbeans-opengl-pack

Una vez que descarguemos el paquete de acuerdo a nuestra versión de Netbeans, procedemos a descomprimir el archivo.

[pic 3]

[pic 4]

INSTITUTO TECNOLÓGICO DE CELAYA

PRACTICA DE LABORATORIO-GRAFICACION

JOSE HUGO SANCHEZ ESTRELLA

2;Nos dirigimos al menú Tools>Plugins

[pic 5]

3;Ahora pasmos a la pestaña Downloaded > Add Plugins

[pic 6]

[pic 7]

INSTITUTO TECNOLÓGICO DE CELAYA

PRACTICA DE LABORATORIO-GRAFICACION

JOSE HUGO SANCHEZ ESTRELLA

4;Navegamos hasta la ubicación donde descomprimimos el archivo descargado en el paso 1 y seleccionamos todos los plugins y hacemos clic en “Open”

[pic 8]

[pic 9]

INSTITUTO TECNOLÓGICO DE CELAYA

PRACTICA DE LABORATORIO-GRAFICACION

JOSE HUGO SANCHEZ ESTRELLA

        

5;Comprobamos que los plugins sean los correctos y damos clic en “Install”

[pic 10]

[pic 11]

INSTITUTO TECNOLÓGICO DE CELAYA

PRACTICA DE LABORATORIO-GRAFICACION

JOSE HUGO SANCHEZ ESTRELLA

6;Verificamos una vez más que los plugins sean correctos y hacemos clic en “Next”

[pic 12]

[pic 13]

INSTITUTO TECNOLÓGICO DE CELAYA

PRACTICA DE LABORATORIO-GRAFICACION

JOSE HUGO SANCHEZ ESTRELLA

7;Despues de leer con detenimiento los acuerdos de licencia, marcamos la opción y damos clic en “Install”

[pic 14]

Listo, con esto habremos terminado la instalación de los plugins OpenGl en Netbeans.

[pic 15]

INSTITUTO TECNOLÓGICO DE CELAYA

PRACTICA DE LABORATORIO-GRAFICACION

JOSE HUGO SANCHEZ ESTRELLA

Bitácora de incidencias

En el paso número 4 de la practica me encontré con el siguiente problema:

[pic 16]

Se trataba de un problema de versiones, investigue un poco el plugin que ocasionaba el error  y encontré que no afectaba en prácticamente nada a la práctica, así que decidí no instalarlo.

[pic 17]

INSTITUTO TECNOLÓGICO DE CELAYA

PRACTICA DE LABORATORIO-GRAFICACION

JOSE HUGO SANCHEZ ESTRELLA

Desarrollo de la Aplicación en Netbeans

Árbol del proyecto:

[pic 18]

[pic 19]

INSTITUTO TECNOLÓGICO DE CELAYA

PRACTICA DE LABORATORIO-GRAFICACION

JOSE HUGO SANCHEZ ESTRELLA

Desarrollo de la Aplicación en Netbeans

Código Fuente: de la class Linea45Grados

package org.yourorghere;

    //A continuacion se listan todos los paquetes que se importaron de las

//diferentes librerias para realizar la practica.

import com.sun.opengl.util.Animator;

import java.awt.Dimension;

import java.awt.Frame;

import java.awt.HeadlessException;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import javax.media.opengl.GL;

import javax.media.opengl.GLAutoDrawable;

import javax.media.opengl.GLCanvas;

import javax.media.opengl.GLEventListener;

import javax.media.opengl.glu.GLU;

/**

 *

 * @author José Hugo Sánchez Estrella INSTITUTO TECNOLOGICO de CELAYA

 * Materia:Graficación Profesor:ISC. RICARDO GONZÁLEZ GONZÁLEZ Practica 1

 */

/*

 Puesto que utilizaremos una ventana, como primer paso habra que

 heredar de la clase Frame, lo que nos permitira crear objetos que

 tengan las caracteristicas de un Frame.

 Ademas tambien implementamos la clase abstracta GLEEventListener y todos sus

 metodos.

 */

public class Linea45Grados extends Frame implements GLEventListener {

    public Linea45Grados() throws HeadlessException {

        /*

         Super: Aunque puede usarse para diferentes motivos, en este caso solo

         se utilizara para darle un titulo al Frame, es como el constructor del

         Frame

         */

        super("Linea de 45° en OpenGL");

        /*

         Instanciamos un nuevo objeto del tipo GLCanvas que sera nuestro lienzo,

         lo llamamos a_Canvas.

         */

        GLCanvas a_Canvas = new GLCanvas();

        /*

         Intancia de un objeto Dimension, solo por comodidad, para futuras

         definiciones de tamaño

         */

        Dimension a_tam = new Dimension(640, 550);

        /*

         A nuestro canvas(lienzo) le agregamos el listtenner ó escuchador de

         eventos, recibe como parametro "this" que hace referencia a nuestro

         objeto de clase Frame llamado Linea45Grados que implemento los metodos

         del GLEventLitener.

         */

        a_Canvas.addGLEventListener(this);

        /*

         Agregamos nuestro canvas al frame.

         */

        this.add(a_Canvas);

        /*

         Cambiamos el tamaño parametrisando el metodo setsize con el objeto

         dimension que creamos arriba.

         */

        this.setSize(a_tam);

        /*

         La clase Animator crea un subproceso en segundo plano en el que las

         llamadas a la display() se llevan a cabo.

         Después de cada estirable se ha vuelto a trazar,

         una breve pausa se ??realiza para evitar inundar la CPU,

         a menos setRunAsFastAsPossible(boolean) ha sido llamado.

       

         Instanciamos un objeto de la clase Animator llamado a_animador, que por

         lo que entiendo es una especie de controlador para evitar sobregargar el

         CPU.

         Es del contexto final lo que nos indica que sera constante, por lo que

         no podremos cambiarla despues de haberla declarado y asignado un valor.

         */

        final Animator a_animador = new Animator(a_Canvas);

        /*

         Agregamos el escuchador de eventos de Ventana a nuestro Frame.

         */

        this.addWindowListener(new WindowAdapter() {

            /*

             Como solo agregamos un adapter, podemos solo utilizar uno de los

             metodos del windowlistener

             En este caso usaremos el windowClosing que controla el evento de

             cierre de una ventana

             */

            public void windowClosing(WindowEvent e) {

                /*

                 En esta parte del codigo se ejecutara un hilo que se

                 encargara de que la llamada a Animator.stop de detenga antes

                 de cerrar la ventana y no dejar procesos corriendo en segundo

                 plano

                 */

                new Thread(new Runnable() {

                    /*

                     Dentro del hilo en el metodo run nos aseguramos de

                     detener el Animator y salimos de la aplicacion

                     */

                    public void run() {

                        a_animador.stop();

                        System.exit(0);

                    }

                }

                /*

                 Iniciamos el hilo

                 */

                ).start();

            }

        });

        /*

         Hacemos visble nuestro frame e iniciamos el animador.

         */

        this.setVisible(true);

        a_animador.start();

    }

    /*

     1 -public void init(GLAutodrawable drawable)

     Este método es llamado por drawable inmediatamente después de que el

     contexto de OpenGL (procedimiento que realizará un objeto GLCanvas)

     es inicializado. Puede ser utilizado para la inicialización de

     los gráficos de OpenGL que GLCanvas utilizará tales como el

     color de fondo, color de los objetos que se dibujarán,

     */

    public void init(GLAutoDrawable drawable) {

        /*

         La interfaz GL nos permitirá el acceso a todos

         los métodos utilizados por OpenGL

         */

        /*

         gl se utilizara para llamar las funciones de OpenGL

         */

        GL gl = drawable.getGL();

        /*

         Asigna el intervalo de intercambio, tiene como parametro un entero,

         entendi que se usa para sincronizar la imagen de la pantalla con los

         datos de uso del dispositivo.

         */

        gl.setSwapInterval(1);

        /*

         .glClearColor:La función glClearColor especifica valores claros para

         los buffers de color.

         parámetros (rojo,verde,azul,alfa)

         */

        gl.glClearColor(5f, 6f, 8f, 4f);

        /*

         Es el método que utiliza OpenGL para rellenar de color los polígonos.

         Se especifica con la función glShadeModel.

         Si el parámetro es GL_FLAT, ogl rellenará los polígonos con el color activo

         en el momento que se definió el último parámetro;

         si es GL_SMOOTH, ogl rellenará el polígono

         interpolando los colores activos en la definición de cada vértice.

         */

        gl.glShadeModel(GL.GL_SMOOTH);

    }

    /*

     3 - public void display(GLAutodrawable drawable)

     Este método es llamado por drawable para iniciar el renderizado de OpenGL a

     petición del cliente. Dentro de este método se incluirán los gráficos que

     GLCanvas dibujará y será llamado cada vez que se le solicite, o bien,

     cuando todos los GLEventListeners hayan sido notificados de que ocurrió algún evento.

     */

    public void display(GLAutoDrawable drawable) {

        GL gl = drawable.getGL();

        /*

         Limpia el area de dibujo

         */

        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

        /*

         Investigando un poco encontre que esta funcion se encarga de sustituir

         a la matriz actual con la matriz de identidad, aunque no me queda muy claro

         */

        gl.glLoadIdentity();

        /*

         Mueve el cursor de dibujo a las coordenadas que se especifican como

         parametros

         */

        gl.glTranslatef(-2.0f, 1.4f, -6.0f);

        gl.glTranslatef(1f, -5f, -3.0f);

        /*

         Establece el grosor de las lineas

         */

        gl.glLineWidth(4.0f);

        /*

         Usamos la función glBegin () que toma como un parámetro del "modo" o

         el tipo de objeto que se desea dibujar, en este caso serie una linea

         */

        gl.glBegin(GL.GL_LINES);

        gl.glColor3f(0f,0f, 2.0f);

        /*

         glVertex3f ??

         */

        gl.glVertex3f(2.0f, 0.0f, 1.0f);

        gl.glColor3f(0f, 2f, 0f);

        gl.glVertex3f(5.0f, 3.0f, 1.0f);

        gl.glEnd();

    }

    public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {

        GL gl = drawable.getGL();

        GLU glu = new GLU();

        if (height <= 0) {

            height = 1;

        }

        final float h = (float) width / (float) height;

        gl.glViewport(0, 0, width, height);

        gl.glMatrixMode(GL.GL_PROJECTION);

        gl.glLoadIdentity();

        glu.gluPerspective(45.0f, h, 1.0, 20.0);

        gl.glMatrixMode(GL.GL_MODELVIEW);

        gl.glLoadIdentity();

    }

    public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) {

    }

}

Código Fuente: de la class linea45

package org.yourorghere;

/**

 *

 * @author José Hugo Sánchez Estrella

 * INSTITUTO TECNOLOGICO de CELAYA

 * Materia: Graficación

 * Profesor:ISC. RICARDO GONZÁLEZ GONZÁLEZ

 * Actividad 1

 */

public class linea45 {

    public static void main(String[] args) {

        Linea45Grados nuevaLinea= new Linea45Grados();

    }

}

[pic 20]

INSTITUTO TECNOLÓGICO DE CELAYA

PRACTICA DE LABORATORIO-GRAFICACION

JOSE HUGO SANCHEZ ESTRELLA

Resultados

[pic 21]

[pic 22]

INSTITUTO TECNOLÓGICO DE CELAYA

PRACTICA DE LABORATORIO-GRAFICACION

JOSE HUGO SANCHEZ ESTRELLA

Bitácora de Incidencias

Al correr el programa saltaron los siguientes errores:

[pic 23]

[pic 24]

Solo hacía falta cerrar el objeto gl con la siguiente instrucción:

gl.glEnd();

[pic 25]

INSTITUTO TECNOLÓGICO DE CELAYA

PRACTICA DE LABORATORIO-GRAFICACION

JOSE HUGO SANCHEZ ESTRELLA

Referencias

  • http://web.salleurl.edu/~oscarg/resources/openGLTutorialSpanish.pdf
  • https://javaeditados.wordpress.com/2014/07/17/como-instalar-plugin-de-opengl-en-netbeans/
  • http://aflrovvs.blogspot.mx/2012/09/como-dibujar-figuras-geometricas-en.html
  • http://sabia.tic.udc.es/gc/Tutorial%20OpenGL/tutorial/cap3.htm

...

Descargar como (para miembros actualizados) txt (14 Kb) pdf (787 Kb) docx (932 Kb)
Leer 12 páginas más »
Disponible sólo en Clubensayos.com