Android 尝试实现ar core时无法加载Renderable

Android 尝试实现ar core时无法加载Renderable,android,android-studio,arcore,Android,Android Studio,Arcore,为什么在尝试创建ar应用程序时出现此错误 Unable to load Renderable registryId='android.resource://com.nevco.ar/raw/cat' java.util.concurrent.CompletionException: java.lang.AssertionError: No RCB file at uri: android.resource://com.nevco.ar/raw/cat 我通过本教程创建了一个简单的ar应

为什么在尝试创建ar应用程序时出现此错误

Unable to load Renderable registryId='android.resource://com.nevco.ar/raw/cat'
    java.util.concurrent.CompletionException: java.lang.AssertionError: No RCB file at uri: android.resource://com.nevco.ar/raw/cat
我通过本教程创建了一个简单的ar应用程序,但每次我启动我的应用程序时都会遇到这个错误。我不知道该怎么解决这个问题。如果能帮上点忙,我将不胜感激。我附加了教程的链接

public类MainActivity扩展了AppCompatActivity{
私有静态最终字符串标记=MainActivity.class.getSimpleName();
私有静态最终double MIN_OPENGL_版本=3.0;
//为ModelRenderable创建成员变量//
私有模型;可渲染的;不可渲染的;
//为ArFragment创建成员变量//
私有ArFragment arCoreFragment;
@RequiresApi(api=VERSION\u code.N)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
如果(!checkDevice((this))){
返回;
}
setContentView(R.layout.activity_main);
arCoreFragment=(ArFragment)
//使用片段管理器查找片段//
getSupportFragmentManager().findFragmentById(R.id.main_片段);
if(Build.VERSION.SDK\u INT>=VERSION\u code.N){
//构建可渲染的模型//
ModelRenderable.builder()
.setSource(此为R.raw.cat)
.build()
.thenAccept(可渲染->可渲染=可渲染)
.例外(
//如果发生错误//
可丢弃->{
//…然后将以下消息打印到Logcat//
Log.e(标记“无法加载可渲染文件”);
返回null;
});
}
//侦听onTap事件//
arCoreFragment.setOnTapArPlaneListener(
(HitResult HitResult、平面、运动事件)->{
如果(dinoRenderable==null){
返回;
}
Anchor Anchor=hitResult.createAnchor();
//构建AnchorNode类型的节点//
锚点节点锚点节点=新锚点节点(锚点);
//将锚点节点连接到场景//
setParent(arCoreFragment.getArSceneView().getScene());
//构建TransformableNode类型的节点//
TransformableNode TransformableNode=新的TransformableNode(arCoreFragment.getTransformationSystem());
//将TransformableNode连接到锚点节点//
transformableNode.setParent(anchorNode);
//附加可渲染的//
transformableNode.setRenderable(dinoRenderable);
//设置节点//
transformableNode.select();
});
}
公共静态布尔检查设备(最终活动){
//如果设备运行的是Android棉花糖或更早版本//
if(Build.VERSION.SDK\u INT
}检查您的模型是.sfb文件还是.obj文件

.sfb对我有效,但我在.obj中遇到了相同的错误。

检查您的模型是.sfb文件还是.obj文件


.sfb对我有效,但我在.obj中得到了相同的错误。

问题是灯丝将其标识为sfb

Include .setIsFilamentGltf(true)

ModelRenderable.builder()
                .setSource(
                        this,
                        Uri.parse(path))
                .setIsFilamentGltf(true)
                .build()
                

问题是灯丝将其识别为sfb

Include .setIsFilamentGltf(true)

ModelRenderable.builder()
                .setSource(
                        this,
                        Uri.parse(path))
                .setIsFilamentGltf(true)
                .build()
                

您必须首先创建一个节点并在其中添加模型的renderable,然后将其附加到arFragment。您只需直接使用可渲染对象,而无需创建节点。这就是你得到的错误。检查以下代码addNodeToScene()方法

请尝试以下代码

package com.example.arcorefirst;

import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.widget.Toast;

import com.google.ar.core.Anchor;
import com.google.ar.core.HitResult;
import com.google.ar.core.Plane;
import com.google.ar.sceneform.AnchorNode;
import com.google.ar.sceneform.rendering.ModelRenderable;
import com.google.ar.sceneform.rendering.Renderable;
import com.google.ar.sceneform.ux.ArFragment;
import com.google.ar.sceneform.ux.TransformableNode;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = MainActivity.class.getSimpleName();
    private static final double MIN_OPENGL_VERSION = 3.0;

    ArFragment arFragment;
    ModelRenderable lampPostRenderable;
    private Uri selectedObject;

    @Override
    @SuppressWarnings({"AndroidApiChecker", "FutureReturnValueIgnored"})
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.ux_fragment);
        arFragment.setOnTapArPlaneListener(
                (HitResult hitresult, Plane plane, MotionEvent motionevent) -> {
                    if (plane.getType() != Plane.Type.HORIZONTAL_UPWARD_FACING)
                        return;

                    Anchor anchor = hitresult.createAnchor();
                    placeObject(arFragment, anchor, R.raw.cube);
                }
        );
    }

    private void placeObject(ArFragment arFragment, Anchor anchor, int uri) {
        ModelRenderable.builder()
            .setSource(arFragment.getContext(), uri)
            .build()
            .thenAccept(modelRenderable -> addNodeToScene(arFragment, anchor, modelRenderable))
            .exceptionally(throwable -> {
                    Toast.makeText(arFragment.getContext(), "Error:" + throwable.getMessage(), Toast.LENGTH_LONG).show();
                    return null;
                }
            );
    }

    private void addNodeToScene(ArFragment arFragment, Anchor anchor, Renderable renderable) {
        AnchorNode anchorNode = new AnchorNode(anchor);
        TransformableNode node = new TransformableNode(arFragment.getTransformationSystem());
        node.setRenderable(renderable);
        node.setParent(anchorNode);
        arFragment.getArSceneView().getScene().addChild(anchorNode);
        node.select();
    }

}
有关更多签出我的回购:


