OpenGL und GLUT in VS2010

PHPler

Grünschnabel
Hallo,

ich habe ein kleines Problem und bin mir fast sicher das es entweder an VS2010 liegt oder an GLUT.

Ich habe einen Beispielcode von meinem Professor, von dem aus ich das Projekt aufbauen soll. In der Uni habe ich diesen so schon verwenden und ausführen können, dort jedoch auf einer älteren VS Version (ich glaube 2008). Durch das Studentenprogramm von MS komme ich ja an VS2010 ran und hab es dann auch installiert.

Erstes Problem war dann, dass <gl/glut.h> nicht installiert war. Also hab ich das gemacht.

Code:
/* 

   Lehrveranstaltung Computergraphik,
   OpenGL Praktikum
   Erste Aufgabe

   Autor: Prof. Dr. Ralf Dörner, FH Wiesbaden

   Version 1.0

*/
// für Textausgaben auf der Konsole:
#include <stdio.h>


// hier die notwendigen Includes - es genügt glut.h einzubinden, da
// diese wiederum GL/gl.h und alle weiteren benötigten Include-
// Dateien einbindet
#include <gl/glut.h>


// die Funktion display enthält alle Befehle, die zum Zeichnen des
// Bildes benötigt werden
void display( void )
{

	// zunächst wird das bisher gezeichnete Bild gelöscht,
	// indem das Bild komplett in der Hintergrundfarbe gezeichnet
	// wird. Ausserdem wird die Verdeckungsrechnung initialisiert
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	
	// die folgenden drei Befehle dienen dazu anzugeben, von wo aus
	// die Szene betrachtet wird (d.h. unter welchem Blickwinkel
	// das Bild berechnet wird
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	// die ersten drei Argumente sind die Koordinaten, wo der
	// Betrachter steht, die nächsten drei Argumente geben die
	// Koordinaten an, wohin der Betrachter blickt und die letzten
	// drei Argumente geben an, wo oben ist (bei uns ist y-Richtung
	// oben
	gluLookAt(20.0,20.0,20.0,0.0,0.0,0.0,0.0,1.0,0.0);

	// die Zeichenfarbe wird auf rot gesetzt
	glColor3f(1.0, 0.0, 0.0);

	// Verbinde die folgenden Eckpunkten zu Dreicken (bis glEnd()
	// kommt)
	glBegin(GL_TRIANGLES);
			// und hier kommen die Koordinaten der Eckpunkte:
			glVertex3f(0.0, 0.0, 0.0);
			glVertex3f(-10.0, 0.0, 0.0);
			glVertex3f(10.0, 10.0, 0.0);
	glEnd();

	// Sorge dafür, dass wirklich alle glBefehle abgearbeitet und
	// nicht gepuffert werden
	glFlush();

	// Vertausche die Backbuffer und Frontbuffer: das fertig
	// gezeichnete Bild soll jetzt angezeigt werden
	//glutSwapBuffers();

	// Sorge dafür, dass das Bild im nächsten Schleifendurchlauf
	// der glutMainLoop wieder gezeichnet wird
	//glutPostRedisplay();

} // end display


// die Funktion reshape enthält alle Befehle, die man benötigt,
// um auf Veränderungen der Fenstergröße zu reagieren
void reshape(int w, int h)
{
	
	// hier wird die Perspektive gesetzt
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(60.0, w / h, 0.1, 100.0);
	glViewport(0.0, 0.0, w, h);
	glMatrixMode(GL_MODELVIEW);

} // end reshape


// die Funktion wird aufgerufen, sobald eine Taste der Tastur
// gedrückt wurde. Es steht die Info zur Verfügung, welche
// Taste gedrückt wurde und wo sich die Maus zu diesem Zeitpunkt
// befand
void keyboard(unsigned char key, int x, int y)
{
	printf("Taste wurde gedrueckt: %c \n", key);
}


// die Funktion wird aufgerufen, sobald eine Taste der Maus
// gedrückt wurde. Es steht die Info zur Verfügung, welche
// Taste betroffen ist, ob sie gedrückt oder losgelassen wurde
// und wo sich die Maus zu diesem Zeitpunkt befand
void mouse(int button, int state, int x, int y)
{
	if(GLUT_LEFT == button && GLUT_DOWN == state)
	{
		printf("Linker Mausbutton wurde geklickt.\n");
	}
}


