除了GLM、Glad和GLFW之外,我一直在使用OpenGL来创建2D游戏。我想实现简单的2D旋转,大概是沿着Z轴,因为它不会是3D的。问题是,当我创建一个简单的模型矩阵时,使用旋转矩阵乘以平移和膨胀矩阵。当图元被渲染时,旋转变成了3d。2正方形被拉伸,两边不再是相同的长度。3有没有办法避免这种拉伸,使正方形在旋转时保持相同的比例?
顶点着色器:
//shader vertex
# version 430 core
layout(location = 0) in vec3 aPos;
layout(location = 1) in vec2 aTexCoord;
//uniform mat4 transform;
uniform mat4 model;
out vec2 TexCoord;
void main()
{
gl_Position = model * vec4(aPos, 1.0);
TexCoord = aTexCoord;
}
我有一个函数,通过迭代矩阵的向量来处理大批量的对象。首先创建的矩阵等于glm::mat4(1.0f)。
void Trans::moveBatch(std::vector <glm::vec2>& speed, std::vector <float>& rot)
{
for (unsigned int i = 0; i < speed.size(); i++)
{
batchRotator[i] = glm::rotate(batchRotator[i], glm::radians(rot[i]), glm::vec3(0.0f, 0.0f, 1.0f));
batchMover[i] = glm::translate(batchMover[i], glm::vec3(speed[i].x, speed[i].y, 0.0f));
batchBox[i].x += speed[i].x;
batchBox[i].y += speed[i].y;
batchBox[i].z += speed[i].x;
batchBox[i].w += speed[i].y;
}
}
然后,我将矩阵相乘,并将其作为模型矩阵发送到着色器中。
1条答案
按热度按时间zbq4xfa01#
非常感谢!我能够使用glm::ortho来创建一个投影矩阵,这解决了我的问题,当我在1920/1080内制作世界坐标时,因为这是正确的纵横比。