From c691f96e9848d05947afc40ea5c14bc2989f00cf Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Mon, 20 Apr 2009 15:50:44 +0100 Subject: [PATCH] trivial/tri-viewport.c - add guide lines, more triangles, make interactive This is becoming more like a test than a trivial/ example. --- progs/trivial/tri-viewport.c | 132 +++++++++++++++++++++++++++++++---- 1 file changed, 118 insertions(+), 14 deletions(-) diff --git a/progs/trivial/tri-viewport.c b/progs/trivial/tri-viewport.c index 8e5f155c7dd..4cd64e07818 100644 --- a/progs/trivial/tri-viewport.c +++ b/progs/trivial/tri-viewport.c @@ -29,6 +29,10 @@ GLenum doubleBuffer = 1; int win; +static float tx = 0; +static float ty = 0; +static float tw = 250; +static float th = 250; static void Init(void) { @@ -42,15 +46,11 @@ static void Init(void) static void Reshape(int width, int height) { - glViewport(width / -2.0, height / -2.0, width, height); - - glMatrixMode(GL_PROJECTION); - glLoadIdentity(); - glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); - glMatrixMode(GL_MODELVIEW); - glLoadIdentity(); + tw = width; + th = height; } + static void Key(unsigned char key, int x, int y) { switch (key) { @@ -62,19 +62,91 @@ static void Key(unsigned char key, int x, int y) } } + static void Draw(void) { + int i; + + fprintf(stderr, "%f %f\n", tx, ty); + fflush(stderr); + + glMatrixMode(GL_PROJECTION); + glLoadIdentity(); + glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); + glMatrixMode(GL_MODELVIEW); + glClear(GL_COLOR_BUFFER_BIT); + glViewport(0, 0, tw, th); + + glBegin(GL_LINES); + glColor3f(1,1,0); + glVertex3f(-1, 0, -30.0); + glVertex3f(1, 0, -30.0); + + glVertex3f(0, -1, -30.0); + glVertex3f(0, 1, -30.0); + glEnd(); + + + /* + */ + glViewport(tx, ty, tw, th); + + glBegin(GL_TRIANGLES); - glColor3f(.8,0,0); - glVertex3f(-0.9, 0.9, -30.0); - glColor3f(0,.9,0); - glVertex3f( 0.9, 0.9, -30.0); - glColor3f(0,0,.7); - glVertex3f( 0.0, -0.9, -30.0); + glColor3f(1,0,0); + glVertex3f(-1, -1, -30.0); + glVertex3f(0, -1, -30.0); + glVertex3f(-.5, -.5, -30.0); + + glColor3f(1,1,1); + glVertex3f(0, -1, -30.0); + glVertex3f(1, -1, -30.0); + glVertex3f(.5, -.5, -30.0); + + glVertex3f(-.5, -.5, -30.0); + glVertex3f(.5, -.5, -30.0); + glVertex3f(0, 0, -30.0); + + + glColor3f(0,1,0); + glVertex3f(1, 1, -30.0); + glVertex3f(0, 1, -30.0); + glVertex3f(.5, .5, -30.0); + + glColor3f(1,1,1); + glVertex3f(0, 1, -30.0); + glVertex3f(-1, 1, -30.0); + glVertex3f(-.5, .5, -30.0); + + glVertex3f(.5, .5, -30.0); + glVertex3f(-.5, .5, -30.0); + glVertex3f( 0, 0, -30.0); + + glEnd(); + + + glViewport(0, 0, tw, th); + + glBegin(GL_LINES); + glColor3f(.5,.5,0); + for (i = -10; i < 10; i++) { + float f = i / 10.0; + + if (i == 0) + continue; + + glVertex3f(-1, f, -30.0); + glVertex3f(1, f, -30.0); + + glVertex3f(f, -1, -30.0); + glVertex3f(f, 1, -30.0); + } glEnd(); + + glFlush(); if (doubleBuffer) { @@ -86,6 +158,13 @@ static GLenum Args(int argc, char **argv) { GLint i; + if (getenv("VPX")) + tx = atof(getenv("VPX")); + + if (getenv("VPY")) + ty = atof(getenv("VPY")); + + for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-sb") == 0) { doubleBuffer = GL_FALSE; @@ -99,6 +178,30 @@ static GLenum Args(int argc, char **argv) return GL_TRUE; } + +static void +special(int k, int x, int y) +{ + switch (k) { + case GLUT_KEY_UP: + ty += 1.0; + break; + case GLUT_KEY_DOWN: + ty -= 1.0; + break; + case GLUT_KEY_LEFT: + tx -= 1.0; + break; + case GLUT_KEY_RIGHT: + tx += 1.0; + break; + default: + return; + } + glutPostRedisplay(); +} + + int main(int argc, char **argv) { GLenum type; @@ -123,7 +226,8 @@ int main(int argc, char **argv) Init(); glutReshapeFunc(Reshape); - glutKeyboardFunc(Key); + glutKeyboardFunc(Key); + glutSpecialFunc(special); glutDisplayFunc(Draw); glutMainLoop(); return 0; -- 2.30.2