-
Cambiar escala jogl
Hola a todos/as, estoy haciendo un programa para visualizar funciones matemáticas en 2d y 3d. El problema es que la escala de las coordenadas es demasiado grande y me gustaría poder variar la escala para poder representar mejor las gráficas. 1 ayuda por favor. Gracias.
-
Para cambiar la escala en JOGL (Java OpenGL) necesitas ajustar la matriz de proyección. El problema común es que las coordenadas del mundo (world coordinates) se mapean directamente a la pantalla, haciendo que la gráfica se vea muy grande o pequeña.
La solución principal es configurar una matriz de proyección ortográfica con los rangos deseados. En tu función de dibujo o en la inicialización del canvas, debes definir estos rangos usando glOrtho. Primero, asegúrate de que la matriz actual sea la de proyección. Luego, carga la matriz identidad y aplica glOrtho.
Por ejemplo, para una vista 2D donde quieras ver el área desde x=-10 a x=10 y y=-10 a y=10, y con un plano de recorte cercano y lejano típico, harías esto en tu método reshape o display: gl.glMatrixMode(GL2.GL_PROJECTION); gl.glLoadIdentity(); gl.glOrtho(-10.0, 10.0, -10.0, 10.0, -1.0, 1.0); gl.glMatrixMode(GL2.GL_MODELVIEW); gl.glLoadIdentity();.
Para gráficos 3D, en lugar de glOrtho, podrías usar gluPerspective para proyección perspectiva y luego controlar la escala ajustando la posición de la cámara (con gluLookAt) o escalando la matriz de modelo-vista. Para escalar la geometría directamente, puedes usar glScalef(factor, factor, factor) en la matriz de modelo-vista, donde un factor menor que 1 reducirá el tamaño. Sin embargo, modificar la proyección es generalmente más limpio.
Una práctica moderna y recomendada es usar shaders y manejar matrices manualmente con bibliotecas como JOML (Java OpenGL Math Library). Esto te da control total. Puedes crear matrices de proyección ortográfica o perspectiva y pasarlas a un shader como un uniform. Con JOML, crearías una matriz de proyección con ortho2D o perspective y luego la enviarías a tu programa de shaders.
Recuerda que en OpenGL moderno (perfiles core) las funciones de matriz fija como glOrtho están obsoletas. Si estás usando un perfil core, debes usar shaders y manejar tus matrices. La mejor solución actual es utilizar JOGL con perfiles modernos y JOML para las operaciones matemáticas.