0

現在、GLM が途切れ途切れの変換と回転を提供しているという問題が発生しています。これは、滑らかではないことを意味します。GLFW 3、GLM、および OpenGL 3.2 を使用しています。ジョイスティック入力を使用して単純なクワッドを変換しようとしています。最初は、ジョイスティックが原因だと思っていました。これを反証するために、コードを変更して、クワッドをユーザー入力から独立して回転させますが、deltaTime に依存します。いくつかのコード セグメントを次に示します。マトリックスを回転させている方法にあると思いますか?

CPP ファイル:

float speed = 3.0f;
float deadZone = 0.10f;
glm::vec2 direction(0.0f);

while (!glfwWindowShouldClose(window))
{
    currentTime = glfwGetTime();
    deltaTime = (currentTime - lastUpdate) * 1000.0f;

    //Update logic
    inputHandler->tick(deltaTime);

    float inputX, inputY;
    inputX = inputHandler->getGamepad(0)->getAxes(AXIS::HORIZONTAL);
    inputY = inputHandler->getGamepad(0)->getAxes(AXIS::VERTICAL);

    float magnitude = sqrtf((inputX * inputX) + (inputY * inputY));
    if (magnitude > deadZone) //Radial dead zone detection
    {
        //Could the stutter be caused by type casting?
        direction.x += inputX * float((speed * deltaTime) / 1000.0f);
        direction.y += inputY * float((speed * deltaTime) / 1000.0f);
    }

    ... //Set vertex values and UV coord

    //Set the matrix values according to the joystick input
    glm::mat4 MVP(1.0f);
    MVP = glm::translate(MVP, glm::vec3(direction, 0.0f));
    glUniformMatrix4fv(mvpID, 1, GL_FALSE, glm::value_ptr(MVP));

    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

    ...
}

頂点シェーダー:

#version 150

in vec2 vertexPosition_modelspace;
in vec2 UV;

uniform mat4 MVP;

out vec2 vUV;

void main() {
    vUV = UV;
    gl_Position = MVP * vec4(vertexPosition_modelspace, 0, 1);
}
4

3 に答える 3

0

これは非常に苛立たしいことですが、Windows を再起動したところ、すべての問題が解消されました。std::cout への呼び出しによって Visual Studio がブレークポイントを挿入したものでさえ。

于 2013-11-17T05:36:00.557 に答える