在MakingGamesWithBen教程中进行2D相机转换

时间:2017-10-26 01:44:53

标签: c++ camera 2d-games glm-math

我正在通过MakingGamesWithBen关注高级C ++ / Graphics tutorails,我进入了Camera2D剧集并且让我感到困惑(这里的剧集https://www.youtube.com/watch?v=Rycaqr3tDRA&list=PLSPw4ASQYyymu3PfG9gxywSPghnSMiOAW&index=23)。

我过去曾经做过图形编程,但不久之前它都是3D版本。我了解到转换矩阵必须以一定的顺序应用(相乘),如果我没记错,首先应用旋转,然后缩放,然后平移,然后应用投影矩阵。所以ProjMat * T * S * R.所以基本上,所有的变换都是在世界坐标中完成的,然后转换成屏幕坐标。

然而,在我现在关注的教程中,它是以这种方式完成的:

glm::vec3 translate(-m_position.x + m_screenWidth / 2, -m_position.y + m_screenHeight / 2, 0.0f);
m_cameraMatrix = glm::translate(m_orthoMatrix, translate);          
glm::vec3 scale(m_scale, m_scale, 0.0f);
m_cameraMatrix = glm::scale(glm::mat4(1.0f), scale) * m_cameraMatrix;

似乎这样做:S *(O * T)。以世界坐标转换,转换为屏幕坐标,然后在屏幕坐标中缩放。 我尝试这样做的方式我觉得它应该工作(P * T * S)并且场景没有出现。 我很困惑这是如何以及为什么这样做。或许我读错了。

翻译中的+ screenWidth / 2和高度部分用于使摄像机居中。 m_orthoMatrix是正常的正交投影矩阵。 M_scale不是缩放(1 /缩放),它也会让我失望。

有人能解释一下这个问题吗?

0 个答案:

没有答案