美文网首页
Metal之矩阵转换

Metal之矩阵转换

作者: loongod | 来源:发表于2021-03-25 10:26 被阅读0次

ARSession中模型坐标转换到MetalShader坐标

vertex ColorInOut anchorGeometryVertexTransform(uint vid [[vertex_id]],
                                                constant ParticleUniforms *particleUniforms [[buffer(0)]],
                                                constant SharedUniforms &sharedUniforms [[buffer(kBufferIndexSharedUniforms)]]) {
    const auto particleData = particleUniforms[vid];
    float3 pos = particleData.position;
    float4 position = float4(pos, 1.0);

    float4x4 modelMatrix = particleData.modelMatrix;
    float4x4 viewMatrix = sharedUniforms.viewMatrix;
    float4x4 projectionMatrix = sharedUniforms.projectionMatrix;
    
    float4 nePosition = projectionMatrix * viewMatrix * modelMatrix * position;

    ColorInOut out;
    out.position = nePosition;
    out.pointSize = 10;
    return out;
}

projectionMatrix * viewMatrix * modelMatrix * position

  • projectionMatrix: matrix_float4x4 相机到投影3D坐标系转换矩阵
  • viewMatrix: matrix_float4x4 世界到相机视图坐标系转换矩阵
  • modelMatrix: matrix_float4x4 模型到世界坐标系转换矩阵
  • position: float4 模型的本地空间坐标

提示
modelMatrix * position 会得到模型的世界坐标系,如果你的postion本来就是世界坐标系,那就不用再 矩乘modelMatix 了。

metal-matrix.png

1. projectionMatrix

frame.camera.projectionMatrix(for: .landscapeRight, viewportSize: viewportSize, zNear: 0.001, zFar: 0)

使用指定的参数返回适合渲染3D内容以匹配相机捕获的图像的转换矩阵

此方法对ARKit无效,并且zNearzFar参数与ARKit相机状态没有关系。 取而代之的是,此方法使用这些参数以及相机的状态来构造投影矩阵,以供您自己的渲染代码使用。

2. viewMatrix

  frame.camera.viewMatrix(for: .landscapeRight)

用于从世界空间转换为摄影机空间的转换矩阵

此方法对ARKit没有影响。 取而代之的是,此方法使用orientation参数和相机的状态为您自己的渲染代码构造视图矩阵。

3. modelMatrix

  let anchor = frame.anchors.first
  modelMatrix = anchor.transform

一个矩阵,该矩阵对锚点相对于放置该锚点的AR会话的世界坐标空间的位置、方向和比例进行编码。

ARKit中的世界坐标空间始终遵循惯用右手的惯例,但其方向基于会话配置。

如果需要转成左手坐标系,可以这样:

  var coordinateSpaceTransform = matrix_identity_float4x4
  coordinateSpaceTransform.columns.2.z = -1.0
  let modelMatrix = simd_mul(anchor.transform, coordinateSpaceTransform)

4. position

模型的本地坐标

相关文章

  • Metal之矩阵转换

    ARSession中模型坐标转换到Metal的Shader坐标 projectionMatrix * viewMa...

  • 线性回归

    提出背景 房屋房价预测 术语转换 矩阵表示 将上房屋特征 和房价 矩阵化 将上式 转换为矩阵乘 为什么要这么转换呢...

  • Metal Shadeing Language(2)

    三.Metal的数据类型 Metal的数据类型包含表示向量和矩阵的类型,原子数据类型,缓存,纹理,采样器,数组,自...

  • Metal Shader language总结

    Metal语言的限制 Metal中不支持C++11.0的如下特性: Lambda表达式 递归函数调用 动态转换操作...

  • 构建邻接矩阵

    构建邻接矩阵 net = spconvert(linklist);%把外部数据转换为稀疏矩阵 稀疏矩阵 对于矩阵 ...

  • 【Metal】在GPU上执行计算(I)

    下载 概述 在此示例中,您将学习所有Metal应用程序中使用的基本任务: 将用C编写简单的函数转换为Metal S...

  • 线性代数,矩阵交换律

    #定律: * 对于矩阵表示,__(括号)__ 可以在矩阵中任意位置做绑定 * 举例: 方程组 $转换为矩阵(A x...

  • NumPy学习

    矩阵操作 基本操作 向量 类型 取值 判断 矩阵 维度 求值 比较 特定赋值 类型转换 求最值 矩阵操作 生成序列...

  • Metal每日分享,3x3矩阵卷积滤镜效果

    本案例的目的是理解如何用Metal实现3x3卷积矩阵效果滤镜,取像素点周边九个区域半径点像素rgb值进行矩阵运算获...

  • 867. Transpose Matrix

    矩阵转换,注意下标索引的正确映射。

网友评论

      本文标题:Metal之矩阵转换

      本文链接:https://www.haomeiwen.com/subject/ehychltx.html