FPSカメラを基本的にカメラの方向に応じて前後に動かす方法は不思議でしたが、私は惨めに失敗しました。最適に、今の私のコードは私の三角形の後ろのスイッチ方向である(ワットがのとのがワットなりなり)と、回転が完全に動作し、一般的に動作しない(時々、代わりに前方の斜めに移動)としてではなく、翻訳私のマトリックスをねじ込む...OpenGL、ファーストパーソンカメラ翻訳
void glfwCursorCallback(GLFWwindow* window, double x, double y) {
camera.rx += (x - camera.lcx) * 0.01f;
camera.ry += (y - camera.lcy) * 0.01f;
kmMat4RotationYawPitchRoll(&camera.mat, camera.ry , camera.rx, 0.0f);
camera.lcx = x;
camera.lcy = y;
}
...
kmMat4PerspectiveProjection(&projection, 90.0f, aspect, 0.1f, 1000.f);
float x = 0.0f, y = 0.0f, z = -1.0f;
while(!glfwWindowShouldClose(window)) {
if(glfwGetKey(window, GLFW_KEY_W) == GLFW_PRESS) {
/* pitch - ry */
x += 0.1*sin(camera.ry)*cos(camera.rx);
y += 0.1*sin(camera.ry)*sin(camera.rx);
z += 0.1*cos(camera.ry);
}
if(glfwGetKey(window, GLFW_KEY_S) == GLFW_PRESS) {
x -= 0.1*sin(camera.ry)*cos(camera.rx);
y -= 0.1*sin(camera.ry)*sin(camera.rx);
z -= 0.1*cos(camera.ry);
}
glClear(GL_COLOR_BUFFER_BIT);
kmMat4Translation(&transform, x, y, z);
kmMat4Multiply(&object, &camera.mat, &transform);
kmMat4Multiply(&final, &projection, &object);
glUniformMatrix4fv(shader.mpm, 1, GL_FALSE, final.mat);
...
私はそれをやったことがないので、私はそれをどうするかわからないので、ここでは経験豊富な人々の指針が大好きです!
編集:目的はカメラを向きに合わせて前進させることです。また、私はx
、y
を省略し、単に+にz
を設定した場合、それは完璧に動作します - 0.1 ...そう、世界でX軸は右、Yを指しているものの、それは行列乗算の問題
私はちょうどで移動する必要はありませんカメラに向かって移動したい、とさらに倍(x、y、z)のためにその値を格納します固定量の軸で、私はすでにその細かいことをしています – Whiteclaws
あなたの "ソリューション"は三角形を世界の中心に置き、カメラはその周りを回転するので、私が探しているのは実際にはありません、私はFPカメラ – Whiteclaws
カメラのマトリックスを徐々に変更し、動きと回転を合計しないでください。新しい答えを見てください。 – Rabbid76