如何使用键事件在OpenGL中转换对象?

问题描述 投票:0回答:1

我试图让按键移动对象。我有一个要应用于顶点着色器中的对象的模型视图投影矩阵。但是,我不明白按下键时应用转换的含义。我以为我必须更新MVP矩阵,这样mvp = mvp * transMatrix。但是,它什么也没有改变。我的键盘功能如下:

void keyboard(unsigned char key, int x, int y) {
    switch (key) { 
    case 'd':
        mvp = mvp * r;
        break;
    }
}

其中mvp是模型视图投影矩阵,而r是平移矩阵,两者都是全局定义的。 mvp是使用以下代码发送到顶点着色器的矩阵:

GLint uniTrans = glGetUniformLocation(shaderProgramID, "trans");
glUniformMatrix4fv(uniTrans, 1, GL_FALSE, glm::value_ptr(mvp));

但是,此代码实际上不起作用。该对象仍然出现,但是按“ d”键不起作用。为什么是这样?我要如何更新发送到顶点着色器的变换矩阵?谢谢。

c++ opengl glut keyboard-events glm-math
1个回答
0
投票

有两个选项:

  1. 更改mvp后必须调用glutPostRedisplay。该指令将强制调用显示功能并重绘场景,否则仅在最小化并还原窗口后才调用该指令。

  2. 您已经在glutCreateWindow之前注册了键盘功能。由于尚未创建OpenGL窗口,因此未注册功能。

© www.soinside.com 2019 - 2024. All rights reserved.