fps mit glutWarpPoiner???

Schnelle objektorientierte, kompilierende Programmiersprache.
paparoach777
Beiträge: 52
Registriert: Mi Mai 12, 2010 3:48 pm

Re: fps mit glutWarpPoiner???

Beitrag von paparoach777 » Sa Jul 03, 2010 10:48 am

naja eigentlich habe ich versucht ohne SDL auszukommen...
aus irgentwelchen Gründen mag SDL mich nicht (und ich mag es auch nicht)!!!

weiß irgentjemand wie ich den Mauszeiger vielleicht so 10 pixel vor dem rand des fensters abfangen kann???
return EXIT_FAILURE;

paparoach777
Beiträge: 52
Registriert: Mi Mai 12, 2010 3:48 pm

Re: fps mit glutWarpPoiner???

Beitrag von paparoach777 » Di Jul 13, 2010 10:08 am

Ich habe mal ein neues Programm geschrieben, dass sich nur mit der Ego-Perspektive beschäftigt. Nur es setzt die Rotation nur einmal in jede Richtung...

Was ist der Fehler???

Hier der Code:

Code: Alles auswählen

#include <iostream>
#include <stdlib.h> 


#ifdef __APPLE__
#include <OpenGL/OpenGL.h>
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif


float RotAtX = 0.0f;
float RotAtY = 0.0f;
float lx = 0.0f;
float ly = 0.0f;
float lz = 0.0f;
float mx;
float my;
float GW;
float GH;


void WarpPointer(int val){

	glutWarpPointer((GW / 2), (GH / 2));

}



void HandleMouseMotion(int x, int y){

	mx = x;
	my = y;

	if(mx != (GW / 2) && my != (GH / 2)){

		if(mx < (GW / 2)){

			RotAtY =- 0.5;

			glutPostRedisplay();

		}
		else if(mx > (GW / 2)){

			RotAtY =+ 0.5;

			glutPostRedisplay();

		}
		if(my < (GH / 2)){

			RotAtX =+ 0.5;

			glutPostRedisplay();

		}
		else if(my > (GH / 2)){

			RotAtX =- 0.5;

			glutPostRedisplay();

		}
	}
	glutTimerFunc(200, WarpPointer, 0);
	glutPostRedisplay();
}



void Init(){

	glEnable(GL_DEPTH_TEST);
	glEnable(GL_COLOR_MATERIAL);

}



void resize(int w, int h){

	glViewport(0, 0, w, h);
	GH = h;
	GW = w;

	glMatrixMode(GL_PROJECTION);

	glLoadIdentity();
	gluPerspective(45.0, (double)w / (double)h, 0.0, 200.0);
}


void handle_keyboard(unsigned char key, int x, int y){
	if(key == 27){
		exit(0);
	}
	else if(key == 'w'){
		lz=lz+0.5f;
	}
	else if(key == 's'){
		lz=lz-0.5f;
	}
	else if(key == 'a'){
		lx=lx+0.5f;
	}
	else if(key == 'd'){
		lx=lx-0.5f;
	}
	
	glutPostRedisplay();
}



void DrawScene(){

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

	glPushMatrix();
	glTranslatef(lx, ly, lz);
	glRotatef(RotAtY, 0.0f, 1.0f, 0.0f);
	glRotatef(RotAtX, 1.0f, 0.0f, 0.0f);

	glBegin(GL_LINES);

	glColor3f(1.0f, 0.0f, 0.0f);
	glVertex3f(-10.0f, 0.0f, -6.0f);
	glVertex3f(10.f, 0.0f, -6.0f);

	glColor3f(0.0f, 1.0f, 0.0f);
	glVertex3f(0.0f, -10.0f, -6.0f);
	glVertex3f(0.0f, 10.0f, -6.0f);

	glColor3f(1.0f, 0.0f, 1.0f);
	glVertex3f(0.0f, 0.0f, -16.0f);
	glVertex3f(0.0f, 0.0f, 4.0f);

	glEnd();

	glPopMatrix();

	glutSwapBuffers();
}



int main(int argc, char** argv){

	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
	glutInitWindowSize(800, 600);

	glutCreateWindow("...");

	glutDisplayFunc(DrawScene);
	glutKeyboardFunc(handle_keyboard);
    glutReshapeFunc(resize);
	glutPassiveMotionFunc(HandleMouseMotion); 
	

	glutMainLoop();
}
return EXIT_FAILURE;

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: fps mit glutWarpPoiner???