您必须首先创建一个节点,并在其中添加模型的renderable,然后将其附加到arFragment。您只需直接使用可渲染对象,而无需创建节点。这就是你得到的错误。检查以下代码addNodeToScene()方法

请尝试以下代码

package com.example.arcorefirst;

import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.widget.Toast;

import com.google.ar.core.Anchor;
import com.google.ar.core.HitResult;
import com.google.ar.core.Plane;
import com.google.ar.sceneform.AnchorNode;
import com.google.ar.sceneform.rendering.ModelRenderable;
import com.google.ar.sceneform.rendering.Renderable;
import com.google.ar.sceneform.ux.ArFragment;
import com.google.ar.sceneform.ux.TransformableNode;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = MainActivity.class.getSimpleName();
    private static final double MIN_OPENGL_VERSION = 3.0;

    ArFragment arFragment;
    ModelRenderable lampPostRenderable;
    private Uri selectedObject;

    @Override
    @SuppressWarnings({"AndroidApiChecker", "FutureReturnValueIgnored"})
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.ux_fragment);
        arFragment.setOnTapArPlaneListener(
                (HitResult hitresult, Plane plane, MotionEvent motionevent) -> {
                    if (plane.getType() != Plane.Type.HORIZONTAL_UPWARD_FACING)
                        return;

                    Anchor anchor = hitresult.createAnchor();
                    placeObject(arFragment, anchor, R.raw.cube);
                }
        );
    }

    private void placeObject(ArFragment arFragment, Anchor anchor, int uri) {
        ModelRenderable.builder()
            .setSource(arFragment.getContext(), uri)
            .build()
            .thenAccept(modelRenderable -> addNodeToScene(arFragment, anchor, modelRenderable))
            .exceptionally(throwable -> {
                    Toast.makeText(arFragment.getContext(), "Error:" + throwable.getMessage(), Toast.LENGTH_LONG).show();
                    return null;
                }
            );
    }

    private void addNodeToScene(ArFragment arFragment, Anchor anchor, Renderable renderable) {
        AnchorNode anchorNode = new AnchorNode(anchor);
        TransformableNode node = new TransformableNode(arFragment.getTransformationSystem());
        node.setRenderable(renderable);
        node.setParent(anchorNode);
        arFragment.getArSceneView().getScene().addChild(anchorNode);
        node.select();
    }

}
有关更多签出我的回购:


嘿!你找到这个问题的解决方案了吗?没有,我没有:(你找到了吗?嘿!你找到这个问题的解决方案了吗?没有,我没有:(你找到了吗?