0

だから今、C ++には一人称カメラがあり、コントロールは問題なく、カメラはうまく動きます。しかし、私の唯一の問題は、カメラの速度が期待したものではないことです。説明させてください。

(3Dシーン)

10個のオブジェクト -> カメラの速度が速い

1000 オブジェクト -> カメラ速度が遅い


したがって、基本的に私がしていることは、次のように時間をかけて倍増することです:

Newpos += 速度 * DeltaTime;

それでも、私のプログラムにやるべきことがたくさんあるときは、カメラの速度が大幅に低下します! ここで何が起こっているのですか、私は何を間違っていますか?

タイムコード(結果は問題ないようで、秒単位です):

double DeltaTime::milliseconds_now() 
{
    static LARGE_INTEGER s_frequency;
    static BOOL s_use_qpc = QueryPerformanceFrequency(&s_frequency);
    if (s_use_qpc) {
        LARGE_INTEGER now;
        QueryPerformanceCounter(&now);
        return (1000LL * now.QuadPart) / s_frequency.QuadPart;
    } else {
        return GetTickCount();
    }
}

void DeltaTime::OnStart()
{
    //ticks = (float)GetTickCount();
    QueryPerformanceFrequency( &m_liPerformanceFrequency);
}

float DeltaTime::GetDelta()
{
    return ((float)dTime/(float)1000000.0f);
}

void DeltaTime::OnFinish()
{
    if (timeFirst)
    {
        //ticks = 0;
        dTime = 0;
        timeFirst = false;
        return;
    }

    //ticks = ((float)ticks = (float)GetTickCount() - (float)ticks);
    QueryPerformanceCounter( &liPerformanceCount);
    dTime = double(liPerformanceCount.QuadPart)/double(m_liPerformanceFrequency.QuadPart);
}

フレーム:

void OnFrame(...)
{
 ...
 timeHandler.OnFinish();
 timeHandler.OnStart();
 ...
}

ありがとうございました

4

1 に答える 1

0

どういうわけか、on start 関数を 2 回呼び出していましたが、とにかくシステムが変更されました。

于 2013-04-06T21:25:25.253 に答える