Nehe OpenGL MessageLoop



  • Indem du mit einem Counter (siehe anderer Thread) die Zeit misst, die für einen Frame gebraucht wird, und diese Zeit mit der Geschwindigkeit aller Bewegungsänderungen im nächsten Frame multiplizierst (umso schneller der PC, umso kleiner die Zeit, umso langsamer die Bewegungen, letztendlich passt das)
    Oder einfacher aber nicht so schön: die FPS limitieren, also Sleep()en wenn nötig.



  • Jo dann werd ich mich mal auf die suche nach besagtem anderen Thread machen. Wie gesagt, nen Sleep() finde ich nicht so schön. 😉



  • Ich hab mal nen NeheCode gesehen, da wurde schon n DWORD mit Namen milliseconds an die Update Funktion übergeben. Ich denke mal, dass es sich dabei um die besagte Zeit handelt, mit der du deine Bewegungsabläufe multiplizieren musst. Kannst ja mal nachgucken.



  • Ich habe das ganze jetzt so gelöst (Den folgenden Code hat mir ein befreundeter Programmierer gegeben und ich hab ihn einfach mal in meinen Code eingebaut). Ss scheint sehr gut zu funktionieren.

    __int64 start;
    QueryPerformanceCounter((LARGE_INTEGER*)&start);	
    __int64 perffreq;
    QueryPerformanceFrequency((LARGE_INTEGER*)&perffreq);
    
    DrawGLScene(); // Die Szene ausgeben
    SwapBuffers(hDC); // Die Puffer werden getauscht
    
    //frame limit
    while(1)
    {
    	__int64 now;
    	QueryPerformanceCounter((LARGE_INTEGER*)&now);
    	float dt=(float)(now-start)/(float)perffreq*1000.0f;
    	if (dt>(1000.0f/60.0f))
    	{
    		break;
    	}
    }
    


  • Steht die Thematik echt nicht in der FAQ??



  • Tja Freundchen mag sein dass DIESE Thematik im FAQ steht, aber guck dir mal die ursprüngliche Frage im Thread an. Die bezog sich dann wohl eher auf ein NeHe Tutorial!



  • Ich spielte auf noeboef an und den Zeitgeber-Kram, *DIR* hab' ich ja schon lange geantwortet.



  • Okay sorry dann kam das falsch rüber



  • Belial schrieb:

    Jo das mir schon klar, nur das Problem an der Sache:
    In dem Nehe Tutorial wird erst ein Objekt rotiert und dann gerednert. Nun ist das Problem, das logischwerweise der Messageloop auf schnellen cpus schneller durchlaufen wird und sich die Objekte nun abhängig von der Taktfrequenz unterschiedlich schnell Bewegen. Das doch gerade für ein Spiel ziemlich inakzeptabel. Wie kann man sowas verhindern?

    Also war dein eigentliches Problem doch das worauf noebef und ich geantwortet haben. Übrigens macht der Code den du gepostet hast nichts anderes als wenn angebracht zu warten (zu Sleep()en) und somit die FPS zu limitieren, was du doch eigentlich nicht wolltest 😉



  • Im Grunde hast du Recht... 😉


Anmelden zum Antworten