我目前正在尝试创建一个2D游戏,但我有些惊讶的是,我找不到任何针对vec2的旋转、缩放、平移等变换。
例如,据我所知,旋转仅适用于mat4x4,而mat4x4只能与vec4相乘。
这是有什么原因吗?
我希望在CPU上计算我的顶点。
std::vector<glm::mat2> m;
收集所有矩阵,生成顶点,填充GPU缓冲区,然后在一个绘制调用中绘制所有内容。
在glm中应该如何实现这个功能?只需使用mat4,然后忽略z和w分量即可吗?
std::vector<Sprite*> sprites;
for (const auto& : i)
i->init();
// etc...
for (const auto& : i)
i->render();
modelMatrix = glm::rotate(modelMatrix, glm::radians(angle), glm::vec3(0.f, 0.f, 1.f));
关于缩放,需要一个适用的setScale()
函数,它接受两个参数x和y。将z分量设置为1,以防止Sprite在z方向上被缩放。将这些值输入到glm::scale
中,如下所示:
modelMatrix = glm::scale(modelMatrix, glm::vec3(scale));
记住,存储矩阵并没有什么好处,因为它们只是数字;它们不能说明您真正想要做什么。更好的方法是让 Sprite
类封装一个矩阵,这样就清楚了它们代表什么。
不用谢!