首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARView对应于SCNView的SCNTechnique?

ARView对应于SCNView的SCNTechnique?
EN

Stack Overflow用户
提问于 2022-02-14 18:51:49
回答 2查看 148关注 0票数 1

我用ARKit做了一个项目,它使用金属着色器来执行镜像效果,这是通过使用sceneView.technique分配的。我试图找出是否有可能将项目转换为使用RealityKit,但找不到RealityKit使用的ARView的任何类似特性。在RealityKit中是否有类似于sceneView.technique的东西可以让我像现在这样简单地分配金属着色器,或者我需要重新设计金属着色器是如何与视图交互的?

我目前的实现是基于这个职位的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-14 21:23:36

关于ARView镜像

ARView 2.0中镜像RealityKit的最简单方法是使用CGAffineTransform 3x3矩阵。

代码语言:javascript
复制
 ┌             ┐
 |  a   b   0  |
 |  c   d   0  |
 |  tx  ty  1  |
 └             ┘

我们需要水平地反射场景(包括视频),所以我们必须使用-1乘法器来实现xScale:

代码语言:javascript
复制
 ┌             ┐
 | -1   0   0  |
 |  0   1   0  |
 |  0   0   1  |
 └             ┘

下面是代码:

代码语言:javascript
复制
arView.transform = .init(a: -1, b: 0, c: 0, d: 1, tx: 0, ty: 0)

关于金属着色器

在RealityKit 2.0中,只有CustomMaterial允许您实现金属的顶点和片段着色器。因此,您可以使用顶点着色器实现许多有趣的效果,包括在X轴上翻转模型。

.swift file

代码语言:javascript
复制
import Metal
import RealityKit

let device = MTLCreateSystemDefaultDevice()
    
guard let defaultLibrary = device!.makeDefaultLibrary()
else { return }
    
let shader = CustomMaterial.SurfaceShader(named: "basicShader",
                                             in: defaultLibrary)
    
let modifier = CustomMaterial.GeometryModifier(named: "basicModifier",
                                                  in: defaultLibrary)
    
box.model?.materials[0] = try! CustomMaterial(surfaceShader: shader, 
                                           geometryModifier: modifier, 
                                              lightingModel: .lit)

.metal file

代码语言:javascript
复制
#include <metal_stdlib>
#include <RealityKit/RealityKit.h>

using namespace metal;
using namespace realitykit;

[[visible]]
void basicShader(realitykit::surface_parameters shader)
{
    surface::surface_properties sf = shader.surface();
    
    sf.set_base_color( half3(1.0f, 0.7f ,0.0f) );
};

[[visible]]
void basicModifier(realitykit::geometry_parameters modifier)
{
    float3 pose = modifier.geometry().model_position();

    // your code...
};

然而,与SCNTechnique对应的RealityKit视图还没有“烤熟”.

票数 1
EN

Stack Overflow用户

发布于 2022-02-18 13:36:19

您可以使用RealityKit 2的PostProcessing API,这将使这个期望的效果很容易实现。

例如,您可以将核心图像过滤器或金属内核函数应用于呈现的场景。有点类似于SCNTechnique。

6&language=objc

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71116897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档