timer functionen bugi?
-
ahoi,
liegts am detonator oder an was das ich bei
GetTickCount()
QueryPerformanceCounter()
timeGetTime()immer ein und den selben wert erhalte?
weiss einer rat?dx8.1
vc++6
win2k
geforce4800SE 4.09detonator
-
Ich denke nicht, dass der Detonator da einfach so irgendwelche Funktionen ändert (es sei denn, nVidia erhofft sich dadurch, dass Benchmark-Programme höhere Framerates messen :D)... geht die Systemuhr denn normal? Zeig mal ein Stückchen Code...
-
moin,
normal sollte
float fTime = timeGetTime() / 400.0f;
jedoch passiert da nichts (auf einem anderen pc ja)
also dachte ich ein anderen timer
LONGLONG Frequenz; QueryPerformanceFrequency((LARGE_INTEGER*)&Frequenz); float fTime = Frequenz / 400.0f;
aber auch hier rotiert nichts
und wenn ich sprintf(dammy,"%ld",Frequenz); mache, sehe ich immer den selben wert!QueryPerformanceCounter((LARGE_INTEGER*)&Frequenz);
gibt andere werte wieder, aber auch hier rotiert nichts oder in unsagbarer geschwindigkeit ... habe schon rumprobiert aber schaff es nicht ^^
und dafür solls sein
D3DXMatrixRotationYawPitchRoll(&matWorld,fTime,fTime,fTime);
*mit armen fuchtel und hilfe schrei* ^^
-
Das hört sich komisch an, als ob mit dem Timer Deines PCs was nicht in Ordnung wäre! Funktionieren denn die DirectX-SDK-Beispiele (Direct3D) richtig? Falls ja: schau sie Dir an (das Framework) und gucke, was die da anders machen als Du.
Probiere mal folgende Funktion aus:void delay(DWORD duration) { DWORD start = timeGetTime(); while(timeGetTime() <= start + duration) {} } int main() { printf("1! "); delay(1000); printf("2! "); delay(1000); printf("3! "); delay(1000); ... return 0; }
Wenn das nicht geht, dann weiß ich es auch nicht...
-
omg ... das hat geklappt .. *verwirrt blick*
dann muss ja das "/ 400.0f" zu klein sein .. aber auch wieder nicht, da es an diesem pc (ein anderer als meiner ^^) funktioniert (der cubus rotiert) .. also jetzt bin ich total durcheinander.
-
Vielleicht wird der Performance Counter garnicht von der Hardware unterstützt?
-
oben habe ich mich vertan
der QueryPerformanceCounter funktioniert auch der QueryPerformanceFrquency da er ja keine NULL ausgibt jedoch gibt letzteres immer denselben wert aus.
so jetzt bleibt aber die folgende frage
auf beiden pc's geht timeGetTime()
jedoch rotiert auf dem einen pc der cubus und auf dem anderen nicht! WARUM??das ist die besagte böse funktion ^^
void CubeRotation() { D3DXMATRIX matWorld, matWorldX, matWorldY, matWorldZ; D3DXMatrixRotationX(&matWorldX, timeGetTime()/400.0f); D3DXMatrixRotationY(&matWorldY, timeGetTime()/400.0f); D3DXMatrixRotationZ(&matWorldZ, timeGetTime()/400.0f); D3DXMatrixMultiply(&matWorld, &matWorldX, &matWorldY); D3DXMatrixMultiply(&matWorld, &matWorld, &matWorldZ); m_pD3DDevice->SetTransform(D3DTS_WORLD, &matWorld); } // die 3 D3DXMatrixRotationZ könnt man auch so schreiben ich weiss ^^ float fTime = timeGetTime() / 400.0f; D3DXMatrixRotationYawPitchRoll(&matWorld,fTime,fTime,fTime);