繁体   English   中英

在Objective C中最有效的矩阵运算方式是什么? GLKit或CC

[英]What's the most memory-efficient way of operating matrices in Objective C? GLKit or CC

我正在通过移植和Android OpenGl应用程序学习Objective C,我遇到了这个问题。

在我的Android应用中,我为每个OpenGL对象都有一个模型矩阵。 每当将变换应用于该对象时,我都会通过乘以traslation,scale和rotation矩阵来重新计算模型矩阵。 我不存储这些矩阵,仅存储结果,因为我需要该应用程序具有更高的内存效率。

当将此代码移植到Obj-C时,我不知道该使用哪个库来执行这些操作。 我考虑过使用GLKMatrix4,但是该库中的每个操作似乎都返回一个新矩阵。

在Android中,这将是一个问题,因为我每次都会发布对矩阵的引用,这实际上会触发GC。

我不知道iOS中的内存管理是否以不需要照顾的方式工作,或者我是否应该使用可重用我拥有的矩阵的另一个库(就像我在Android中使用Matrix.setIdentity( myMatrix))。

在这种情况下,野兽的方法是什么?

正如评论中已经说过的那样,您不必担心GLKMatrix4的内存,因为它是C结构。 如果您难以想象这在Java中将其视为整数( int )。

至于效率和创建新对象,这种方式非常有效,因为如果不创建另一个要在上面写值的堆栈(另一个矩阵缓冲区),就无法进行矩阵乘法,因此实际上仅用2就无法进行操作。值(至少我什么都不知道)。 唯一可以做的优化是,函数中还有另一个参数将接收目标矩阵指针,因此您将丢失16个浮点数的副本。 但是话又说回来,16个浮点数的复制非常快。

如果您对使用此矩阵库有疑问,则可以更轻松地以自己喜欢的方式创建自己的矩阵库。 对于openGL通常使用的工具,应该花费不到一个小时的时间精通C ,其中包括从网上获取方程式的测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM