GLMは

2017-11-04 8 views
0

は私がこの機能この回転GLMは

auto rotateMat = rotate(mat4{}, timer * 0.4f, {0, 1, 0}); 

timerを送りしかし、問題がある

if (key == GLFW_KEY_S && action == GLFW_REPEAT) { 
      timer = glfwGetTime(); 
} 

を使用して、キー保留に回転したいオブジェクトを持って、私はキーホールド時間によってオブジェクトを回転させますSが押され、オブジェクトが回転していますが、解放すると、glfwGetTime()がリアルタイムに取得されるため、時間はもちろん変化しています。その後、もう一度Sを押して回転させますが、停止したときとは異なるオブジェクトの角度から回転を開始します。どのようにそれを修正するための任意のアイデア?

EDIT:

Iは timer += 0.1;

を使用してそれを修正しているしかし、私はSを押してそれを保持するときに、オブジェクトが回転し始めるまで、それは1秒程度の遅延を有します。実際のglfwGetTime()を使用した場合と同じでした。どのように私は遅延を持つことができますか?

答えて

2

キーが押された場合は、追跡する必要があります:レンダリングループでは

if (action == GLFM_PRESS) { 
    keysPressed[key] = true; 
} 
if (action == GLFM_RELEASE) { 
    keysPressed[key] = false; 
} 

:右、上下、

now = glfwGetTime(); 
double delta = now - lastTime; 
lastTime = now; 

if (keysPressed[GLFW_KEY_S]) { 
    timer += delta; 
} 
if (keysPressed[GLFW_KEY_A]) { 
    timer -= delta; 
} 
auto rotateMat = rotate(mat4{}, timer * 0.4f, {0, 1, 0}); 
+0

は遅延が固定されて、ありがとうございますが、私は左に回転させるようにしたいので、 、私は 'pressedLastTick = -glfwGetTime();を行います。これは、他の側へのローテーションの場合で、これは時間の値を引いているので、うまくいきません。どうすればそれを避けることができますか? – Ady96

+0

複数のキーを考慮に入れて回答を書き直しました。 – mazatwork

関連する問題