[Tutorial] III.3 Dibujado de lineas: GL_LINES
Página 1 de 1.
[Tutorial] III.3 Dibujado de lineas: GL_LINES
III.3 Dibujado de lineas: GL_LINES
Novedades:
Este programa es el primero en el que vamos a mostrar cómo hacer líneas, funciona como los puntos, pero dando vértices de dos en dos, uniéndolos, salen líneas. En este programa, se genera una serie de líneas que comparten un punto común en el centro, y de ahí salen en todas direcciones. Además puedes aumentar o disminuir su tamaño con las flechas arriba y abajo. Si lo aumentas te sale una figura, que si miras mucho rato parece que se mueve, lo que se llama un efecto visual de los de toda la vida.
Aparte de lo de las flechas arriba y abajo, y que aumenta la variable zoom, en lo que no voy a entrar porque no es el tema. Lo que hay que explicar está en PintarEscena():
Novedades:
- Uso de GL_LINES en glBegin()
Este programa es el primero en el que vamos a mostrar cómo hacer líneas, funciona como los puntos, pero dando vértices de dos en dos, uniéndolos, salen líneas. En este programa, se genera una serie de líneas que comparten un punto común en el centro, y de ahí salen en todas direcciones. Además puedes aumentar o disminuir su tamaño con las flechas arriba y abajo. Si lo aumentas te sale una figura, que si miras mucho rato parece que se mueve, lo que se llama un efecto visual de los de toda la vida.
- Código:
#include <GL/glut.h>
#include <math.h>
#define PI 3.14159f
float ang, x, y;
int up, down;
float zoom = 2.5f;
void IniciarGLUT() {
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(600,600);
glutInitWindowPosition(100,100);
glutCreateWindow("Practica III,3 de OpenGL");
}
void PintarEscena() {
glMatrixMode(GL_MODELVIEW);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glBegin(GL_LINES);
for (ang=0.0f; ang<PI*2.0f; ang = ang + 0.1f ) {
x = zoom*cosf(ang);
y = zoom*sinf(ang);
glVertex3f(0.0f,0.0f,0.0f);
glVertex3f(x,y,0.0f);
}
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) up = 1;
if (key==GLUT_KEY_DOWN) down = 1;
}
void FlechasUp(int key, int x, int y) {
if (key==GLUT_KEY_UP) up = 0;
if (key==GLUT_KEY_DOWN) down = 0;
}
void Zoomizar(int value) {
if (up) zoom = zoom * 1.01f;
if (down) zoom = zoom / 1.01f;
glutTimerFunc(33,Zoomizar,1);
}
int main(int argc, char **argv) {
glutInit(&argc,argv); //Solo necesario en Linux
IniciarGLUT();
glutReshapeFunc(ReProyectar);
glutDisplayFunc(PintarEscena);
glutSpecialFunc(Flechas);
glutSpecialUpFunc(FlechasUp);
glutTimerFunc(33,Zoomizar,1);
glutIdleFunc(PintarEscena);
glutMainLoop();
return 0;
}
Aparte de lo de las flechas arriba y abajo, y que aumenta la variable zoom, en lo que no voy a entrar porque no es el tema. Lo que hay que explicar está en PintarEscena():
- Código:
glBegin(GL_LINES);
for (ang=0.0f; ang<PI*2.0f; ang = ang + 0.1f ) {
x = zoom*cosf(ang);
y = zoom*sinf(ang);
glVertex3f(0.0f,0.0f,0.0f);
glVertex3f(x,y,0.0f);
}
glEnd()
Temas similares
» [Tutorial] III.5 - Punteado de lineas: glLineStipple()
» [Tutorial] III.4 - Lineas STRIP y LOOP, y cambiar el grosor
» [Tutorial] II.4 - glutKeyboardFunc()
» [Tutorial] II.6 - glutMouseFunc()
» [Tutorial] II.3 - glutTimerFunc()
» [Tutorial] III.4 - Lineas STRIP y LOOP, y cambiar el grosor
» [Tutorial] II.4 - glutKeyboardFunc()
» [Tutorial] II.6 - glutMouseFunc()
» [Tutorial] II.3 - glutTimerFunc()
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|