[Tutorial] III.4 - Lineas STRIP y LOOP, y cambiar el grosor
Página 1 de 1.
[Tutorial] III.4 - Lineas STRIP y LOOP, y cambiar el grosor
III.4 Líneas continuadas: STRIP y LOOP, y cambiar el grosor
Novedades:
Imagina que quieres hacer una línea contínua, definida por mucho puntos. Según el primer método explicado (GL_LINES), lo harías por segmentos, para hacer un cuadrado, necesitas 4 segmentos, cada uno con dos vértices. Pues tenemos dos soluciones alternativas, que mejoran el rendimiento:
- STRIP: se continua la línea punto a punto, si pones 5 puntos, puedes cerrar un cuadrado, de esquina a esquina, volviendo la última vez al origen, repitiendo el último punto.
- LOOP: funciona igual que el anterior, pero une el último vértice con el primero, aquí solo necesitaríamos 4 vértices para un cuadrado. Pero te ves forzado a cerrar el polígono, para hacer curvas es mejor el STRIP.
También cambiaremos el grosor de la línea, como hicimos con el punto.
Flecha arriba, flecha abajo, y cambiarás el grosor de las líneas. En cuanto a los nuevos tipos de líneas, ya los he explicado arriba. STRIP es cadena, es como acer una línea articulada. LOOP es como STRIP, pero cerrando la línea.
Usamos glGetFloatv(GL_LINE_WIDTH_RANGE,min_y_max); para obtener, como hicimos con el punto, el máximo grosor posible. Después asignamos el grosor con: glLineWidth(ancho);
Este tutorial es muy corto de explicar, porque es mas bien un ejemplo de algo bastante sencillo.
Novedades:
- Uso de GL_LINE_STRIP en glBegin()
- Uso de GL_LINE_LOOP en glBegin()
- glLineWidth()
Imagina que quieres hacer una línea contínua, definida por mucho puntos. Según el primer método explicado (GL_LINES), lo harías por segmentos, para hacer un cuadrado, necesitas 4 segmentos, cada uno con dos vértices. Pues tenemos dos soluciones alternativas, que mejoran el rendimiento:
- STRIP: se continua la línea punto a punto, si pones 5 puntos, puedes cerrar un cuadrado, de esquina a esquina, volviendo la última vez al origen, repitiendo el último punto.
- LOOP: funciona igual que el anterior, pero une el último vértice con el primero, aquí solo necesitaríamos 4 vértices para un cuadrado. Pero te ves forzado a cerrar el polígono, para hacer curvas es mejor el STRIP.
También cambiaremos el grosor de la línea, como hicimos con el punto.
- Código:
#include <GL/glut.h>
GLfloat min_y_max[2];
GLfloat ancho = 1.0f;
int flechas[2];
void IniciarGLUT() {
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(600,600);
glutInitWindowPosition(100,100);
glutCreateWindow("Practica III,4 de OpenGL");
//Obtener mínimo y máximo de ancho para líneas
glGetFloatv(GL_LINE_WIDTH_RANGE,min_y_max);
printf("Minimo: %.1f , maximo: %.1f",min_y_max[0],min_y_max[1]);
}
void PintarEscena() {
glMatrixMode(GL_MODELVIEW);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glColor3f(0,0,0);
glRectf(-10,-10,10,10);
glLineWidth(ancho);
glColor3f(1,1,1);
glBegin(GL_LINE_STRIP);
glVertex3i(-4,7,0);
glVertex3i(-4,-7,0);
glVertex3i(4,-7,0);
glVertex3i(4,4,0);
glVertex3i(1,7,0);
glVertex3i(-4,7,0);
glEnd();
glBegin(GL_LINE_LOOP);
glVertex3i(-3,4,0);
glVertex3i(3,4,0);
glVertex3i(3,-6,0);
glVertex3i(-3,-6,0);
glEnd();
glutSwapBuffers();
}
void ReProyectar(int w, int 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, 10.0f, -10.0f / formato, 10.0f / formato, -1.0f, 1.0f);
else glOrtho (-10.0f * formato, 10.0f * formato, -10.0f, 10.0f, -1.0f, 1.0f);
}
void Flechas(int key, int x, int y) {
if (key==GLUT_KEY_UP) flechas[0]=1;
if (key==GLUT_KEY_DOWN) flechas[1]=1;
}
void FlechasUp(int key, int x, int y) {
if (key==GLUT_KEY_UP) flechas[0]=0;
if (key==GLUT_KEY_DOWN) flechas[1]=0;
}
void CambiarAncho(int value) {
if (flechas[0]) if ((ancho + 1)<=min_y_max[1]) ancho = ancho + 1;
if (flechas[1]) if ((ancho - 1)>=min_y_max[0]) ancho = ancho - 1;
glutTimerFunc(33,CambiarAncho,1);
glutPostRedisplay();
}
int main(int argc, char **argv)
{
glutInit(&argc,argv); //Solo necesario en Linux
IniciarGLUT();
glutReshapeFunc(ReProyectar);
glutDisplayFunc(PintarEscena);
glutIdleFunc(PintarEscena);
glutSpecialFunc(Flechas);
glutSpecialUpFunc(FlechasUp);
glutTimerFunc(33,CambiarAncho,1);
glutMainLoop();
return 0;
}
Flecha arriba, flecha abajo, y cambiarás el grosor de las líneas. En cuanto a los nuevos tipos de líneas, ya los he explicado arriba. STRIP es cadena, es como acer una línea articulada. LOOP es como STRIP, pero cerrando la línea.
Usamos glGetFloatv(GL_LINE_WIDTH_RANGE,min_y_max); para obtener, como hicimos con el punto, el máximo grosor posible. Después asignamos el grosor con: glLineWidth(ancho);
Este tutorial es muy corto de explicar, porque es mas bien un ejemplo de algo bastante sencillo.
Temas similares
» [Tutorial] III.7 - Las dos caras del polígono, triángulos STRIP y FAN
» [Tutorial] III.3 Dibujado de lineas: GL_LINES
» [Tutorial] III.5 - Punteado de lineas: glLineStipple()
» [Tutorial] II.4 - glutKeyboardFunc()
» [Tutorial] II.6 - glutMouseFunc()
» [Tutorial] III.3 Dibujado de lineas: GL_LINES
» [Tutorial] III.5 - Punteado de lineas: glLineStipple()
» [Tutorial] II.4 - glutKeyboardFunc()
» [Tutorial] II.6 - glutMouseFunc()
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.