2013-11-03 2 views
0

클래스의 몇 가지 변수를 조작하기 위해 키 입력을받는 데 문제가 있습니다. 아래의 정적 함수 key_callbackGLFW3의 최신 버전/예에 속합니다. 기본 카메라 좌표를 사용하는 렌더링 클래스가 있지만 키를 누를 때 업데이트 할 캠 및 요 - 피치 롤 변수를 연결하는 방법을 파악하는 데 문제가 있습니다.GLFW3의 다른 클래스에서 누른 키 등록

정적 변수를 내 렌더러 클래스로 옮기려고 시도했지만 캠 변수를 정적으로 만들려고했으나 아무 것도 효과가 없었습니다.

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; 
    } 
} 

내 Renderer.h INT 내 주()

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

답변

0

나는 콜백과 비슷한 이슈를 가지고 있었고, 내가 그것을 해결할 수 있었던 방법은 특별히 우아하지 않았다. 그러나 (코드 네임과 일치하고 코드가 맞다고 가정하고) 다음을했다 :

같은 메인으로 파일 :

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

을 실제 주요 기능에 :

glfwSetKeyCallback(window, getKeyInput); 
:

glfwSetKeyCallback(window, Renderer::key_callback); 

로 대체

호프가 도움이 되었으면 좋겠다.

0

나는 그것을하는 한 가지 방법을 생각해 냈지만 (나는 그것이 가장 좋은 방법이라고 생각하지 않는다).

여전히 함수가 main.cpp 인 경우 카메라의 x, y, z, yaw, pitch, roll에 대한 기본 getter 및 setter와 함께 별도의 Camera 클래스를 만들었습니다.

거기에서 그래서

(나는 밖에서 내 렌더러 클래스를 사용할 수 없기 때문에 INT() 주), 내가 이런 짓을 :

(includes)... 
Camera cam; 

static void getKeyInput(GLFWwindow* window, int key, int scancode, int action, int mods) 
{ 
    GLfloat delta = 0.0f; 
    switch (key) 
    { 
    case GLFW_KEY_ESCAPE: 
     glfwSetWindowShouldClose(window, GL_TRUE); 
     break; 
    case GLFW_KEY_W: 
     delta = cam.getZ(); 
     delta += 0.1f; 
     cam.setZ(delta); 
     break; 
    .... 

int main() 
{ 
    GLFWwindow* window; 
    Renderer rend; 
    ... 
    glfwSetKeyCallback(window, key_callback); 

그런 다음 메인 루프에서 내가 오버로드 할 수있는 렌더링 기능을 변경 :

rend.Render(cam.getX(), cam.getZ(), cam.getYaw()); 

키가 작동하지만 키가 처음으로 눌려지면 움직임이 순간적이지 않다는 유일한 문제가 있습니다.

관련 문제