【发布时间】:2021-06-04 01:49:24
【问题描述】:
我有一个遗留的 Apple 示例,我正在使用现代语法重写(示例是使用带有 Objective C++ 的 Metal)。它做了很多缩写,我试图解码他们对矩阵所做的事情,这相当困难。部分问题是我不知道他们是否使用 [row][column] 读取矩阵,如 x,y 或 [column],[row]。
我正在查看有关使用矩阵的 Apple 文档,但没有看到他们在示例中使用的下标类型。文档表明它是 [column],[row]。 https://developer.apple.com/documentation/accelerate/working_with_matrices
uint2 position = uint2(0,0);
matrix_float3x3 cameraIntrinsicsInversed = ...;
const float depth = 10.0f;
const float xrw = (position.x - cameraIntrinsics[2][0]) * depth / cameraIntrinsics[0][0];
const float yrw = (position.y - cameraIntrinsics[2][1]) * depth / cameraIntrinsics[1][1];
pointCloud[index].position = simd_float3(xrw, yrw, depth);
// later, in the vertex shader:
const auto position = pointCloud[index].position;
float4 projectedPosition = viewProjectionMatrix * float4(position, 1.0);
如果我想要特定的行和列元素,如何使用下标正确访问 3x3 矩阵的元素?
我试过了:
// Cannot initialize a variable of type 'const float' with an lvalue of type 'const vec<float, 3>' (vector of 3 'float' values)
const float tx = cameraIntrinsics[2, 0];
const float ty = cameraIntrinsics[2, 1];
//again, I'm not sure if I'm getting a column or row here
const float tx = cameraIntrinsics.columns[2][0];
const float ty = cameraIntrinsics.columns[2][1];
var matrix = matrix_identity_float3x3
matrix[2, 0] = tx // this is swift syntax
【问题讨论】:
标签: matrix swift5 metal ios14 compute-shader