c++ - 如何使用关键事件来翻译 OpenGL 中的对象?

标签 c++ opengl glut keyboard-events glm-math

我正在尝试让按键移动对象。我有一个模型 View 投影矩阵,我正在我的顶点着色器中应用于我的对象。但是,我不明白我是如何在按键时应用转换的。我认为我必须更新 MVP 矩阵,使得 mvp = mvp * transMatrix。但是,它没有任何改变。我的键盘功能如下所示:

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

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

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

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

最佳答案

有两种选择:

  1. 更改 mvp 后必须调用 glutPostRedisplay。该指令强制调用显示函数并重绘场景,否则只有在最小化和恢复窗口时才会调用。

  2. 你在glutCreateWindow之前已经注册了键盘函数。所以这些函数没有注册,因为你还没有创建 OpenGL 窗口。

关于c++ - 如何使用关键事件来翻译 OpenGL 中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58870461/

相关文章:

c++ - 断言 `str' 失败

c++ - 在 Windows 中的顶部 Qt 应用程序

java - 在 OpenGL 中重用纹理和顶点

c++ - 点不会通过 OpenGl 中的键盘输入移动

c++ - vector 迭代器不可解引用

c++ - GLM 从旋转中获取方向?

java - OpenGL 显示错误 - 显示不正确

opengl - OpenGL ES 2.0 和 OpenGL 4 的区别

python - 用 glut 和 python 打印文本

opengl - OpenGL 中的 PNG 格式?