微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AR Core 在基本教程的颤动中不起作用

如何解决AR Core 在基本教程的颤动中不起作用

嗨,我想构建使用 AR Core 的 Flutter 应用程序。这是我的第一个 Flutter 应用和第一个移动应用。

我有来自 Flutter 的示例应用模板

import 'package:Flutter/material.dart';
import 'package:Flutter/services.dart';
import 'package:arcore_Flutter_plugin/arcore_Flutter_plugin.dart';
import 'package:vector_math/vector_math_64.dart' as vector;

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'AR Translator',theme: ThemeData(
        primarySwatch: Colors.blue,visualDensity: VisualDensity.adaptivePlatformDensity,),home: MyHomePage(title: 'AR Translator'),);
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key,this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
...
}

我想添加使用 AR Core 打开新窗口的按钮

ElevatedButton(
              onpressed: () {
                Navigator.push(context,MaterialPageRoute(builder: (context) => LiveTranslate()));
              },child: Text("Live translator"),style: ElevatedButton.styleFrom(
                  minimumSize: Size(250,35),textStyle: TextStyle(
                    fontSize: 20,)),

这个按钮在 Widged build() 中返回 Scaffold 在 body Center 子列中,其中是一个字段 children: <Widget>[...,ElevatedButton(),...]。 我在这tutorial

上写了一个小部件基础
class LiveTranslate extends StatefulWidget {
  LiveTranslate({Key key,this.title}) : super(key: key);
  final String title;

  @override
  _LiveTranslate createState() => _LiveTranslate();
}

class _LiveTranslate extends State<LiveTranslate> {
  ArCoreController arCoreController;

  _onArCoreViewCreated(ArCoreController _arcoreController) {
    arCoreController = _arcoreController;
    _addSphere(arCoreController);
  }

  _addSphere(ArCoreController _arCoreController) {
    final material = ArCoreMaterial(color: Colors.deepOrange);
    final sphere = ArCoreSphere(materials: [material],radius: 0.2);
    final node = ArCoreNode(
      shape: sphere,position: vector.Vector3(0,-1),);

    _arCoreController.addArCoreNode(node);
  }

  @override
  void dispose() {
    arCoreController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Live Translate"),body: ArCoreView(
        onArCoreViewCreated: _onArCoreViewCreated,);
  }
}

但是当我点击按钮时,我得到了一个页面,我在调试控制台中有这个

Launching lib\main.dart on Android SDK built for x86 in debug mode...
 lib\main.dart
