Ständig Aktualisieren des Bildes



  • Hallo,
    ich hab mal wieder ein Problem. Ich habe jetzt einen Code geschrieben wo sich ein Viereck auf ein Hintergrund bewegt. Nur damit sich das Viereck überhaupt bewegt muss ich das Fenster ständig Aktualisiert werden. Das kann ich machen in dem ich es mit ein anderen Fenster überdecke und dann das Opengl Fenster wieder anklicke, oder ich schieb es ausserhalb des Monitor und wieder zurück.
    Nur im Spiel möchte ich nicht ständig das Fenster verschieben müssen 😉 .
    Es gibt doch bestimmt ein Befehl damit sich das Fenster sofort von alleine Aktualiesiert. Achso, den Code Poste ich natürlich noch. Ich meine wer sich damit vergnügen kann darf das auch.

    #include <stdio.h>
    #include "glut.h"
    #include <conio.h>
    #include <stdlib.h>
    #include <gl/gl.h>
    #include <gl/glu.h>
    
    #pragma comment(lib, "glut32.lib")
    #pragma comment(lib, "opengl32.lib")
    
    //void init(void);
    void display(void);
    void feld(void);
    //int taste(void);
    void keys(unsigned char,int,int);
    
    float gx,gy;
    
    void maus(int button, int state, int x, int y); //Mausereignis verarbeiten
    void tastatur(unsigned char key, int x, int y); //Tastaturereignis verarbeite
    
    int main(int argc,char **argv)
    {
    
    	glutInit(&argc,argv);
    	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    
    	glutInitWindowSize(450,400); 
    	glutInitWindowPosition(50,50);
    
    	glutCreateWindow("4");
    
     	glutKeyboardFunc(keys);
    
    	glClearColor(1.0, 1.0, 1.0, 0.0);
    
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity(); 
    
    	glOrtho(0,9,0,8,0,10);
    
    	glutDisplayFunc(display);
    
    	glutMainLoop();
    	return 0;
    }
    
    void display(void)
    {
    
    //	int welchetaste;
    	glClear(GL_COLOR_BUFFER_BIT);
    	glColor3ub(0, 0, 0);
    
    //	glPushMatrix();
    
    	glBegin(GL_QUADS);
    
    	glVertex2f(1.5 + gx,1.5 + gy);
    	glVertex2f(2.5 + gx,1.5 + gy);
    	glVertex2f(2.5 + gx,2.5 + gy);
    	glVertex2f(1.5 + gx,2.5 + gy);
    	glEnd();
    
    //	glPopMatrix();	
    
    	feld();
    
    //	SwapBuffers(NULL);
    
    	glFlush();
    
    //	welchetaste = taste();
    //	printf("welchetaste = %d",welchetaste);
    
    }
    
    //int taste(void)
    //{
    //	int rueck = 0;
    //
    //	while(rueck == 0)
    //	{
    //		rueck = kbhit();
    //	}
    //	rueck = getch();
    //	rueck = getch();
    //	return(rueck);
    //	
    //}
    
    void keys(unsigned char k,int x,int y) 
    {
        switch(k) 
        { 
    		case FALSE:
    			break;
    
            case 27:  
    			exit(0);
    			break;
            case 'a':	
    			gx--;
    			break; 
    
    		case 'd':	
    			gx++;
    			break; 
    		case 's':	
    			gy++;
    			break; 
    		case 'w':	
    			gy--;
    			break; 
    
        } 
    } 
    
    void feld(void)
    {
    	//vertikal
    	glBegin(GL_LINES);
    		glVertex2i(1,1);
    		glVertex2i(1,7);
    	glEnd();
    
    	glBegin(GL_LINES);
    		glVertex2i(2,1);
    		glVertex2i(2,7);
    	glEnd();
    
    	glBegin(GL_LINES);
    		glVertex2i(3,1);
    		glVertex2i(3,7);
    	glEnd();
    
    	glBegin(GL_LINES);
    		glVertex2i(4,1);
    		glVertex2i(4,7);
    	glEnd();
    
    	glBegin(GL_LINES);
    		glVertex2i(5,1);
    		glVertex2i(5,7);
    	glEnd();
    
    	glBegin(GL_LINES);
    		glVertex2i(6,1);
    		glVertex2i(6,7);
    	glEnd();
    
    	glBegin(GL_LINES);
    		glVertex2i(7,1);
    		glVertex2i(7,7);
    	glEnd();
    
    	glBegin(GL_LINES);
    		glVertex2i(8,1);
    		glVertex2i(8,7);
    	glEnd();
    
    	//horizontal
    
    	glBegin(GL_LINES);
    		glVertex2i(1,7);
    		glVertex2i(8,7);
    	glEnd();
    
    	glBegin(GL_LINES);
    		glVertex2i(1,6);
    		glVertex2i(8,6);
    	glEnd();
    
    	glBegin(GL_LINES);
    		glVertex2i(1,5);
    		glVertex2i(8,5);
    	glEnd();
    
    	glBegin(GL_LINES);
    		glVertex2i(1,4);
    		glVertex2i(8,4);
    	glEnd();
    
    	glBegin(GL_LINES);
    		glVertex2i(1,3);
    		glVertex2i(8,3);
    	glEnd();
    
    	glBegin(GL_LINES);
    		glVertex2i(1,2);
    		glVertex2i(8,2);
    	glEnd();
    
    	glBegin(GL_LINES);
    		glVertex2i(1,1);
    		glVertex2i(8,1);
    	glEnd();
    
    }
    

    Freue mich über jede Hilfe und Hinweise.
    MfG Ernd



  • http://pyopengl.sourceforge.net/documentation/manual/glutPostRedisplay.3GLUT.html
    ist die antwort

    wenn du etwas an der scene veränderst solltest du glutpostredisplay aufrufen

    void keys(unsigned char k,int x,int y)
    {
        switch(k)
        {
            case FALSE:
                break;
    
            case 27:  
                exit(0);
                break;
            case 'a':   
                gx--;
                glutPostRedisplay();
                break;
    // usw
        }
    }
    


  • Vielen dank!
    Jetzt Funktionierts. 😉
    Ich spendier dir mal ein Eis 😋 oder doch lieber gleich ein Bier 🙄
    MfG Ernd



  • keine frage nen bier.



  • Ok, ich nehm dann das Eis, wenn es keiner will.

    Bye, TGGC \-/



  • Ja müsstet ihr mal vorbei kommen.
    😉



  • Gibst nicht zufällig auch ein Rumpsteak aus? 🤡



  • Ich vermute nur das wird leider wieder 300km zu weit sein, um mal eben kurz vorbei zu kommen. Das Problem hatten wir auch beim Steak...

    Könnte Riker nicht Picard mal'n Transporter klauen? 😎

    Bye, TGGC \-/



  • Da merkt man mal wieder wie hinterher die Physiker sind. Die sollten endlich mal ein Teleporter bauen. :p



  • TGGC schrieb:

    Ich vermute nur das wird leider wieder 300km zu weit sein, um mal eben kurz vorbei zu kommen. Das Problem hatten wir auch beim Steak...

    Könnte Riker nicht Picard mal'n Transporter klauen? 😎

    Ja, Tomas, wie sieht's aus??

    Könntest Du mir dann den Holoraum besorgen, damit ich endlich voll und ganz in meiner Scheinwelt verschwinden kann?! 😋 👍


Anmelden zum Antworten