summaryrefslogtreecommitdiffstats
path: root/matchblox/src/renderer_opengl.c
diff options
context:
space:
mode:
Diffstat (limited to 'matchblox/src/renderer_opengl.c')
-rw-r--r--matchblox/src/renderer_opengl.c307
1 files changed, 0 insertions, 307 deletions
diff --git a/matchblox/src/renderer_opengl.c b/matchblox/src/renderer_opengl.c
deleted file mode 100644
index bc6d773..0000000
--- a/matchblox/src/renderer_opengl.c
+++ /dev/null
@@ -1,307 +0,0 @@
-/***************************************************************************
- * renderer_opengl.c
- *
- * Thu Mar 20 15:42:48 2008
- * Copyright 2008 Oliver
- * <o.m.schinagl@student.tue.nl>
- ****************************************************************************/
-
-/*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Library General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor Boston, MA 02110-1301, USA
- */
-
-
-
-/* redblue_stereo.c - demo of stereo for red/blue filter stereo glasses */
-
-/* by Walter Vannini (walterv@jps.net, waltervannini@hotmail.com) */
-
-/* In stereo mode, the object is drawn in red for the left eye
- and blue for the right eye. Viewing the scene with red/blue
- filter stereo glasses should give a sense of stereo 3D.
- glColorMask is used to control update of the red and blue
- channel. glFrustum is used to setup two different view frustums
- for each eye based on eye separation. */
-
-/* Copyright (c) Walter Vannini, 1998. */
-
-/* This program is freely distributable without licensing fees and is
- provided without guarantee or warrantee expressed or implied. This
- program is -not- in the public domain. */
-
-#include <stdlib.h>
-#include <math.h>
-#include <GL/glut.h>
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-void init(void);
-void KeyboardFunc(unsigned char key, int x, int y);
-void MenuFunc(int value);
-void IdleFunc(void);
-void ReshapeFunc(int w, int h);
-void DisplayFunc(void);
-
-
-struct ProgramState
-{
- int w;
- int h;
- GLdouble RotationY;
- double eye;
- double zscreen;
- double znear;
- double zfar;
- double RotationIncrement;
- int solidmode;
-};
-struct ProgramState ps;
-
-const double PIXELS_PER_INCH = 100.0;
-
-void init(void)
-{
- GLfloat mat_ambient[] = {0.2,0.0,0.2,1.0} ;
- GLfloat mat_diffuse[] = {0.7,0.0,0.7,1.0} ;
- GLfloat mat_specular[] = {0.1,0.0,0.1,1.0} ;
- GLfloat mat_shininess[]={20.0};
-
- GLfloat light_position[]={0.0,5.0,20.0,1.0};
-
- GLfloat light_ambient0[]= {1.0,0.0,0.0,1.0};
- GLfloat light_diffuse0[]= {1.0,0.0,0.0,1.0};
- GLfloat light_specular0[]={1.0,0.0,0.0,1.0};
-
- GLfloat light_ambient1[]= {0.0,0.0,1.0,1.0};
- GLfloat light_diffuse1[]= {0.0,0.0,1.0,1.0};
- GLfloat light_specular1[]={0.0,0.0,1.0,1.0};
-
- glDisable(GL_DITHER);
- glClearColor(0.0, 0.0, 0.0, 1.0);
- glShadeModel(GL_SMOOTH);
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_NORMALIZE);
- glEnable(GL_CULL_FACE);
- glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 1);
-
-
- glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
- glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
- glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
- glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
-
- glLightfv(GL_LIGHT0, GL_POSITION, light_position);
- glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient0);
- glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse0);
- glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular0);
-
- glLightfv(GL_LIGHT1, GL_POSITION, light_position);
- glLightfv(GL_LIGHT1, GL_AMBIENT, light_ambient1);
- glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse1);
- glLightfv(GL_LIGHT1, GL_SPECULAR, light_specular1);
- glEnable(GL_LIGHTING);
-
- ps.eye=0.80;
- ps.zscreen = 10.0;
- ps.znear = 7.0;
- ps.zfar = 13.0;
- ps.RotationY = 0.0;
- ps.RotationIncrement = 0.1;
- ps.solidmode = 1;
-}
-
-void KeyboardFunc(unsigned char key, int x, int y)
-{
- switch(key)
- {
- case 27: /* escape */
- case 'q':
- case 'Q':
- exit(0);
- break;
- case 's': /* stereo */
- ps.eye = 1.20;
- break;
- case '1':
- ps.solidmode = 1;
- glFrontFace(GL_CCW);
- break;
- case '2':
- ps.solidmode = 2;
- glFrontFace(GL_CCW);
- break;
- case '3':
- ps.solidmode = 3;
- /* The teapot polygons face the wrong way. Sigh. */
- glFrontFace(GL_CW);
- break;
- case '4':
- ps.solidmode = 4;
- glFrontFace(GL_CCW);
- break;
- case 'm': /* mono */
- ps.eye = 0.0;
- break;
- }
-}
-
-void MenuFunc(int value)
-{
- KeyboardFunc(value, 0, 0);
-}
-
-void IdleFunc(void)
-{
- ps.RotationY += ps.RotationIncrement;
- glutPostRedisplay();
-}
-
-void ReshapeFunc(int w, int h)
-{
- glViewport(0,0, w, h);
- ps.w = w;
- ps.h = h;
-}
-
-void DisplayFunc(void)
-{
- double xfactor=1.0, yfactor=1.0;
- double Eye =0.0;
- int i;
-
- if(ps.w < ps.h)
- {
- xfactor = 1.0;
- yfactor = ps.h/ps.w;
- }
- else if(ps.h < ps.w)
- {
- xfactor = ps.w/ps.h;
- yfactor = 1.0;
- }
-
- glClear(GL_COLOR_BUFFER_BIT);
- for(i=0;i<2;i++)
- {
- glEnable(GL_LIGHT0 + i);
- glClear(GL_DEPTH_BUFFER_BIT);
- if(i==0) /* left eye - RED */
- {
- Eye = ps.eye;
- glColorMask(GL_TRUE,GL_FALSE,GL_FALSE,GL_TRUE);
- }
- else /* if(i==1) right eye - BLUE */
- {
- Eye = -ps.eye;
- glColorMask(GL_FALSE,GL_FALSE,GL_TRUE,GL_TRUE);
- }
-
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum(
- (-(ps.w/(2.0*PIXELS_PER_INCH))+Eye) *(ps.znear/ps.zscreen)*xfactor,
- (ps.w/(2.0*PIXELS_PER_INCH)+Eye) *(ps.znear/ps.zscreen)*xfactor,
- -(ps.h/(2.0*PIXELS_PER_INCH))*(ps.znear/ps.zscreen)*yfactor,
- (ps.h/(2.0*PIXELS_PER_INCH))*(ps.znear/ps.zscreen)*yfactor,
- ps.znear, ps.zfar);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- glTranslatef(Eye,0.0,0.0);
- glTranslated(0,0,-ps.zscreen);
-
- switch(ps.solidmode)
- {
- case 1:
- {
- glTranslated(cos(ps.RotationY*M_PI/180.0),
- 0, -sin(ps.RotationY*M_PI/180.0) );
- glRotated(ps.RotationY, 0.0,0.1,0.0);
- glPushMatrix();
- glScalef(0.5,0.5,0.5);
- glutSolidDodecahedron();
- glPopMatrix();
- break;
- }
- case 2:
- {
- glTranslated(cos(ps.RotationY*M_PI/180.0),
- 0, -sin(ps.RotationY*M_PI/180.0) );
- glRotated(ps.RotationY, 0.0,0.1,0.0);
- glutSolidIcosahedron();
- break;
- }
- case 3:
- {
- glRotated(60.0, 1 , 0, 0);
- glTranslated(cos(ps.RotationY*M_PI/180.0),
- 0, -sin(ps.RotationY*M_PI/180.0) );
- glRotated(ps.RotationY, 0.0,0.1,0.0);
- glutSolidTeapot(1.0);
- break;
- }
- case 4:
- {
- glRotated(60.0, 1, 0, 0);
- glTranslated(cos(ps.RotationY *M_PI/180),
- 0, -sin(ps.RotationY *M_PI/180) );
- glRotated(ps.RotationY, 0.0, 0.1, 0.0);
- glutSolidTorus(0.2, 0.5, 5.0, 5.0);
- break;
- }
- }
- glDisable(GL_LIGHT0 + i);
- }
- glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
- glutSwapBuffers();
-}
-void
-VisibilityFunc(int vis)
-{
- if (vis == GLUT_VISIBLE) {
- glutIdleFunc(IdleFunc);
- } else {
- glutIdleFunc(NULL);
- }
-}
-
-int renderer_main(void)
-{
- glutInit(&argc, argv);
- glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA );
- ps.w = 512;
- ps.h = 512;
- glutInitWindowSize(ps.w, ps.h);
- glutInitWindowPosition(100,100);
-
- glutCreateWindow(argv[0]);
- init();
- glutVisibilityFunc(VisibilityFunc);
- glutDisplayFunc(DisplayFunc);
- glutReshapeFunc(ReshapeFunc);
- glutKeyboardFunc(KeyboardFunc);
- glutCreateMenu(MenuFunc);
- glutAddMenuEntry("Stereo", 's');
- glutAddMenuEntry("Mono", 'm');
- glutAddMenuEntry("Dodecahedron", '1');
- glutAddMenuEntry("Icosahedron", '2');
- glutAddMenuEntry("Teapot", '3');
- glutAddMenuEntry("Solar system", '4');
- glutAttachMenu(GLUT_RIGHT_BUTTON);
- glutMainLoop();
-
- return 0;
-}