java - 了解 libGDX 投影矩阵

标签 java android camera libgdx projection-matrix

在过去的几周里,我一直在尝试学习 libGDX 库。我发现很难理解相机/视口(viewport)关系系统,尤其是在我第一次尝试游戏开发时。我被告知要使用的一行代码以及 API 提到的代码是:

    batch.setProjectionMatrix(camera.combined);

尽管进行了 4 个小时的研究,但我仍然对这段代码的功能缺乏完整的了解。据我的基本理解,它“告诉”相机正在寻找的批处理。我缺乏理解力令人沮丧和愤怒,如果有人能帮助我,我将不胜感激。代码 fragment 的另一个问题是我不确定何时需要实现(在渲染方法、创建方法等中)。

最佳答案

考虑用相机拍照。例如。使用您的智能手机相机拍摄公园长凳的照片。当你这样做时,你会在智能手机的屏幕上看到公园里的长椅。这可能看起来很明显,但让我们看看这涉及到什么。

图片上长凳的位置是相对于您拍照时站立的位置。换句话说,它是相对于相机而言的。在典型的游戏中,您不会相对于对象放置对象。相反,您将它们放置在您的游戏世界中。在您的游戏世界和您的相机之间进行转换是使用矩阵完成的(这只是一种转换坐标的数学方法)。例如。当您将相机向右移动时,长凳会在照片上向左移动。这称为 View 矩阵。

图片上长凳的确切位置还取决于长凳和相机之间的距离。至少,它是 3D 的(2D 非常相似,所以请继续阅读)。当它更远时,它更小,当它靠近相机时,它更大。这称为透视投影。您还可以进行正交投影,在这种情况下,对象的大小不会根据与相机的距离而改变。无论哪种方式,公园长凳的位置和大小都会转换为屏幕上的位置和大小(以像素为单位)。例如。公园里的长凳是两米宽,而照片上是 380 像素。这称为投影矩阵。

camera.combined 表示组合的 View 和投影矩阵。换句话说:它描述了游戏世界中的事物应该在屏幕上渲染的位置。

调用 batch.setProjectionMatrix(cam.combined); 指示批处理使用该组合矩阵。每当值更改时,您都应该调用它。这通常是在调用 resize 时以及在您移动或以其他方式改变相机时。

如果您不确定,那么您可以在 render 方法的开头调用它。

关于java - 了解 libGDX 投影矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33703663/

相关文章:

java - 对焦后Android相机拍照失败

android - 拍照卡在 Android 2.3.3 上

java - 使用 amazon 登录并访问 S3、EC2 等 aws 资源

java - 使用通用 Set 接口(interface)时指定 HashSet 的类型有什么用?

java - Android ListView - 来自 Array[JSON] 的项目

java - Android 不从网站获取数据到 ArrayList

java - 安卓项目: Conversion to Dalvik format failed with error 1

java - 滑动窗口 : Implementation and Performance (Java)

java - 致命异常 : main (School Project)

android - 我的 Android 相机 Uri 返回一个空值,但三星修复程序已经到位,帮助?