Beitrag von Xin » Di Jul 13, 2010 4:01 pm

paparoach777 hat geschrieben:Ich habe mal ein neues Programm geschrieben, dass sich nur mit der Ego-Perspektive beschäftigt. Nur es setzt die Rotation nur einmal in jede Richtung...
Ich kann Dir sogar sagen, dass es sich unter einem Mac kompilieren und ausführen lässt.
paparoach777 hat geschrieben: Was ist der Fehler???
Was die Darstellung angeht ist mir gluPerspective aufgefallen: Schau von 0.1 bis 200, nicht von 0.0.

Und was die Rotation angeht, da musste ich auch dreimal hingucken:

Code: Alles auswählen

			RotAtY =- 0.5;
Jetzt guck Du doch auch mal GAAAANZ genau hin... ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

paparoach777
Beiträge: 52
Registriert: Mi Mai 12, 2010 3:48 pm

Re: fps mit glutWarpPoiner???

Beitrag von paparoach777 » Di Jul 13, 2010 8:06 pm

Man wie dumm muss ich sein...

Operator falschrum geschrieben ( =+ statt += ).

Geheiligt sei das Furom!!!!!!

Es gibt nur ein Problem...
Der Maus-Input hängt n bissel ,weiß jemand wie man das behebt???
return EXIT_FAILURE;

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: fps mit glutWarpPoiner???

Beitrag von Xin » Di Jul 13, 2010 8:23 pm

paparoach777 hat geschrieben:Operator falschrum geschrieben ( =+ statt += ).

Geheiligt sei das Furom!!!!!!
So etwas kann ja einmal passieren... oder auch zweimal ;-)
paparoach777 hat geschrieben:Es gibt nur ein Problem...
Der Maus-Input hängt n bissel ,weiß jemand wie man das behebt???
Was genau meinst Du mit 'Hängen'?

Du solltest vielleicht die Stärke der Änderung berücksichtigen. Du unterscheidest nur, ob Du die Maus bewegst, nicht wie schnell Du sie bewegst.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

paparoach777
Beiträge: 52
Registriert: Mi Mai 12, 2010 3:48 pm

Re: fps mit glutWarpPoiner???

Beitrag von paparoach777 » Mo Jul 19, 2010 10:45 am

Außerdem sieht es so aus, als ob das koordinatenkreuz nur um sich selbst dreht und nicht, wie ursprünglich erhofft, um die kamera.
return EXIT_FAILURE;

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: fps mit glutWarpPoiner???

Beitrag von Xin » Mo Jul 19, 2010 12:13 pm

paparoach777 hat geschrieben:Außerdem sieht es so aus, als ob das koordinatenkreuz nur um sich selbst dreht und nicht, wie ursprünglich erhofft, um die kamera.
Solche Fehler ergeben sich gerne aus einer Verwechslung von Rotate und Translate.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

paparoach777
Beiträge: 52
Registriert: Mi Mai 12, 2010 3:48 pm

Re: fps mit glutWarpPoiner???

Beitrag von paparoach777 » Di Jul 20, 2010 6:42 pm

Habe jetzt Translate und rotate umgetauscht.

nur jetzt wird beim reingehen mit 'w' immer in die gleiche richtung bewegt, egal wohin die kamera gedreht ist...
aber die drehung ist jetzt ok
return EXIT_FAILURE;

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: fps mit glutWarpPoiner???

Beitrag von Xin » Mi Jul 21, 2010 12:02 am

paparoach777 hat geschrieben:Habe jetzt Translate und rotate umgetauscht.

nur jetzt wird beim reingehen mit 'w' immer in die gleiche richtung bewegt, egal wohin die kamera gedreht ist...
aber die drehung ist jetzt ok
Zeig mal Deinen Code (mit KOmmentaren, was Du Dir da vorstellst)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

paparoach777
Beiträge: 52
Registriert: Mi Mai 12, 2010 3:48 pm

Re: fps mit glutWarpPoiner???

Beitrag von paparoach777 » Mi Jul 21, 2010 6:36 pm

Hier der momentane Code:

Code: Alles auswählen

#include <iostream>
#include <stdlib.h> 


#ifdef __APPLE__
#include <OpenGL/OpenGL.h>
#include <GLUT/glut.h>
#else
#include <GL/glut.h>
#endif


