fps mit glutWarpPoiner???
-
- Beiträge: 52
- Registriert: Mi Mai 12, 2010 3:48 pm
Re: fps mit glutWarpPoiner???
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???
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;
-
- Beiträge: 52
- Registriert: Mi Mai 12, 2010 3:48 pm
Re: fps mit glutWarpPoiner???
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:
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;
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: fps mit glutWarpPoiner???
Ich kann Dir sogar sagen, dass es sich unter einem Mac kompilieren und ausführen lässt.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...
Was die Darstellung angeht ist mir gluPerspective aufgefallen: Schau von 0.1 bis 200, nicht von 0.0.paparoach777 hat geschrieben: Was ist der Fehler???
Und was die Rotation angeht, da musste ich auch dreimal hingucken:
Code: Alles auswählen
RotAtY =- 0.5;
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.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
-
- Beiträge: 52
- Registriert: Mi Mai 12, 2010 3:48 pm
Re: fps mit glutWarpPoiner???
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???
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;
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: fps mit glutWarpPoiner???
So etwas kann ja einmal passieren... oder auch zweimalpaparoach777 hat geschrieben:Operator falschrum geschrieben ( =+ statt += ).
Geheiligt sei das Furom!!!!!!

Was genau meinst Du mit 'Hängen'?paparoach777 hat geschrieben:Es gibt nur ein Problem...
Der Maus-Input hängt n bissel ,weiß jemand wie man das behebt???
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.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
-
- Beiträge: 52
- Registriert: Mi Mai 12, 2010 3:48 pm
Re: fps mit glutWarpPoiner???
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;
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: fps mit glutWarpPoiner???
Solche Fehler ergeben sich gerne aus einer Verwechslung von Rotate und Translate.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.
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.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
-
- Beiträge: 52
- Registriert: Mi Mai 12, 2010 3:48 pm
Re: fps mit glutWarpPoiner???
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
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;
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: fps mit glutWarpPoiner???
Zeig mal Deinen Code (mit KOmmentaren, was Du Dir da vorstellst)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
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.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
-
- Beiträge: 52
- Registriert: Mi Mai 12, 2010 3:48 pm
Re: fps mit glutWarpPoiner???
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;