Está en la página 1de 4
Escuela Profesional de Ingenieria de Sistemas e Informatica COMPUTACION GRAFICA Guia de aplicacién N° 4 L.FECHA : Noviembre del 2021 lTema : —— Grafico de circunferencia Il, COMPETENCIAS A CONSEGUIR + Implementar un programa que muestre como graficar una circunferencia usando las librerias OpenGL Iv. Fundamento Teérico Los comandos de la funcién glVertex se utilizan dentro de los pares glBegin / glEnd para especificar vértices de punto, linea y poligono. Las coordenadas de color, normal y texturas actuales se asocian con el vértice cuando se llama a glVertex. Cuando solo se especifican xey, 2 se establece por defecto en 0.0 y w por defecto en 1.0. Cuando se especifican x, y yz, w toma el valor predeterminado de 1.0. Invocar glVertex fuera de un par glBegin / glEnd da como resultado un comportamiento indefinido. La funcién Reshape o de remodelacién define qué hacer cuando se cambia el tamajio de la ventana. Debe tener un tipo de retorno vacio y toma dos parametros int (el nuevo ancho y alto de la ventana). glViewport define la esquina inferior izquierda y las dimensiones de la ventana de dibujo: Display es una lista de visualizacién, es un grupo de comandos OpenGL que se han almacenado para su posterior ejecucién. Cuando se invoca una lista de visualizacién, los comandos que contiene se ejecutan en el orden en que se emitieron. La mayoria de los comandos de OpenGL pueden almacenarse en una lista de visualizacién o emitirse en modo inmediato, lo que hace que se ejecuten inmediatamente. Puede mezclar libremente la programacién en modo inmediato y las listas de visualizacién en un solo programa. En esta Guia veremos como dibujar una circunferencia a traves de opengl en Java utilizando la IDE Netbeans 8.2. Para poder dibujar una circunferencia hacemos uso de la funcion gl.GL_POLYGON. Antes que nada es importante saber que para poder utilizar opengl en netbeans se debe tener instalado el plugin que permite hacer esto, El dibujo de una circunferencia es muy sencillo y se logra a traves del siguiente codigo: {MDibuja circunferencia @l.glBegin(gl.GL_POLYGON); : i100; +4) {loat) Math.cos(it24Pi/100); float y = (oat) Math sin(i"2"PV/100); gl alVertexat(x, y; g.glColor3f(1.OF, 0.8, 0.29) U ersidad Tecnologica de los Andes FACULTAD DE INGENIERIA Escuela Profesional de Ingenieria de Sistemas e Informatica d gl.glEnd(; gl.glFlushQ; ‘Como se puede observar, se dibuja un poligono de muchisimos lados, lo que da la impresion que se esta dibujando una circunferencia Practica de Laboratorio package paq_circulo; import. import import, import import /fpara import import, public Javax.media opengl. GL; Javax.media. opengl. GLAutoDrawable; Javax.media.opengl.GLCanvas ; javax.media.opengl.GLCapabilities; Javax.media.opengl.GLEventListener; usar GLU de OpenGL, colocar librerias javax.media.opengl.glu.GLU; Javax. swing. *; class CCirculo extends JFrame{ public CCireulo(){ } //Bstable el ancho y alto de la ventana setsize (500,500); /f8stablecemos 1a posicion de la ventana setLocation(350, 120); J{Colocamos el titulo a nuestra ventana setTitle("Dibujando Da /{Cxeamos una instancia de la clase Graphiclistener Graphichistener listener = new Graphichistener(); Jfagregamos nuestra area de dibujo a la ventana del frame Glcanvas canvas = new GLCanvas (new GLCapabilities()) 7 canvas .addGLEventListener (listener) ; getContentPane() .add (canvas) ; //Programa Principal public static void main (String args(1){ ) {{Cxear el objeto circulo instanciando Ccireulo circule = new CCirculo(); circulo.setVisible (true) ; circulo, setDefaultCloseOperation (EXIT_ON_CLOSE) //Permiten usar las funciones de opengl GL gl: cw glu; public class Graphichistener implements GLEventListener{ width, //declaramos nuestra variable PI public static final double Pi = 3.14159265358979323846; Y[stentehashanbaedAASOAASSAEAASEAAARHARAAAADARERRAREESERAERAE /MMetedo que prepara 1a ventana donde se visualizara el objeto public void reshape (GLAutoDrawable drawable, int x, int y, int Ant height) ( U ersidad Tecnologica de los Andes FACULTAD DE INGENIERIA Escuela Profesional de Ingenieria de Sistemas e Informatica esfera ) boolear GL gl = drawable. geteL); GLU glu = new GLU(); if (height <= 0) ( //Evita un error de divisién por cero height = 1; ) final float h = (float) width / (float) height; Gl.glViewport (0, 0, width, height); gl. giMatrixMode (GL-GL_PROJECTION) ; gl.glLoadidentity() ; glu.gluPerspective(i5.0£, hy 1.0, 20.0); G1.glMatrixMode (GL.GL_MODELVIEW) ; gl.glloadidentity() ; [JOO eee eae eed ease naan ean aa deeded eau eneenaaaebened public void display (GLAutoDrawable drawable) { GL gl = drawable. getcL(); J Limpiar el rea de dibujo gl.glClear (GL.GL_COLOR BUFFER BIT | GL.GL_DEPTH_BUFFER_BIT); // Restablecer 1a matriz actual a la "identidad™ gl.glLoadtdentity () ; MI //Dibuja circunferencia gl.glTranslatef(0.0f, 0.0f, -4.0£); //Permite enfocar la /[pibuja circunferencia grande Gl.glPointSize(6) ;//dimencion del punto gl.glColor3£(1.0£, 0.4£, 0.8£); G1.glBegin(gl.GL_POINTS) ; //Dibuja la cantidad de puntos for(float angul = 0.0f; angul<2*Pi; angul +=0.1){ float x = (float) ((float) 1.54Math.sin(angul)) ; Float y = (float) (float) 1.5¥Math.cos (angul)) ; gi.glVertex2# (x,y) ;//Bspecifica el punto en el vertice ) gi.glBaa(); ue /Metode para cambio de pantalla public void displayChanged(GLAutoDrawable arg0, boolean argl, mn arg?) , public void init (GLAutoDrawable arg0) ( J {Manejo de primitives de JOGL Gb gl = arg0.getGh(); gl.glEnable(GL.GL_BLEND) ; gl-glBlendFunc(GL-GL_SRC_ALPHA,GL.GL_ONE_MINUS_SRC_ALPHA) ; > Universidad Tecnologica de los Andes FACULTAD DE INGENIERIA Escuela Profesional de Ingenierta de Sistemas e Informatica 4) Ejer fo Propuesto: ‘© Ejecutar el ejercicio de la Guia04 '* Cambie de color y tamafio los puntos de la circunferencia ‘* Modifique el cédigo para mostrar una gréfica con circunferencias concéntricas

También podría gustarte