現在、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);
}