【发布时间】:2014-09-30 08:34:17
【问题描述】:
我正在使用 C++ / SFML / OpenGL 制作一个 Breakout 游戏,用于学习目的。这是我第一次接触现代 opengl。
我的问题是我不知道如何让桨移动(或者球)。现在,我平移整个视图,使相机移动,但形状保持在原始位置。我一直在关注某些在线教程(主要是 Arcsysnthesis 和 open.gl),但我只是不明白一些东西,所以我想知道是否可以得到反馈。我知道我需要转换桨的位置,目前我正在使用 MVP 矩阵设置。
在我的顶点着色器中
gl_Position = MVP * vec4(position, 1.0);
其中 MVP 是一个统一的 mat4 变量。我使用 glm::perspective 和 glm::lookAt 函数来生成 MVP 的 P * V 部分。最后,当我在 update() 函数中收集键盘输入时,我使用 glm::translate 并生成一个模型。我知道乘法顺序需要是 P*V*M(来自我收集的阅读教程),我使用结果来修改顶点着色器中的统一变量。结果是屏幕/相机平移了位置,但形状显然没有移动。 我想我理解为什么会发生这种情况,但我不知道如何只翻译形状并从本质上控制它们的运动。
编辑 - 下面的评论是正确的 - 我只需要更改我的更新/渲染顺序,因为我对所有形状都使用了相同的变换!
【问题讨论】:
-
通常MVP矩阵的P * V部分是相机的结果,M部分因形状而异。听起来您对所有事物都使用相同的 MVP 矩阵,而每个移动对象都有不同的(M 不同)。
-
我想我明白你的意思了。我有一种感觉,每个形状都需要一个相应的“模型”,因为我的变换正在修改整个屏幕。