mreinfurt
4/22/2013 - 8:41 AM

gistfile1.txt

// GD-Praktikum:   teil_1.cpp  (Teil 1: Start-Programm)
// Hergenroether / Groch    Last Update: 29.07.2011

#include <iostream> 
#include <GL/freeglut.h>         //lädt alles für OpenGL
#include "Wuerfel.h"

float fRotation = 315.0;

void Init()  
{
	// Hier finden jene Aktionen statt, die zum Programmstart einmalig 
	// durchgeführt werden müssen	
	glClearColor( 0.0, 0.0, 0.0, 1.0 );
	glEnable(GL_DEPTH_TEST); 
	glClearDepth(1.0); 
}

void RenderScene() //Zeichenfunktion
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	// Hier befindet sich der Code der in jedem Frame ausgefuehrt werden muss
	glLoadIdentity ();   // Aktuelle Model-/View-Transformations-Matrix zuruecksetzen

	gluLookAt (1, 0.,1,
			   0., 0., 0., 
			   0., 1., 0.);

	glutWireCube(0.2);
	glRotatef(fRotation, 0.0, 0.0, 1.0);
	glTranslatef(0.2, 0.2, 0.0);

	//glRotatef(fRotation, 0.0,0., 1.);

	glPushMatrix();
		glTranslatef(0.6, 0., 0.);
		glScalef(1.0, 0.25, 0.5);
		Wuerfel(0.4);
	glPopMatrix();

	glPushMatrix();
		glTranslatef(0.2, 0., 0.);
		glScalef(1.0, 0.5, 0.5);
		Wuerfel(0.4);
	glPopMatrix();

	glutSwapBuffers();
	glFlush();
}

void Reshape(int width,int height)
{
	// Hier finden die Reaktionen auf eine Veränderung der Größe des 
	// Graphikfensters statt
	// Matrix für Transformation: Frustum->viewport 
	glMatrixMode(GL_PROJECTION); 
	// Aktuelle Transformations-Matrix zuruecksetzen 
	glLoadIdentity (); 
	// Viewport definieren 
	glViewport(0,0,width,height); 
	// Frustum definieren (siehe unten) 
	//glOrtho( -1., 1., -1., 1., 0.0, 2.0);
	gluPerspective(45., 1., 0.1, 2.0);
	// Matrix für Modellierung/Viewing 
	glMatrixMode(GL_MODELVIEW);
}

void Animate (int value)    
{	
	glClear( GL_COLOR_BUFFER_BIT );
	// Hier werden Berechnungen durchgeführt, die zu einer Animation der Szene  
	// erforderlich sind. Dieser Prozess läuft im Hintergrund und wird alle 
	// 1000 msec aufgerufen. Der Parameter "value" wird einfach nur um eins 
	// inkrementiert und dem Callback wieder uebergeben. 
	std::cout << "value=" << value << std::endl;

	fRotation -= 1.0f;
	if (fRotation <= 0.0) {
		fRotation += 360.0f;
	}

	// RenderScene aufrufen
	glutPostRedisplay();
	// Timer wieder registrieren; Animate wird so nach 100 msec mit value+=1 aufgerufen
	glutTimerFunc(100, Animate, ++value);     
}

int main(int argc, char **argv)
{
	glutInit( &argc, argv );                // GLUT initialisieren
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB |GLUT_DEPTH);  
	glutInitWindowSize( 600, 600 );         // Fenster-Konfiguration
	glutCreateWindow( "Norman Ackermann; Manuel Reinfurt" );   // Fenster-Erzeugung
	glutDisplayFunc( RenderScene );         // Zeichenfunktion bekannt machen
	glutReshapeFunc( Reshape );
	// TimerCallback registrieren; wird nach 10 msec aufgerufen mit Parameter 0  
	glutTimerFunc( 10, Animate, 0);
	Init();
	glutMainLoop();
	return 0;
}