√ Built build\app\outputs\Flutter-apk\app-debug.apk.
Connecting to VM Service at ws://127.0.0.1:55289/Rq7xt3Irrow=/ws
D/EGL_emulation(10219): eglMakeCurrent: 0xe6d40600: ver 2 0 (tinfo 0xc7701200)
D/eglCodecCommon(10219): setVertexArrayObject: set vao to 0 (0) 1 0
E/EGL_emulation(10219): tid 10219: eglCreateContext(1478): error 0x3005 (EGL_BAD_CONfig)
E/EGL_emulation(10219): tid 10219: eglGetConfigAttrib(1019): error 0x3005 (EGL_BAD_CONfig)
I/chatty  (10219): uid=10134(com.example.ar_translator) identical 3 lines
E/EGL_emulation(10219): tid 10219: eglGetConfigAttrib(1019): error 0x3005 (EGL_BAD_CONfig)
E/EGL_emulation(10219): tid 10219: eglCreatePbufferSurface(1065): error 0x3005 (EGL_BAD_CONfig)
I/Filament(10219): FEngine (32 bits) created at 0xbf481800 (threading is enabled)
D/Filament(10219): Using ASurfaceTexture
D/Filament(10219): FEngine resolved backend: OpenGL
D/HostConnection(10219): HostConnection::get() New Host Connection established 0xc790cb60,tid 10328
W/Gralloc3(10219): allocator 3.x is not supported
D/HostConnection(10219): HostComposition ext ANDROID_EMU_CHECKSUM_HELPER_v1 ANDROID_EMU_dma_v1 ANDROID_EMU_direct_mem ANDROID_EMU_host_composition_v1 ANDROID_EMU_host_composition_v2 ANDROID_EMU_vulkan ANDROID_EMU_deferred_vulkan_commands ANDROID_EMU_vulkan_null_optional_strings ANDROID_EMU_vulkan_create_resources_with_requirements ANDROID_EMU_YUV420_888_to_NV21 ANDROID_EMU_YUV_Cache ANDROID_EMU_async_unmap_buffer ANDROID_EMU_vulkan_free_memory_sync ANDROID_EMU_vulkan_shader_float16_int8 ANDROID_EMU_vulkan_async_queue_submit GL_OES_vertex_array_object GL_KHR_texture_compression_astc_ldr ANDROID_EMU_host_side_tracing ANDROID_EMU_gles_max_version_2
E/Filament(10219): eglChooseConfig Failed with unkNown
E/Flutter (10219): [ERROR:Flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: PlatformException(error,java.lang.IllegalStateException: Couldn't create Engine
E/Flutter (10219):  at com.google.android.filament.Engine.create(Engine.java:67)
E/Flutter (10219):  at com.google.ar.sceneform.rendering.EngineInstance.createEngine(EngineInstance.java:85)
E/Flutter (10219):  at com.google.ar.sceneform.rendering.EngineInstance.getEngine(EngineInstance.java:39)
E/Flutter (10219):  at com.google.ar.sceneform.rendering.Renderer.initialize(Renderer.java:505)
E/Flutter (10219):  at com.google.ar.sceneform.rendering.Renderer.<init>(Renderer.java:106)
E/Flutter (10219):  at com.google.ar.SceneForm.SceneView.initialize(SourceFile:78)
E/Flutter (10219):  at com.google.ar.SceneForm.SceneView.<init>(SourceFile:10)
E/Flutter (10219):  at com.google.ar.SceneForm.ArSceneView.<init>(SourceFile:1)
E/Flutter (10219):  at com.difrancescogianmarco.arcore_Flutter_plugin.ArCoreView.<init>(ArCoreView.kt:53)
E/Flutter (10219):  at com.difrancescogianmarco.arcore_Flutter_plugin.ArCoreViewFactory.create(ArCoreViewFactory.kt:30)
E/Flutter (10219):  at io.Flutter.plugin.platform.SingleViewPresentation.onCreate(SingleViewPresentation.java:186)
E/Flutter (10219):  at android.app.Dialog.dispatchOnCreate(Dialog.java:421)
E/Flutter (10219):  at android.app.Dialog.show(Dialog.java:315)
E/Flutter (10219):  at android.app.Presentation.show(Presentation.java:250)
E/Flutter (10219):  at io.Flutter.plugin.platform.VirtualdisplayController.<init>(VirtualdisplayController.java:95)
E/Flutter (10219):  at io.Flutter.plugin.platform.VirtualdisplayController.create(VirtualdisplayController.java:48)
E/Flutter (10219):  at io.Flutter.plugin.platform.PlatformViewsController$1.createVirtualdisplayForPlatformView(PlatformViewsController.java:207)
E/Flutter (10219):  at io.Flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.create(PlatformViewsChannel.java:104)
E/Flutter (10219):  at io.Flutter.embedding.engine.systemchannels.PlatformViewsChannel$1.onMethodCall(PlatformViewsChannel.java:59)
E/Flutter (10219):  at io.Flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:233)
E/Flutter (10219):  at io.Flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:85)
E/Flutter (10219):  at io.Flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:692)
E/Flutter (10219):  at android.os.MessageQueue.nativePollOnce(Native Method)
E/Flutter (10219):  at android.os.MessageQueue.next(MessageQueue.java:336)
E/Flutter (10219):  at android.os.Looper.loop(Looper.java:174)
E/Flutter (10219):  at android.app.ActivityThread.main(ActivityThread.java:7356)
E/Flutter (10219):  at java.lang.reflect.Method.invoke(Native Method)
E/Flutter (10219):  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
E/Flutter (10219):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
E/Flutter (10219):,null,null)
[38;5;244mE/Flutter (10219): #0      StandardMethodCodec.decodeEnvelope[39;49m
 package:Flutter/…/services/message_codecs.dart
[38;5;244mE/Flutter (10219): #1      MethodChannel._invokeMethod[39;49m
 package:Flutter/…/services/platform_channel.dart
E/Flutter (10219): <asynchronous suspension>
[38;5;244mE/Flutter (10219): #2      MethodChannel.invokeMethod[39;49m
 package:Flutter/…/services/platform_channel.dart
[38;5;244mE/Flutter (10219): #3      TextureAndroidViewController._sendCreateMessage[39;49m
 package:Flutter/…/services/platform_views.dart
[38;5;244mE/Flutter (10219): #4      AndroidViewController.create[39;49m
 package:Flutter/…/services/platform_views.dart
[38;5;244mE/Flutter (10219): #5      TextureAndroidViewController.create[39;49m
 package:Flutter/…/services/platform_views.dart
[38;5;244mE/Flutter (10219): #6      TextureAndroidViewController.setSize[39;49m
 package:Flutter/…/services/platform_views.dart
[38;5;244mE/Flutter (10219): #7      RenderAndroidView._sizePlatformView[39;49m
 package:Flutter/…/rendering/platform_view.dart
[38;5;244mE/Flutter (10219): #8      RenderAndroidView.performResize[39;49m
 package:Flutter/…/rendering/platform_view.dart
[38;5;244mE/Flutter (10219): #9      RenderObject.layout[39;49m
 package:Flutter/…/rendering/object.dart
[38;5;244mE/Flutter (10219): #10     RenderProxyBoxMixin.performlayout[39;49m
 package:Flutter/…/rendering/proxy_Box.dart
[38;5;244mE/Flutter (10219): #11     RenderObject.layout[39;49m
 package:Flutter/…/rendering/object.dart
[38;5;244mE/Flutter (10219): #12     MultiChildLayoutDelegate.layoutChild[39;49m
 package:Flutter/…/rendering/custom_layout.dart
[38;5;244mE/Flutter (10219): #13     _ScaffoldLayout.performlayout[39;49m
 package:Flutter/…/material/scaffold.dart
[38;5;244mE/Flutter (10219): #14     MultiChildLayoutDelegate._callPerformlayout[39;49m
 package:Flutter/…/rendering/custom_layout.dart
[38;5;244mE/Flutter (10219): #15     RenderCustomMultiChildLayoutBox.performlayout[39;49m
 package:Flutter/…/rendering/custom_layout.dart
E/Flutter (10219): #16     RenderObject.layout (pa

我哪里做错了? 我使用带有网络摄像头的安卓模拟器作为后置摄像头。

解决方法

@MorrisonChang 但是当我使用 VirtualScene 作为相机创建手机模拟器时,我仍然有一些错误并且 AR Cor View 无法正常工作。这是设备描述:

Name: Pixel_4_API_29_2
CPU/ABI: Google Play Intel Atom (x86)
Path: C:\Users\me\.android\avd\Pixel_4_API_29_2.avd
Target: google_apis_playstore [Google Play] (API level 29)
Skin: pixel_4
SD Card: 512M
fastboot.chosenSnapshotFile: 
runtime.network.speed: full
hw.accelerometer: yes
hw.device.name: pixel_4
hw.lcd.width: 1080
hw.initialOrientation: Portrait
image.androidVersion.api: 29
tag.id: google_apis_playstore
hw.mainKeys: no
hw.camera.front: emulated
avd.ini.displayname: Pixel 4 API 29 2
hw.gpu.mode: auto
hw.ramSize: 1536
PlayStore.enabled: true
fastboot.forceColdBoot: no
hw.cpu.ncore: 4
hw.keyboard: yes
hw.sensors.proximity: yes
hw.dPad: no
hw.lcd.height: 2280
vm.heapSize: 256
skin.dynamic: yes
hw.device.manufacturer: Google
hw.gps: yes
hw.audioInput: yes
image.sysdir.1: system-images\android-29\google_apis_playstore\x86\
showDeviceFrame: yes
hw.camera.back: virtualscene
AvdId: Pixel_4_API_29_2
hw.lcd.density: 440
hw.arc: false
hw.device.hash2: MD5:6b5943207fe196d842659d2e43022e20
fastboot.forceChosenSnapshotBoot: no
fastboot.forceFastBoot: yes
hw.trackBall: no
hw.battery: yes
hw.sdCard: yes
tag.display: Google Play
runtime.network.latency: none
disk.dataPartition.size: 6442450944
hw.sensors.orientation: yes
avd.ini.encoding: UTF-8
hw.gpu.enabled: yes

我使用的是 Android 10.0。

编辑。最终解决方案。 我已经使用 android 10.0 在像素 4 上创建了新设备基本。 从附加到虚拟设备的菜单中,我选择 ...(more) 并转到设置>高级,然后在 OpenGL ES API level 部分更改为 Renderer maximum (up to OpenGL ES 3.1). Also when I updated Google Play Services for AR I drag Google_Play_Services_for_AR_1.22.0_x86_for_emulator.apk` 并放入虚拟设备.在此之后它的工作。更重要的是,网络摄像头也可以工作,但太空中的物体不会留在原地。 为什么它开始工作?我不知道。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。