如何解决AR Core 在基本教程的颤动中不起作用
嗨,我想构建使用 AR Core 的 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 举报,一经查实,本站将立刻删除。