我有一个子弹变换,我想让它可以作为glm :: mat3类型访问。
但是,我想知道如果没有复制(如make_mat3x3),是否有办法做到这一点。
答案 0 :(得分:1)
在我浏览 GLM 后,我发现 - 无需修改源代码 - 这是不可能的。
需要复制。
子弹和 GLM 都会通过值缓存矩阵,而不是指针或引用。
对于子弹,请参阅证据:http://bulletphysics.org/Bullet/BulletFull/btMatrix3x3_8h_source.html
对于 GLM ,请参阅示例:https://glm.g-truc.net/0.9.2/api/a00132_source.html。
如果您使用memcpy
可能会更快,但我不确定是否可能
这取决于值的排序方式
(我对 GLM )的了解有限
即使您设法让两个对象驻留在同一地址中, 会有一个难以管理的可怕问题。 (例如双删除)
但是,在您尝试避免复制之前,您是个人资料吗? 真的,复制并不昂贵。
几年前,我因为类似的问题浪费了几个小时 就我而言,我想将 Bullet 的矩阵复制到 Opengl 缓冲区。
尽管如此,在我对其进行分析之后,我发现了这一点 在我的所有游戏原型中,此操作的成本不到整个逻辑的1%。
真的不值得努力。
过早优化是邪恶的根源。