如何使用关键事件来翻译 OpenGL 中的对象?
How to use key events to translate object in OpenGL?
我正在尝试让按键移动对象。我有一个模型视图投影矩阵,我正在我的顶点着色器中应用于我的对象。但是,我不明白我是如何在按键时应用转换的。我认为我必须更新 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' 键没有任何反应。为什么是这样?我要如何更新发送到顶点着色器的变换矩阵?谢谢。
有两种选择:
更改mvp后必须调用glutPostRedisplay。该指令强制调用显示函数并重绘场景,否则只有在最小化和恢复 window.
时才会调用它
您在glutCreateWindow之前注册了键盘函数。所以函数没有注册,因为你还没有创建 OpenGL Window.
我正在尝试让按键移动对象。我有一个模型视图投影矩阵,我正在我的顶点着色器中应用于我的对象。但是,我不明白我是如何在按键时应用转换的。我认为我必须更新 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' 键没有任何反应。为什么是这样?我要如何更新发送到顶点着色器的变换矩阵?谢谢。
有两种选择:
更改mvp后必须调用glutPostRedisplay。该指令强制调用显示函数并重绘场景,否则只有在最小化和恢复 window.
时才会调用它
您在glutCreateWindow之前注册了键盘函数。所以函数没有注册,因为你还没有创建 OpenGL Window.