如何在 ARCore 中调整对象的大小?
Posted
技术标签:
【中文标题】如何在 ARCore 中调整对象的大小?【英文标题】:How I resize an object in ARCore? 【发布时间】:2019-03-15 03:38:13 【问题描述】:我在 ArFragment 中显示 3D 对象。所以我把 .obj 文件和 .mtl 文件放在 sampledata 文件夹中。然后我右键单击 obj 文件,然后选择 Import Sceneform Asset 以添加 .sfa / .sfb 文件。
所以我可以在标记图像时显示 3d 对象,但是对象太大。
这是我的 .sfa 文件详细信息
bound_relative_root:
x: 0.5,
y: 0,
z: 0.5,
,
materials: [
name: "Material.001",
parameters: [
baseColor: null,
,
baseColorTint: [
0.80000000000000004,
0.80000000000000004,
0.80000000000000004,
1,
],
,
metallic: 1,
,
roughness: 0.120695,
,
opacity: null,
,
],
source: "build/sceneform_sdk/default_materials/obj_material.sfm",
,
],
model:
attributes: [
"Position",
"TexCoord",
"Orientation",
],
collision: ,
file: "sampledata/dongbaek.obj",
name: "dongbaek",
recenter: "root",
scale: 0.200000
,
version: "0.52:1",
我认为它可以按比例部分调整大小,但我改变了值,它并没有改变。大小一样
那么我如何调整 3d 对象的大小?
添加 3d 对象文件以制作 .sfa / .sfb 文件有什么问题吗?(导入 Sceneform 资源)
如果你知道,请帮助我。
【问题讨论】:
可以使用ScaleController
调整scenform arcore中的对象大小
【参考方案1】:
对象缩放由缩放控制器更改。通过设置 minScale 和 maxScale 值。在设置父-锚节点之前。请参阅下面的示例。
// Create the Anchor.
Anchor anchor = hitResult.createAnchor();
AnchorNode anchorNode = new AnchorNode(anchor);
anchorNode.setParent(arFragment.getArSceneView().getScene());
// Create the transformable andy and add it to the anchor.
TransformableNode node = new TransformableNode(arFragment.getTransformationSystem());
// Maxscale must be greater than minscale
node.getScaleController().setMaxScale(0.02f);
node.getScaleController().setMinScale(0.01f);
node.setParent(anchorNode);
node.setRenderable(renderable);
node.select();
【讨论】:
你的答案是正确的,虽然我会补充说 MaxScale 必须大于 MinScale,因为那样你会得到一个例外。【参考方案2】:根据您的项目采用不同的方法:
-
更改比例值,重新生成 sfb 文件
将您的节点放入TransformableNode 并让ScaleController 扩展您的模型
直接使用setLocalScale或setWorldScale
缩放 .obj 文件,然后生成 .sfa 和 .sfb 文件
【讨论】:
【参考方案3】:使用以下代码在 ARCore 中调整模型大小:
TransformationSystem transSys;
transSys = MainActivity.getArFragment().getTransformationSystem();
TransformableNode myNode = new TransformableNode(transSys);
myNode.setLocalScale(new Vector3(0.25f, 0.25f, 0.25f));
myNode.setParent(anchorNode);
//myNode.setParent(sceneView.getScene());
myNode.setRenderable(myModelRenderable);
sceneView.getScene().addChild(node);
myNode.select();
【讨论】:
以上是关于如何在 ARCore 中调整对象的大小?的主要内容,如果未能解决你的问题,请参考以下文章
ARCore – 如何在没有任何特征点的情况下在墙壁等表面上放置/创建对象?