Anteriormente vimos cómo dibujar un hexágono, octágono y un círculo con JOGL pero nunca redimensionamos el frame que los contenía. ¿La razón? pues porque no habíamos modificado el método reshape() utilizado por la interfaz GLEventListener, entonces, al redimensionar un frame puede ocurrir que nuestra figura se distorsione tal y como se ve en ésta imagen:
Circunferencia deformada al redimensionar el JFrame.
Para evitar lo anterior, debemos modificar el código contenido dentro del método reshape() de la siguiente manera:
public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height)
{
// Cargamos la proyección de nuestra imagen
gl.glMatrixMode (GL.GL_PROJECTION);
gl.glLoadIdentity ();
// Cuando el alto es más grande que el ancho
if (w <= h)
{
// Modificamos el fondo (bottom) y la parte de arriba (top) de
// tal manera que no se deforme nuestra figura
gl.glOrtho(-xRange, xRange,
-yRange * ((float)h/(float)w), yRange * ((float)h/(float)w), -zRange, zRange);
}
// Cuando el ancho es más grande que el alto
else
{
// Modificamos el lado izquierdo (left) y el lado derecho (right) de
// tal manera que no se deforme nuestra figura
gl.glOrtho(-xRange * ((float)w/(float)h), xRange * ((float)w/(float)h),
-yRange, yRange, -zRange, zRange);
}
// Se carga el punto de vista del modelo
// con las nuevas dimensiones (width, height)
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glViewport(x, y, width, height);
// Redibujamos el objeto
canvas.repaint ();
}
Como se puede apreciar en el método anterior, hemos utilizado tres variables nuevas: xRange, yRange, zRange, dichas variables definirán nuestro espacio de trabajo y deben ser declaradas e inicializadas en el constructor de nuestro programa:
float xRange = 5.0f;
float yRange = 5.0f;
float zRange = 5.0f;
Con lo anterior, nuestro espacio de trabajo seguirá comprendiendo los rangos:
- x = [-5,5]
- y = [-5,5]
- z = [-5,5]
- GLAutodrawable drawable
- int x
- int y
- int width
- int height
Si desean descargar el código fuente pueden dar click en el siguiente enlace:
Descargar código fuente dibujarCircunferenciaNODeforme.java
8 opiniones:
Quiero felicitarte por tu blog, todo un descubrimiento. Espero que un dificil comienzo en cuanto a público no te frene y sigas adelante.
Un saludo desde España :)
Gracias por tu comentario. Últimamente he estado un poco ocupado con otros proyectos pero próximamente publicaré más ejemplos, tanto en 2D como en 3D.
ola men esta bueno me gustaria preguntarte una cosas pero no pasa casi por aca te agregue al msn pero no te veo si quieres agregame krodriguez777@hotmail.com para ver si me puedes ayudar en algunas cosas si puedes claro esta
Hola CaArLoz muy chido tu blog! te felicito. Estoy aprendiendo mucho.. Lo que mi profesor debio enseniarme lo estoy aprendiendo contigo. En fin solo queria felicitarte y que sigas asi. Eres todo un buenazo.
Una cosa mas CaArLoz!! Los links me aparecen rotos! Aun asi yo los intento hacer y algunos si me quedan pero otros no muy bien! Si pudieras ayudarme con eso. Gracias y Saludos! Q estes bien.
Saludos MomO y a todos los visitantes.
Éste blog hace tiempo que ya no lo actualizo, lo comencé cuando aún estudiaba y, ahora trabajo y no tengo tiempo para escribir.
Les paso el link con todos los programas que puse en el blog.
https://skydrive.live.com/?cid=4e1f69ddde32def5#!/?cid=4E1F69DDDE32DEF5&id=4E1F69DDDE32DEF5%21177
Gracias.
I blog quite often and I seriously thank you for your content.
This great article has really peaked my interest.
I will book mark your site and keep checking for new details about once a
week. I subscribed to your Feed too.
My page :: laser cellulite treatment
The oldest documented stylе of massagе. Don't forget the landlord or owner of the place. Shake the oil well. Symptoms of cerebral palsy vary from mild to severe. Stress is often an appropriate complementary treatment. Cerebral palsy CP is a term of respect on the islands of Hawaii, not a blood relationship term.
Also visit my blog post: tantra
Publicar un comentario