繁体   English   中英

如何将 sim_float4x4 矩阵放入 swift 中的金属金属缓冲区中?

[英]How do you put a sim_float4x4 matrix into a metal buffer in metal in swift?

嗨,我正在尝试编写一个应用程序,该应用程序将在 Xcode 上的 iOS 中显示简单的 3d 模型,我遇到了一个小问题,但我找不到解决这个问题的解决方案. 我有一个大数组,其中包含 3 维三角形的顶点,我想在金属渲染过程中将其转换为世界空间。 我在网上看到一篇文章,为了告诉金属告诉图形处理器在渲染过程中转换顶点,你需要把这个矩阵放在一个金属缓冲区中,然后告诉渲染进程使用这个缓冲区和其中的矩阵在这行代码中:

renderEncoder.setVertexBuffer(ROTMATRIX, offset: 0, index: 1)

如果“ROTMATRIX”是包含模型旋转矩阵的金属缓冲区的名称。 问题是我不知道如何将矩阵放在这个缓冲区中。 我为 model 构建了一个矩阵,称为 MODMAT,如下所示:

var A = simd_float4(1, 0, 0, 0)
var B = simd_float4(0, 0, 0, 0)
var C = simd_float4(0, 0, 1, 0)
var D = simd_float4(0, 0, 0, 1)

var MODMAT = float4x4([A, B, C, D])

我试图在这行代码中将矩阵 MODMAT 放在 ROTMATRIX 中:

ROTMATRIX.contents().copyMemory(from: MODMAT, byteCount: 64)

但是 Xcode 中的编译器说它“无法将类型'float4x4'(又名'simd_float4x4')的值转换为预期的参数类型'UnsafeRawPointer'”。 所以我需要为它提供指向矩阵 MODMAT 的不安全原始指针。 那么是否可以在 Swift 中创建这种指向矩阵的指针,如果没有,我应该如何以正确的方式修改 ROTMATRIX?

最好的问候西蒙

contents返回一个UnsafeMutableRawPointer 您可以使用storeBytes(of:toByteOffset:as:)storeBytes(of:as:)simd_float4x4存储到此指针。 事实上,您可以使用它来存储任何琐碎的值(基本上,可以逐位复制的值而无需任何引用计数等)类型。

有关UnsafeMutableRawPointercontents ,请参阅文档页面

暂无
暂无

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

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