我的问题是关于以下场景的设计和可能的建议:
我正在编写一个3d可视化工具。对于我的可渲染对象,我想存储尽可能少的数据(因此四元数自然适合旋转)。
在某些时候,我必须提取一个用于渲染的矩阵,这需要在每次帧更新时进行计算和临时存储(即使对于不在空间上变化的对象)。
鉴于许多物体保持静止并且不需要在本地旋转,是否有意义存储矩阵,从而避免每帧对每个物体的计算?从游戏引擎设计的角度来看,有没有最佳实践方法?
我目前在存储两个极端的位置+四元数或4x3 / 4x4矩阵之间有点不知所措。看看openframeworks(不一定试图实现与我相同的目标),他们似乎做了一个混合,他们存储四元数和矩阵(矩阵总是反映四元数),所以它总是在需要时准备好,但需要随时更新对四元数的每一次改变。
答案 0 :(得分:2)
更紧凑的存储需要3个标量,因此可以使用Euler Angels或Exponential Maps(Rodrigues)。四元数是转换到矩阵速度和紧凑性之间的良好折衷。
从设计的角度来看,有一个很好的规则"尽可能让所有的设计决策和#34;。在您的情况下,只需封装(隔离)旋转(转换)表示,以便将来能够更改不同状态(文件,内存,渲染等)中数据的物理存储。此外,它还支持不同的平台优化,将数据保存在GPU或CPU等等。
答案 1 :(得分:1)
去过那儿。
首先:记住无时无刻的对抗太空的斗争(计算机科学处理时间与内存要求的对比)
你说想要在最初(空间)保持最低限度的信息,然后谈到一些反映出几分之一的临时矩阵,这更令人担忧。
如果您接受提示,我会选择矩阵。它们通常是3D图形的性能明智标准,并且它的大小在对象数据本身旁边变得容易无关紧要。
只是为了拥有和想法:在大多数GPU中,为身份转换矢量(无变化)实际上更快,然后检查它是否需要转换然后什么都不做。
对于引擎,我想不出每帧都不对每个顶点应用变换的引擎。即使物体保持在原位,它们的位置也必须经过投影和查看矩阵。
(这个答案吗?也许我说错了你)