[Tutorial] III.2 Tamaño de los puntos: glPointSize()
Página 1 de 1.
[Tutorial] III.2 Tamaño de los puntos: glPointSize()
III.2 El tamaño de los puntos
Novedades:
He desarrollado el programa anterior, añadiendo una cosa más. Ahora, pulsando F1 y F2 puedes aumentar y dismunuir el tamaño de los puntos, porque éstos pueden ser escalados hasta cierto punto. Por primero vez vamos a usar también la consola, para recibir un dato del que ahora hablaremos. El nuevo código:
A parte de que he añadido el aumento de una variable (t) o su disminución, a las teclas F1 y F2. Solo hay dos novedades, la primera en IniciarGLUT():
Para saber éstos datos, la siguiente línea, imprime en la consola (si está abierta), el mínimo y el máximo.
La siguiente novedad es solo una línea, intercalada en PintarEscena(), justo antes de mandar dibujar los puntos, asignamos su tamaño: glPointSize(t); con t. En mi caso, el máximio que me permite es 63.
Aumentando el tamaño, forma una H, prueba a redimensionar, alejar, acercar, cambiar tamaño de punto, etc... y comprobarás que siempre tendrán el mismo tamaño los puntos, un numero de pixeles, que se junten o alejen denpende de cuán cerca lo veas.
Novedades:
- glPointSize()
- glGetXXXv()
He desarrollado el programa anterior, añadiendo una cosa más. Ahora, pulsando F1 y F2 puedes aumentar y dismunuir el tamaño de los puntos, porque éstos pueden ser escalados hasta cierto punto. Por primero vez vamos a usar también la consola, para recibir un dato del que ahora hablaremos. El nuevo código:
- Código:
#include <GL/glut.h>
#include <stdio.h>
float tamanno = 1.0f;
int up, down;
int alto, ancho, f1, f2;
GLfloat t = 1.0f;
GLfloat min_y_max[2];
void IniciarGLUT() {
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(600,600);
glutInitWindowPosition(100,100);
glutCreateWindow("Practica III,2 de OpenGL");
//Obetener minimo y maximo de tamaño para los pixeles
glGetFloatv(GL_POINT_SIZE_RANGE,min_y_max);
printf("Minimo: %f , maximo: %f",min_y_max[0],min_y_max[1]); //Conoce los limites de tu SO por pixel
}
void PintarEscena() {
glMatrixMode(GL_MODELVIEW);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glColor3f(1.0f,1.0f,1.0f);
glRectf(-5.0f,-5.0f,5.0f, 7.0f);
glPointSize(t);
glBegin(GL_POINTS);
glColor3f(0.5f,0.0f,0.0f);
glVertex3f(-2.0f,5.0f,0.0f);
glVertex3f(-2.0f,3.0f,0.0f);
glVertex3f(-2.0f,1.0f,0.0f);
glVertex3f(-2.0f,-1.0f,0.0f);
glVertex3f(-2.0f,-3.0f,0.0f);
glVertex3f(0.0f,1.0f,0.0f);
glVertex3f(2.0f,5.0f,0.0f);
glVertex3f(2.0f,3.0f,0.0f);
glVertex3f(2.0f,1.0f,0.0f);
glVertex3f(2.0f,-1.0f,0.0f);
glVertex3f(2.0f,-3.0f,0.0f);
glEnd();
glutSwapBuffers();
}
void ReProyectar(int w, int h) {
ancho = w;
alto = h;
GLfloat formato;
if(h == 0) h = 1;
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
formato = (GLfloat)w / (GLfloat)h;
if (w <= h) glOrtho (-10.0f*tamanno, 10.0f*tamanno, -10.0f*tamanno / formato, 10.0f*tamanno / formato, 1.0f, -1.0f);
else glOrtho (-10.0f*tamanno * formato, 10.0f*tamanno * formato, -10.0f*tamanno, 10.0f*tamanno, 1.0f, -1.0f);
}
void Zoom(int value) {
if (up) tamanno = tamanno * 1.01f;
if (down) tamanno = tamanno / 1.01f;
ReProyectar(ancho,alto);
glutTimerFunc(33,Zoom,1);
glutPostRedisplay();
}
void Flechas(int key, int x, int y) {
if (key==GLUT_KEY_UP) up = 1;
if (key==GLUT_KEY_DOWN) down = 1;
if (key==GLUT_KEY_F1) {
if ((t + 1) <= min_y_max[1]) t = t + 1.0f;
}
if (key==GLUT_KEY_F2) {
if ((t - 1) >= min_y_max[0]) t = t - 1.0f;
}
glutPostRedisplay();
}
void FlechasUp(int key, int x, int y) {
if (key==GLUT_KEY_UP) up = 0;
if (key==GLUT_KEY_DOWN) down = 0;
}
int main(int argc, char **argv)
{
glutInit(&argc,argv); //Solo necesario en Linux
IniciarGLUT();
glutReshapeFunc(ReProyectar);
glutDisplayFunc(PintarEscena);
glutTimerFunc(33,Zoom,1);
glutSpecialFunc(Flechas);
glutSpecialUpFunc(FlechasUp);
glutMainLoop();
return 0;
}
A parte de que he añadido el aumento de una variable (t) o su disminución, a las teclas F1 y F2. Solo hay dos novedades, la primera en IniciarGLUT():
- Código:
//Obetener minimo y maximo de tamaño para los pixeles
glGetFloatv(GL_POINT_SIZE_RANGE,min_y_max);
printf("Minimo: %f , maximo: %f",min_y_max[0],min_y_max[1]); //Conoce los limites de tu SO por pixel
Para saber éstos datos, la siguiente línea, imprime en la consola (si está abierta), el mínimo y el máximo.
La siguiente novedad es solo una línea, intercalada en PintarEscena(), justo antes de mandar dibujar los puntos, asignamos su tamaño: glPointSize(t); con t. En mi caso, el máximio que me permite es 63.
Aumentando el tamaño, forma una H, prueba a redimensionar, alejar, acercar, cambiar tamaño de punto, etc... y comprobarás que siempre tendrán el mismo tamaño los puntos, un numero de pixeles, que se junten o alejen denpende de cuán cerca lo veas.
Temas similares
» [Tutorial] III.1 Dibujar figuras, los puntos
» [Tutorial] II.4 - glutKeyboardFunc()
» [Tutorial] II.6 - glutMouseFunc()
» [Tutorial] II.3 - glutTimerFunc()
» [Tutorial C++] I - "HelloWorld++"
» [Tutorial] II.4 - glutKeyboardFunc()
» [Tutorial] II.6 - glutMouseFunc()
» [Tutorial] II.3 - glutTimerFunc()
» [Tutorial C++] I - "HelloWorld++"
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|