Android 尝试实现ar core时无法加载Renderable
为什么在尝试创建ar应用程序时出现此错误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应
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();
}
}
有关更多签出我的回购:
嘿!你找到这个问题的解决方案了吗?没有,我没有:(你找到了吗?嘿!你找到这个问题的解决方案了吗?没有,我没有:(你找到了吗?