c++ - 如何使用关键事件在 OpenGL 中转换对象?
问题描述
我试图让按键移动对象。我有一个模型视图投影矩阵,我将其应用于顶点着色器中的对象。但是,我不明白我是如何在按键时应用转换的。我认为我必须更新 MVP 矩阵,使得 mvp = mvp * transMatrix。但是,它没有任何改变。我的键盘功能如下所示:
void keyboard(unsigned char key, int x, int y) {
switch (key) {
case 'd':
mvp = mvp * r;
break;
}
}
wheremvp
是模型视图投影矩阵,r
是平移矩阵,两者都是全局定义的。mvp
是我使用以下代码发送到顶点着色器的矩阵:
GLint uniTrans = glGetUniformLocation(shaderProgramID, "trans");
glUniformMatrix4fv(uniTrans, 1, GL_FALSE, glm::value_ptr(mvp));
但是,此代码实际上不起作用。该对象仍然出现,但按“d”键没有任何作用。为什么是这样?我打算如何更新发送到顶点着色器的转换矩阵?谢谢。
解决方案
有两种选择:
更改 mvp 后必须调用 glutPostRedisplay。该指令强制调用显示函数并重绘场景,否则只有在最小化和恢复窗口时才会调用。
您已经在 glutCreateWindow 之前注册了键盘功能。所以函数没有注册,因为你还没有创建 OpenGL 窗口。
推荐阅读
- javascript - 反应电子邮件地址格式验证
- c++ - 在给定模板模板谓词的情况下过滤类型的元组列表
- typescript - 将 React Native 项目中的视图引用与打字稿相关联时出现问题。解决了
- jenkins - 如何在自由式作业中访问管道名称
- python - Excel 文件损坏或错误扩展错误 openpyxl & writerxlsx
- multithreading - 如何在 Powershell 中为函数执行线程化?
- go - 指向特定日志级别的 Logrus 记录器指针
- asp.net - 如何在 CheckBox Click Asp.Net 上重新绑定 FullCalender
- reactjs - 如何在 React 中将本地 GeoJSON 文件与 Mapbox 一起使用
- python - 根据行和列的条件选择行