标签: scncamera

ARKit – 如何显示来自放置在 SCNPlane 上的虚拟 SCNCamera 的源?

我使用 ARKit 和 SceneKit 将一些对象放入 AR 空间中。效果很好。现在我想添加一个额外的摄像机 (SCNCamera),该摄像机放置在场景中的其他位置,由公共 SCNNode 连接和定位。它旨在从另一个(固定)角度向我展示当前场景。

现在我想在 i.Ex 上展示这个额外的 SCNCamera feed。SCNPlane(作为漫反射第一种材质)- 就像电视屏幕一样。当然,我知道它只会显示位于相机焦点中的 SceneKit 内容,而不显示 ARKit 图像的其余部分(当然这只能由主相机实现)。那么简单的彩色背景就可以了。

我看过描述如何在 ARSpace 中的虚拟显示器上播放视频文件的教程,但我需要来自我自己当前场景的实时摄像机反馈。

我定义了这个对象:

let camera = SCNCamera()
let cameraNode = SCNNode()
Run Code Online (Sandbox Code Playgroud)

然后在 viewDidLoad 中我这样做:

camera.usesOrthographicProjection = true
camera.orthographicScale = 9
camera.zNear = 0
camera.zFar = 100
cameraNode.camera = camera
sceneView.scene.rootNode.addChildNode(cameraNode)
Run Code Online (Sandbox Code Playgroud)

然后我调用我的设置函数,将虚拟显示器放置在所有 AR 东西旁边,同时定位相机节点(指向对象在场景中停留的方向)

cameraNode.position = SCNVector3(initialStartPosition.x, initialStartPosition.y + 0.5, initialStartPosition.z)

let cameraPlane = SCNNode(geometry: SCNPlane(width: 0.5, height: 0.3))
cameraPlane.geometry?.firstMaterial?.diffuse.contents = cameraNode.camera
cameraPlane.position = SCNVector3(initialStartPosition.x - 1.0, initialStartPosition.y + 0.5, …
Run Code Online (Sandbox Code Playgroud)

augmented-reality scenekit swift scncamera arkit

6
推荐指数
2
解决办法
2116
查看次数

iOS:如何在SceneKit中模拟默认的相机控件?

下面的代码旨在模拟SceneKit中的默认相机控件,尤其是缩放和旋转功能。

但是,该代码不像默认控件那样流畅和通用。

例如,如果您加载了这两个模型,则默认缩放对这两个模型均一致。下面的代码仅适用于模型1,但对于模型2的缩放速度过快。

任何帮助,将不胜感激。

模式1:https//poly.google.com/view/6mRHqTCZHxw

模式2:https//poly.google.com/view/cKryD9VnDEZ

    // Create camera
    let camera = SCNCamera()
    camera.automaticallyAdjustsZRange = true
    camera.xFov = 30 
    camera.yFov = 0

    // Compute distance to place camera
    let theta = GLKMathDegreesToRadians(Float(camera.xFov/2))
    let adjacentLength = oppositeLength / Float(tan(theta))

    // Add camera to <cameraNode>
    cameraNode.camera = camera
    cameraNode.position = SCNVector3(x: 0, y: 0, z: adjacentLength)

    // Add <cameraNode> to <orbitNode>
    orbitNode.addChildNode(cameraNode)

    // Add <orbitNode>
    scene.rootNode.addChildNode(orbitNode)

    // Handle pinches
    let pinchRecognizer = UIPinchGestureRecognizer(target: self, action: #selector(didSceneViewPinch)) …
Run Code Online (Sandbox Code Playgroud)

3d uigesturerecognizer scenekit scnnode scncamera

5
推荐指数
1
解决办法
638
查看次数

在 SceneKit 中设置相机的视角

如何设置 2d 视图的 SceneKit SCNCamera属性,例如:

- top view
- bottom view
- front view
- back view
- left side view
- right side view
Run Code Online (Sandbox Code Playgroud)

camera scenekit scnscene scncamera

5
推荐指数
1
解决办法
2880
查看次数

纠正SCNCamera的"视野"

我试图找出ipad和iphone上场景工具包中视野的正确值.默认值60 degree对屏幕边缘的球体有不良影响.球体呈椭圆形.值34 degree使得天空盒变得像素化.iPad和iPhone的正确值是多少?

_cameraNode = [SCNNode node];
_cameraNode.position = SCNVector3Make(0, 0, 500);

[scene.rootNode addChildNode:_cameraNode];

_cameraNode.camera = [SCNCamera camera];
_cameraNode.camera.automaticallyAdjustsZRange = YES;

#if TARGET_OS_IPHONE
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    _cameraNode.camera.yFov = 55;

} else #endif {
    _cameraNode.camera.xFov = 34;
}

scnView.pointOfView = _cameraNode;
Run Code Online (Sandbox Code Playgroud)

camera ios scenekit scncamera

2
推荐指数
1
解决办法
2041
查看次数

如何平滑地更改不会动画的 SCNCamera 的 FoV?

我有一个 SCNCamera 在 iOS 上的 3D SceneKit 视图中工作。

当我更改屏幕方向时,为了保持世界对象的大小和相对位置相同,我需要更改 SCNCamera 的 FoV。

但是,我无法为这种变化设置动画,因此当 FoV 从一种设置更改为另一种设置时,世界会“闪烁”或“脉冲”。

有没有一种方法可以顺利地做到这一点,以便视场的变化不会太突然而导致世界上的物体“脉动”?

当设备改变方向时,将执行以下代码:

if UIDevice.current.orientation == .landscapeLeft || UIDevice.current.orientation == .landscapeRight
{
    self.cameraNode?.camera?.fieldOfView  = 38
}
else
{
    self.cameraNode?.camera?.fieldOfView  = 50
}
Run Code Online (Sandbox Code Playgroud)

我尝试将 FoV 更改包装在 UIView 动画块中,但这不起作用。

我尝试在线程上运行它,但会有延迟,但这仍然会导致视场变化时的视觉“脉冲”。

有什么办法可以让这个过渡顺利吗?

animation orientation scenekit swift scncamera

1
推荐指数
1
解决办法
589
查看次数