SK3DNODE显示SCNScene比Scnview

问题描述 投票:0回答:1

在我生气之前,我想在这里询问以下问题。
我在Swiftui中写了一个iOS测试应用,该应用显示了一个
SpriteView
和一个。 
SceneView
(除其他外)显示了两个节点,这些节点从不同的相机位置显示一个和相同的节点。 
SpriteView
渲染非常相同。
问题是,两个SK3Dnode中的渲染场景都比场景视图中的黑暗显示。
SpriteKit中的场景是无法使用的,因为它们太黑了。
这是iPad模拟器的屏幕截图:

I期望两个(在上半部)都以与

SK3DNode

(下半部分)相同的亮度呈现场景。

如果我只是增加了环境光,则显示对象太亮了。

我认为问题是纹理或材料,但是问题也出现在颜色上。因此,红色/绿色/蓝色形状。 我已经通过将

SCNScene

设置为SceneViewScreenshot in simulator来禁用SCNScene

的内置照明。某种程度上,必须添加自己的照明,但我无法弄清楚如何。场景的

SK3DNode

仅在.scn文件中显示我的节点。
我已经在场景文件中删除了环境
,因此没有Sky Cube。有一个环境光源,一个斑点和一个Omni灯。我使用哪个灯,两个都不是
SceneView

SK3DNode

仍然比autoenablesDefaultLighting

false
在此创建两个
SceneView
S的函数:
SCNView
旁注:相机lookat约束似乎也无法正常工作。
编码将节点添加到场景中:

rootNode

full项目来源:Https://github.com/biochill/test-spritekit

IT包括SpriteKit场景文件和SceneKit文件。以编程方式添加
SK3DNode
。我无法粘贴场景代码,因为我已经为SpriteKit和Scenekit创建了场景文件。最好如果您下载GitHub项目并在某些iPad Simulator中击中Xcode中的CMD+R。

感谢您提前任何帮助。

我所做的就是制作两个场景(屏幕的嵌入式和下部
SceneView

)看起来相同:

可启用:

(您还可以手动添加照明,然后将

SK3DNode
设置为
func make3DNode(camPos: SCNVector3) -> SK3DNode { // Add SceneKit scene in 3D node let node3d = SK3DNode(viewportSize: CGSize(width: 300, height: 200)) node3d.scnScene = scnScene node3d.autoenablesDefaultLighting = false let camera = SCNCamera() let cameraNode = SCNNode() cameraNode.camera = camera if let lookAtTarget = scnScene.rootNode.childNode(withName: "red_texture", recursively: false) { let constraint = SCNLookAtConstraint(target: lookAtTarget) // why does this not work? cameraNode.constraints = [constraint] } cameraNode.position = camPos node3d.pointOfView = cameraNode return node3d }

文件:

ContentView.swift

    // Add SceneKit nodes
    let node3d_1 = make3DNode(camPos: SCNVector3(x: -5, y: -2, z: 14))
    node3d_1.name = "3d_1"
    node3d_1.position = CGPoint(x: 150, y: 110)
    spriteScene.addChild(node3d_1)

    let node3d_2 = make3DNode(camPos: SCNVector3(x: 5, y: 2, z: 14))
    node3d_2.name = "3d_2"
    node3d_2.position = CGPoint(x: 150, y: -110)
    spriteScene.addChild(node3d_2)

我还重新启用了代码线:

SK3DNode

ios scenekit skview scnview
1个回答
0
投票

文件:

Mysceneview.swift
SpriteKit

最重要的部分来到这里,有效地解决了我的测试中的问题。 您需要在项目中添加有效的文件。

添加此内容:
SceneKit

autoenablesDefaultLighting

注:您不会在此处看到此设置:


这就是我的iPad mini上的样子:


further调整:如前所述,您可以手动管理照明。
我希望这可以解决黑暗的场景。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.