float RotAtX = 0.0f;
float RotAtY = 0.0f;
float lx = 0.0f;
float ly = 0.0f;
float lz = 0.0f;
float mx;
float my;
float oldx;
float oldy;
float GW;
float GH;
GLenum inf;


void WarpPointer(int val){

	glutWarpPointer((GW / 2), (GH / 2)); //warp to screen middle

}



void HandleMouseMotion(int x, int y){ //handles the movement of the mouse

	mx = x;
	my = y;

	if(mx != (GW / 2) && my != (GH / 2)){

		if(mx < (GW / 2)){

			if(mx < oldx){

				RotAtY -= ((oldx - mx)*0.25);

				glutPostRedisplay();

			}
			if(mx > oldx){
				
				RotAtY -= ((mx - oldx)*0.25);

				glutPostRedisplay();

			}

		}
		else if(mx > (GW / 2)){       

			if(mx < oldx){

				RotAtY += ((oldx - mx)*0.25);

				glutPostRedisplay();

			}
			if(mx > oldx){
				
				RotAtY += ((mx - oldx)*0.25);

				glutPostRedisplay();

			}
		}
		if(my < (GH / 2)){

			if(my < oldy){

				RotAtX += ((oldy - my)*0.25);

				glutPostRedisplay();

			}
			if(my > oldy){
				
				RotAtX += ((my - oldy)*0.25);

				glutPostRedisplay();

			}
		}
		else if(my > (GH / 2)){

			if(my < oldy){

				RotAtX -= ((oldy - my)*0.25);

				glutPostRedisplay();

			}
			if(my > oldy){
				
				RotAtX -= ((my - oldy)*0.25);

				glutPostRedisplay();

			}
		}
	}
	oldx = mx;
	oldy = my;
	glutTimerFunc(1000, WarpPointer, 0); //warp every 10 sec
	glutPostRedisplay(); //tells that window needs to be redisplayed
}



void Init(){ //Enables and sets funcs

	glEnable(GL_DEPTH_TEST);
	glEnable(GL_COLOR_MATERIAL);
	glutSetCursor(GLUT_CURSOR_NONE); //no Cursor

}



void resize(int w, int h){ //set the scene if resized

	glViewport(0, 0, w, h);
	GH = h;
	GW = w;

	glMatrixMode(GL_PROJECTION);

	glLoadIdentity();
	gluPerspective(45.0, (double)w / (double)h, 0.1, 200.0);
}


void handle_keyboard(unsigned char key, int x, int y){ //handle keyboard
	if(key == 27){
		exit(0);
	}
	else if(key == 'w'){
		lz=lz+0.5f;
	}
	else if(key == 's'){
		lz=lz-0.5f;
	}
	else if(key == 'a'){
		lx=lx+0.5f;
	}
	else if(key == 'd'){
		lx=lx-0.5f;
	}
	else if(key == ' '){
		ly=ly-0.5f;
	}
	else if(key == 'c'){
		ly=ly+0.5f;
	}
	
	glutPostRedisplay(); //window need to be redisplayed
}



void DrawScene(){ //draw the scene

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

	glPushMatrix();

	glRotatef(RotAtY, 0.0f, 1.0f, 0.0f);
	glRotatef(RotAtX, 1.0f, 0.0f, 0.0f);

	glTranslatef(lx, ly, lz);



	glBegin(GL_LINES);

	glColor3f(1.0f, 0.0f, 0.0f);
	glVertex3f(-10.0f, 0.0f, -6.0f);
	glVertex3f(10.f, 0.0f, -6.0f);

	glColor3f(0.0f, 1.0f, 0.0f);
	glVertex3f(0.0f, -10.0f, -6.0f);
	glVertex3f(0.0f, 10.0f, -6.0f);

	glColor3f(1.0f, 0.0f, 1.0f);
	glVertex3f(0.0f, 0.0f, -16.0f);
	glVertex3f(0.0f, 0.0f, 4.0f);

	glEnd();

	glPopMatrix();

	glutSwapBuffers();
}



int main(int argc, char** argv){

	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);

	glutGameModeString("1280x800:32@100"); //fullscreen options

	if(glutGameModeGet(inf) != 0){ 

		exit(1);

	}

	glutEnterGameMode(); //enter fullscreen

	Init(); //enable modes

	glutDisplayFunc(DrawScene);
	glutKeyboardFunc(handle_keyboard);
    glutReshapeFunc(resize);
	glutPassiveMotionFunc(HandleMouseMotion); 
	

	glutMainLoop();
}
return EXIT_FAILURE;

Antworten