当我将灯光附加到节点时,我是否必须移动灯光的位置?因为我根本看不到光

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

过去一个月我一直在为此苦苦挣扎,但我不知道自己做错了什么。我所做的就是尝试向节点添加灯光,使其整体更亮。我必须移动附加的灯吗?请有人帮助我。

ModelRenderable.builder()
                .setSource(
                        this,
                        Uri.parse("squarecard.sfb")
                )
                .build()
                .thenAccept(
                        modelRenderable -> {

                            Light spotLightYellow =
                                    Light.builder(Light.Type.FOCUSED_SPOTLIGHT)
                                            .setColor(new Color(android.graphics.Color.YELLOW))
                                            .setShadowCastingEnabled(true)
                                            .build();
  
                            node.setParent(scene);
                            node.setLocalPosition(positionOfNode);
                            node.setLocalScale(new Vector3(1.4f, 1.4f, 1.4f));



                            node.setRenderable(modelRenderable);

                            node.setLight(spotLightYellow);
                        })
                .exceptionally(
                        throwable -> {
                            Toast toast =
                                    Toast.makeText(this, "Unable to load Fox renderable" + throwable, Toast.LENGTH_LONG);
                            toast.setGravity(Gravity.CENTER, 0, 0);
                            toast.show();
                            return null;
                      });

当我将灯光附加到渲染的模型节点时,我没有看到任何差异。我不明白我做错了什么。

android arcore sceneform sceneview
1个回答
0
投票

如果您在 Sceneform 中使用

spot
point
光,那么答案是:是的,如果光线在模型表面上不可见,您需要更改 Light 节点的 position。如果您使用的是
directional
灯,那么您只需调整其方向(阳光的位置并不重要)。

但是...

不要沿 +Y 轴移动点(保留 Y=

0.0f
),因为它会消失(看起来像一个伟大的老 bug...)。

这是测试代码:

private fun addModelToScene(fragment: ArFragment, anchor: Anchor) {
    val scene = fragment.arSceneView.scene

    val light = Light
        .builder(Light.Type.FOCUSED_SPOTLIGHT)
        .setColor(Color(android.graphics.Color.YELLOW))
        .setIntensity(7500f)
        .setInnerConeAngle(0.72f)
        .setOuterConeAngle(0.87f)
        .build()

        val spotNode = Node()
        spotNode.light = light
        spotNode.worldRotation = Quaternion(0f,0f,0f,0f)    // normalized xyzw
        spotNode.worldPosition = Vector3(-0.1f, 0.0f, 0.5f)
        spotNode.setParent(scene)

        MaterialFactory.makeOpaqueWithColor(arFragment.context, Color(1f,1f,1f))
            .thenAccept {
                val sphere = ShapeFactory.makeSphere(0.2f, Vector3.zero(), it)
                val anchorNode = AnchorNode(anchor)
                anchorNode.localScale = Vector3.one().scaled(0.75f)
                scene.addChild(anchorNode)

                val modelNode = TransformableNode(fragment.transformationSystem)
                modelNode.renderable = sphere
                modelNode.setParent(anchorNode)
                modelNode.select()
            }
    }
© www.soinside.com 2019 - 2024. All rights reserved.