转换 GLKMatrix4 和 CATransform3D

2023-11-23

有没有办法从 CATransform3D 转换为 GLKMatrix4,或者我总是需要手动将它们从值转换为值? 我想铸造会更快。


不幸的是目前还没有。 Apple 很可能使用隐藏的 API 调用来通过 CALayers 和 OpenGL 进行转换,但目前以下是您最好的选择。我只会创建一个包含此内容的实用程序类。

    - (GLKMatrix4)matrixFrom3DTransformation:(CATransform3D)transform
{
    GLKMatrix4 matrix = GLKMatrix4Make(transform.m11, transform.m12, transform.m13, transform.m14,
                                       transform.m21, transform.m22, transform.m23, transform.m24,
                                       transform.m31, transform.m32, transform.m33, transform.m34,
                                       transform.m41, transform.m42, transform.m43, transform.m44);

    return matrix;
}

使用类似的东西

CALayer *layer = [CALayer layer];
CATransform3D transform = layer.transform;
GLKMatrix4 matrix4 = *(GLKMatrix4 *)&transform;

称为类型双关。除非您了解其工作原理,否则不应使用它。您无法将 CATransform3D 键入双关语到 GLKMatrix4,因为它们的数据结构在内存中不同。

参考链接:类型双关语

GLK矩阵4

union _GLKMatrix4
   {
      struct
      {
      float m00, m01, m02, m03;
      float m10, m11, m12, m13;
      float m20, m21, m22, m23;
      float m30, m31, m32, m33;
};
   float m[16];
}
typedef union _GLKMatrix4 GLKMatrix4;

CA变换3D

struct CATransform3D
{
CGFloat m11, m12, m13, m14;
CGFloat m21, m22, m23, m24;
CGFloat m31, m32, m33, m34;
CGFloat m41, m42, m43, m44;
};
typedef struct CATransform3D CATransform3D;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

转换 GLKMatrix4 和 CATransform3D 的相关文章

随机推荐

  • 空感知函数调用运算符

    以同样的方式我们可以有 nullableClassInstance method blah 有办法吗 nullableFunctionInstance blah 换句话说 是否存在一个运算符来检查函数实例是否不存在null 如果是这样 请在
  • 地址运算符 (&) 与引用运算符 (&)

    我对这个案例有点困惑 声明一个指针 int b 10 int a b 这里 取 b 的地址 考虑另一个例子 Reference to the calling object can be returned Test Test func Som
  • 长时间处于浮动状态,为什么?

    long b 99 float c 99 0F b c Error Cannot implicitly convert type float to long c b Running Successfully Why 为什么数据类型的大小和隐
  • 在php中正确使用其他类中的类?

    很久以前就应该问别人这个问题了 在另一个类中使用其他类的最佳方法是什么 例如 假设我有一个应用程序类 class Application public function displayVar echo hello world 和一个数据库类
  • 如何匹配 pandas DataFrame 中的多个列以获得“间隔”?

    我有以下熊猫数据框 import pandas as pd df pd DataFrame filename csv print df order start end value 1 1342 1357 category1 1 1459 1
  • 删除列表列中重复的列表元素

    这是我的数据框 pd DataFrame A 1 3 3 4 5 3 3 B 0 2 3 4 5 6 7 C 1 4 4 4 1 4 4 4 3 4 4 5 3 4 4 5 4 4 2 1 1 2 3 4 7 8 9 1 我想要设置 删除每
  • iPhone 应用程序中出现“服务器证书不受信任”错误

    我在用我的 iPhone 应用程序在我的 iPhone 3G OS 3 0 1 上没有任何问题 应用程序连接到 API URL https api server密度 com 1 0 所有请求都会经过它 该应用程序的用户报告说 他们现在突然收
  • 使用 Lucene 增强新文档

    Lucene 是否提供了增强新文档的方法 例如 假设 Lucene 文档包含一个日期字段 是否有可能在用户不改变其查询的情况下 以更高的分数呈现最新的文档 我不想诉诸粗略的 按日期排序 解决方案 因为它将完全取消评分算法 您可以看到 Luc
  • 使用向负无穷大截断与向零截断的优点

    我想知道使用负无穷大截断有哪些好处 Haskell从编程语言 编译器实现的角度来看 Ruby Ruby 而不是向零截断 C PHP 似乎向负无穷大截断是正确的方法 但我还没有找到这种说法的可靠来源 也没有找到这种决定如何影响编译器的实现 我
  • 在手动引导之前使用角度服务

    我想在进行手动引导之前使用角度服务 未使用 ng app 指令 有没有一种方法可以访问角度服务而无需在空 div 上调用 angular bootstrap 以下方法有效 但我想知道是否有更直接的解决方案 var element angul
  • 在 JSP 中使用 if-else

    我使用以下代码在浏览器上打印用户名
  • 是否可以测试 IBAction?

    对 IBOutlet 进行单元测试相当容易 但是 IBActions 怎么样 我试图找到一种方法来做到这一点 但没有运气 有没有办法对视图控制器中的 IBAction 和 nib 文件中的按钮之间的连接进行单元测试 对于完整的单元测试 每个
  • 访问部署在tomcat中的SoapUI Mock Service中的文件资源

    问题简而言之 访问本地file in 脚本调度程序关于项目路径 即def file new File groovyUtils projectPath responseFileName xml 这是工作正常当测试运行时SoapUI as 模拟
  • Python 模拟远程 tail -f?

    我们有几个应用程序服务器和一个中央监控服务器 我们当前正在从监控服务器运行带有 tail f 的 ssh 以从应用程序服务器实时传输多个文本日志文件 除了整个方法的脆弱性之外 问题还在于终止 ssh 进程有时会留下僵尸尾进程 我们已经尝试使
  • 过滤SQLAlchemy查询结果对象的一对多属性

    假设我有几个对象 具有一对多的关系 例如 class Parent id other cols etc children relationship Child backref parent class Child parent id Col
  • CGFloat:round、floor、abs 和 32/64 位精度

    TLDR 如何以编译 32 位和 64 位 CGFloats 且不发出警告的方式调用标准浮点代码 CGFloat 定义为 double 或 float 具体取决于编译器设置和平台 我正在尝试编写在这两种情况下都能正常工作的代码 而不会生成大
  • 为什么 Rust 中字符串的第一个字母大写如此复杂?

    我想将 a 的第一个字母大写 str 这是一个简单的问题 我希望有一个简单的解决方案 直觉告诉我要做这样的事情 let mut s foobar s 0 s 0 to uppercase But strs 不能像这样被索引 我能够做到的唯一
  • java中本地时区与GMT的转换

    我正在尝试将本地时区的日期转换为 GMT 我做了这样的事情 SimpleDateFormat sdf new SimpleDateFormat MM dd yyyy HH mm ss sdf setTimeZone TimeZone get
  • 在eclipse中离线安装sonarlint插件

    我有一些系统 由于安全问题 我们让它们没有互联网 我们如何在eclipse中离线安装sonarlint插件呢 手动安装步骤是什么 我们从哪里下载这个jar 从另一个帖子 下载你的插件 打开Eclipse 从菜单中选择 Help Instal
  • 转换 GLKMatrix4 和 CATransform3D

    有没有办法从 CATransform3D 转换为 GLKMatrix4 或者我总是需要手动将它们从值转换为值 我想铸造会更快 不幸的是目前还没有 Apple 很可能使用隐藏的 API 调用来通过 CALayers 和 OpenGL 进行转换