过去一个月我一直在为此苦苦挣扎,但我不知道自己做错了什么。我所做的就是尝试向节点添加灯光,使其整体更亮。我必须移动附加的灯吗?请有人帮助我。
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;
});
当我将灯光附加到渲染的模型节点时,我没有看到任何差异。我不明白我做错了什么。
如果您在 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()
}
}