// Hauptfunktion
void main(int argc, char** argv)
{
	// Initialisiere die GLUT
    glutInit(&argc,argv);

	// Setze den Display Mode: Farben werden in RGB angegeben,
	// es wird eine Verdeckungsrechnung durchgeführt und mit
	// zwei Buffern gearbeitet
    glutInitDisplayMode (GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
	
	// Setze die Fenstergröße auf 500 x 500
    glutInitWindowSize(500,500); 

	// Erzeuge ein Fenster auf dem Bildschirm an Position
	// 100, 0 (Bildschirmkoordinaten)
    glutInitWindowPosition(100,0); 

	// Erzeuge das Fenster
    glutCreateWindow("Computergraphik ist toll!!");
    
	// Bestimme, welcher Callback zum Zeichnen aufgerufen wird
	glutDisplayFunc(display); 

	// Bestimme, welcher Callback bei Größenänderung des Fensters
	// aufgerufen wird
	glutReshapeFunc(reshape);

	// Bestimme, welcher Callback bei Betätigung der Tastatur
	// aufgerufen wird
	glutKeyboardFunc(keyboard);

	// Bestimme, welcher Callback bei Betätigen einer Maustaste
	// aufgerufen wird
	glutMouseFunc(mouse);

	// die Hintergrundfarbe wird auf gelb gesetzt
	glClearColor(1.0, 1.0, 0.0, 1.0);

	// die Initialisierung der Verdeckungsrechnung ist 1.0
	glClearDepth(1.0);

	// die Verdeckungsrechnung wird eingeschaltet
	glEnable(GL_DEPTH_TEST);

	// Übergebe die Kontrolle nun an GLUT, die in einer Endlos-
	// schleife die Callbacks aufruft
    glutMainLoop(); 
}// end main

So, das sollte doch eigentlich alles gewesen sein. Programm compiliert, Consolen Fenster geht auf, OpenGL Fenster geht auf, bleibt aber weiss.

Wo ist jetzt das Problem? Ich kann in das Fenster klicken und bekomme dann Ausgaben in der Konsole (Linker Maus Button gedrückt), das gleiche mit Tastatur eingaben. Ein "resize" des Fensters bewirkt auch keine Veränderung.

Bei einem Kommilitonen funktioniert alles, wenn er es so macht. Könnte es am System liegen?

Win7 64Bit
Intel E6600
ATI 4870

Bin für jede Hilfe dankbar.
 

saftmeister

Nutze den Saft!
Ich kann dich beruhigen, ich hab es jetzt mal mit 2005, 2008 und 2010 getestet:

- Visual Studio 2005 kompiliert nicht, weil GL/gl.h fehlt
- Visual Studio 2008 kompiliert, linkt und führt aus, Bildschirm bleibt weiß, Maustasten-Event-Handler reagiert auf LMT
- Visual Studio 2010 kompiliert, linkt und führt aus, Bildschirm bleibt weiß, Maustasten-Event-Handler reagiert auf LMT

Ich musste jedoch die GLUT erstmal installieren, hier die verwendete Anleitung: http://csf11.acs.uwosh.edu/cs371/visualstudio/

Der "Fehler" muss also wo anders zu suchen sein, denn das Verhalten ist auf einer anderen Maschine mit anderen Compilern identisch. Das Einzige, was jetzt noch sein könnte, wäre, das du und ich die gleiche "falsche" Glut-Lib einsetzen.
 

PHPler

Grünschnabel
Okay danke dir schon mal saftmeister, ich habe glaube dieselbe Anleitung für GLUT verwendet, dann muss ich nochmal den Quellcode mit meinen Komillitonen abgleichen, bin aber eigentlich sicher das ich nichts verändert habe. Ich schmeiss nen Edit rein, wenn es was neues gibt.
Ich lass mir dann auch mal bei der Gelegenheit die GLUT Dateien zuschicken, um das auch auszuschließen.

EDIT:
Okay anscheinend war ich doch so doof und hab den Originalquellcode verändert. Hab ihn mir nochmal aus dem Verzeichnis vom Prof geholt und es geht nun.

Danke!
 
Zuletzt bearbeitet:

Neue Beiträge