0

クラス内のいくつかの変数を操作するためのキー入力に問題があります。以下の静的関数は、 GLFW3key_callbackの最新バージョン/サンプルに属します。基本的なカメラ座標を持つレンダリング クラスがありますが、キーが押されたときに更新されるようにカム変数とヨー ピッチ ロール変数を接続する方法がわかりません。

静的関数を Renderer クラスに移動しようとしたり、cam 変数を静的にしようとしたりしましたが、何も機能しませんでした。

Renderer.h

GLfloat camX, camY, camZ, yaw, pitch, roll;

main.cpp

static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
    switch (key)
    {
        case GLFW_KEY_ESCAPE:
            glfwSetWindowShouldClose(window, GL_TRUE); <-- Works
            break;
        case GLFW_KEY_W: camZ += 0.1f; break; <-- What I'm trying to get
        case GLFW_KEY_S: camZ -= 0.1f; break;
        case GLFW_KEY_A: camX += 0.1f; break;
        case GLFW_KEY_D: camX -= 0.1f; break;
        case GLFW_KEY_E: yaw += 0.05f; break;
        case GLFW_KEY_R: yaw -= 0.05f; break;
    }
}

int main()

GLFWwindow* window;
Renderer rend;
....
glfwSetKeyCallback(window, key_callback);
rend.Initialize();
(Main loop)
4

2 に答える 2

0

私はコールバックで同様の問題を抱えており、それを解決できた方法は特にエレガントではありませんでしたが、次のことを行いました(コード名に一致するように翻訳し、コードが正しいと仮定します):

メインと同じファイルに:

static void getKeyInput(GLFWwindow* window, int key, int scancode, int action, int mods)
{
    key_callback(window, key, scancode, action, mods);
}

実際のメイン関数で:

glfwSetKeyCallback(window, Renderer::key_callback);

と取り換える:

glfwSetKeyCallback(window, getKeyInput);

お役に立てれば:)

于 2013-11-03T11:58:07.423 に答える