哪个选项更实用?覆盖属性缓冲区还是随着变换矩阵移动?
第三周我一直在研究 WebGL,并尝试制作一个用于开发的小型 2D 游戏。是时候为角色添加旋转了,所以我立即决定在矩阵的帮助下进行。之前没有考虑过,但是借助矩阵,也可以做物体平时的运动,我的运动是通过覆盖属性缓冲区来完成的。
如果你还记得,在一些射击游戏中,在游戏开始时,所有角色都站在一个点上,然后他们分散在不同的地方。在我看来,这与我的情况有关,最初,玩家是在一个地方使用属性初始化的,然后在他们的地方由矩阵分布。
哪个选项更实用?覆盖属性缓冲区还是随着变换矩阵移动?
第三周我一直在研究 WebGL,并尝试制作一个用于开发的小型 2D 游戏。是时候为角色添加旋转了,所以我立即决定在矩阵的帮助下进行。之前没有考虑过,但是借助矩阵,也可以做物体平时的运动,我的运动是通过覆盖属性缓冲区来完成的。
如果你还记得,在一些射击游戏中,在游戏开始时,所有角色都站在一个点上,然后他们分散在不同的地方。在我看来,这与我的情况有关,最初,玩家是在一个地方使用属性初始化的,然后在他们的地方由矩阵分布。
经典且正确的方法是使用变换矩阵移动。
手动转换属性(位置)是一种非常低效的方法(每次都覆盖缓冲区)。是的,在您看来,通过 +X +Y 手动移动所有顶点而不是复杂的矩阵乘法更容易,但是您在 CPU 上执行此操作并每次在 GPU 上加载一个新缓冲区,而您的 GPU 可以有用的工作 - 画。同时,GPU上数千甚至数百万个顶点的位置变换几乎是免费的(具有现代显卡能力)。
从 OOP 的角度来看,它也是低效的。您必须有一个对象(角色)及其位置(在关卡上)。这是两个不同的实体,不应将它们合并为一个“角色定位”。
此外,如果您有多个相同的字符,那么您可以从同一个缓冲区中绘制它们,只需传入不同的转换矩阵,而不是为每个字符启动一个唯一的缓冲区。
修改属性(即更改模型本身的几何形状)对于可视化 CPU 计算(例如,如果您有 3D 模型编辑器或物理)是有意义的。
这与本案无关,因为。它只是一个关卡加载组织,构造函数在其中创建与放置器分开的对象。