【问题标题】:Light not shining on all sides of cube in SceneKit iosSceneKit ios中立方体的所有侧面都没有灯光
【发布时间】:2016-07-03 23:44:42
【问题描述】:

我用 SceneKit 制作了一个旋转立方体并将其放置在 (0,0,0) 处。我希望立方体是黄色的,但我不想把立方体染成黄色。相反,我想要一束黄光照射在旋转的立方体上。我的问题是立方体只有两个面是黄色的,其他 4 个面是黑色的,即使立方体面是面对光线的。谁能告诉我我做错了什么。

这是我创建立方体的代码

SCNBox *myBox = [SCNBox boxWithWidth:8 height:8 length:8 chamferRadius:0];
SCNNode *myBoxNode = [SCNNode nodeWithGeometry:myBox];
myBoxNode.position = SCNVector3Make(0, 0, 0);
[scene.rootNode addChildNode:myBoxNode]

这是灯的代码

SCNLight *light = [SCNLight light];
light.color = [UIColor yellowColor];
light.type = SCNLightTypeOmni;
SCNNode *lightNode = [SCNNode node];
lightNode.light = light;
lightNode.position = SCNVector3Make(0, 10, 10);
[scene.rootNode addChildNode:lightNode];

编辑:

好的,我找到了问题,但没有解决方案。当立方体旋转时,实际上不是立方体在移动而是相机在移动,并且光线固定照射在正面。因此,由于实际的立方体没有移动,其他 4 个面不会暴露在光线下。那么如何才能将灯光与相机一起移动呢?或者如果有任何其他解决方案。

【问题讨论】:

    标签: ios objective-c scenekit


    【解决方案1】:

    要随相机移动灯光,您需要将灯光添加到与相机相同的节点(作为子节点,或直接通过设置light 属性)。

    如果您使用默认摄像头(即您没有在代码中明确设置摄像头),您可以通过SCNView (Apple Developer Reference) 的pointOfView 属性访问其节点。

    【讨论】:

    • 我已经按照你说的使用默认相机完成了,它可以工作。但是,灯光类型是SCNLightTypeAmbient,它与我的代码无关,它将类型设置为SCNLightTypeDirectional。你知道这里发生了什么吗?谢谢。
    • 我尝试使用默认的 SceneKit 模板重现该问题,实际上,没有应用灯光。如果 autoenablesDefaultLighting 标志被禁用,SceneKit 似乎会退回到环境光。
    • 是的。我最终想通了。但如果你启用它,光线将始终来自相机的视角,并且会有一些标准的阴影。
    • 将光添加到pointOfView 的子节点也不能解决问题......也许是一个错误?我相信这里的默认相机控件主要用于调试,因此最安全的解决方案可能是设置您自己的相机,但您必须直接处理用户交互...请注意,定向光方向不依赖于节点位置,它在世界空间中是绝对的,因此根据文档,在这种情况下光照不会跟随相机。
    • 没错——我只是说效果是一样的(在我的情况下,不确定它是否可以概括),至少对我来说这是一种更简单的思考方式
    猜你喜欢
    • 2020-04-01
    • 1970-01-01
    • 2016-02-16
    • 2014-11-30
    • 2015-03-19
    • 2011-09-17
    • 1970-01-01
    • 2020-09-29
    • 2013-06-29
    相关资源
    最近更新 更多