Flutter增强现实功能插件arcore_flutter_plugin的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter增强现实功能插件arcore_flutter_plugin的使用

简介

arcore_flutter_plugin 是一个用于在 Flutter 应用中实现增强现实(AR)功能的插件。它基于 Google 的 ARCore 技术,允许开发者在 Android 设备上创建丰富的 AR 体验。

感谢

感谢 Oleksandr Leuschenko 的灵感和他的宝贵代码:arkit_flutter_plugin

使用方法

配置你的应用

  1. 添加依赖: 在你的 pubspec.yaml 文件中添加 arcore_flutter_plugin 作为依赖:

    dependencies:
      arcore_flutter_plugin: ^0.0.1
    
  2. 启用 ARCore: 按照 官方指南 启用 ARCore。

  3. 添加 Sceneform 库: 在你的 build.gradle 文件中添加 Sceneform 库:

    android {
        // Sceneform 库使用了 Java 8 的语言结构。
        // 如果目标 minSdkVersion < 26,添加这些编译选项。
        compileOptions {
            sourceCompatibility 1.8
            targetCompatibility 1.8
        }
    }
    
    dependencies {
        // 提供 ArFragment 和其他 UX 资源。
        implementation 'com.google.ar.sceneform.ux:sceneform-ux:1.8.0'
    
        // 或者,使用 ArSceneView 而不依赖 UX。
        implementation 'com.google.ar.sceneform:core:1.8.0'
    }
    
  4. 导入 Sceneform 插件(可选): 按照 官方指南 导入 Sceneform 插件。

示例代码

以下是一个简单的示例代码,展示了如何在 Flutter 应用中使用 arcore_flutter_plugin 插件:

import 'package:arcore_flutter_plugin/arcore_flutter_plugin.dart';
import 'package:flutter/material.dart';
import 'package:vector_math/vector_math_64.dart' as vector;

class HelloWorld extends StatefulWidget {
  @override
  _HelloWorldState createState() => _HelloWorldState();
}

class _HelloWorldState extends State<HelloWorld> {
  ArCoreController arCoreController;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Hello World'),
        ),
        body: ArCoreView(
          onArCoreViewCreated: _onArCoreViewCreated,
        ),
      ),
    );
  }

  void _onArCoreViewCreated(ArCoreController controller) {
    arCoreController = controller;

    _addSphere(arCoreController);
    _addCylindre(arCoreController);
    _addCube(arCoreController);
  }

  void _addSphere(ArCoreController controller) {
    final material = ArCoreMaterial(
        color: Color.fromARGB(120, 66, 134, 244));
    final sphere = ArCoreSphere(
      materials: [material],
      radius: 0.1,
    );
    final node = ArCoreNode(
      shape: sphere,
      position: vector.Vector3(0, 0, -1.5),
    );
    controller.addArCoreNode(node);
  }

  void _addCylindre(ArCoreController controller) {
    final material = ArCoreMaterial(
      color: Colors.red,
      reflectance: 1.0,
    );
    final cylindre = ArCoreCylinder(
      materials: [material],
      radius: 0.5,
      height: 0.3,
    );
    final node = ArCoreNode(
      shape: cylindre,
      position: vector.Vector3(0.0, -0.5, -2.0),
    );
    controller.addArCoreNode(node);
  }

  void _addCube(ArCoreController controller) {
    final material = ArCoreMaterial(
      color: Color.fromARGB(120, 66, 134, 244),
      metallic: 1.0,
    );
    final cube = ArCoreCube(
      materials: [material],
      size: vector.Vector3(0.5, 0.5, 0.5),
    );
    final node = ArCoreNode(
      shape: cube,
      position: vector.Vector3(-0.5, 0.5, -3.5),
    );
    controller.addArCoreNode(node);
  }

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

3D 对象来源

文档

插件提供的类

截至 2020 年 5 月,此插件共提供了 13 个类:

  • ArCoreView
  • ArCoreController
  • ArCoreFaceView
  • ArCoreFaceController
  • ArCoreSphere
  • ArCoreCylinder
  • ArCoreCube
  • ArCoreNode
  • ArCoreMaterial
  • ArCoreHitTestResult
  • ArCoreRotatingNode
  • ArCorePlane
  • ArCoreReferenceNode

ArCoreView

ArCoreView 类返回视图类型。它有以下两种视图类型:

  • AUGMENTEDFACE
  • STANDARDVIEW

该类有以下属性:

  • onArCoreViewCreated
  • enableTapRecognizer
  • enableUpdateListener
  • type

onArCoreViewCreated

该属性接受一个 ArCoreController

enableTapRecognizer

初始值为 false,用作 MethodChannel 的参数。

enableUpdateListener

初始值为 false,用作 MethodChannel 的参数。

type

视图类型,默认为 STANDARDVIEW

ArCoreController

该控制器用于通过 addArCoreNode 函数添加节点,通过 addArCoreNodeWithAnchor 函数添加带锚点的节点,以及通过 removeNode 函数移除节点。

ArCoreFaceView

这是一个状态管理小部件,返回一个 ArCoreAndroidView。它有两个属性:

  • enableAugmentedFaces(初始值为 false
  • onArCoreViewCreated(接受一个带有 ArCoreController 参数的函数)

ArCoreFaceController

用于控制 FaceView,具有 disposeloadMesh 方法。

ArCoreSphere

这是一个 ArCoreShape,接受 radiusArCoreMaterial

ArCoreCylinder

这是一个 ArCoreShape,接受 radiusheightArCoreMaterial

ArCoreCube

这是一个 ArCoreShape,接受 size(即 Vector3)和 ArCoreMaterial

ArCoreNode

该小部件用于提供 positionshapescalerotationname

ArCoreMaterial

用于描述用户创建的虚拟对象的外观。它具有以下属性:

  • color
  • textureBytes
  • metallic
  • roughness
  • reflection

ArCoreRotatingNode

这是一个具有 degreesPerSecond 属性的 ArCoreNode,该属性是一个双精度浮点值。

ArCorePlane

它接受平面的 xy 坐标、ArCorePoseArCorePlaneType。平面有三种类型:

  • HORIZONTAL_UPWARD_FACING
  • HORIZONTAL_DOWNWARD_FACING
  • VERTICAL

ArCoreReferenceNode

这是一个 ArCoreNode,具有所有 ArCoreNode 的属性,还具有 objectUrlobject3DFileName

objectUrl

远程渲染的 glTF 对象的 URL。

object3DFileName

资产文件夹中的 sfb 对象文件名。

完整示例应用

你可以在 example 目录 中找到一个完整的示例应用。

import 'app.dart';
import 'package:flutter/material.dart';
import 'package:arcore_flutter_plugin/arcore_flutter_plugin.dart'
    show ArCoreController;

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  print('ARCORE IS AVAILABLE?');
  print(await ArCoreController.checkArCoreAvailability());
  print('\nAR SERVICES INSTALLED?');
  print(await ArCoreController.checkIsArCoreInstalled());
  runApp(App());
}

希望这些信息对你有所帮助!如果你有任何问题或需要进一步的帮助,请随时提问。


更多关于Flutter增强现实功能插件arcore_flutter_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter增强现实功能插件arcore_flutter_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 arcore_flutter_plugin 实现增强现实(AR)功能的示例代码。这个插件允许你在Flutter应用中集成Google的ARCore库,从而创建增强现实体验。

首先,确保你已经在Flutter项目中添加了 arcore_flutter_plugin。你可以在 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  arcore_flutter_plugin: ^0.12.0  # 请检查最新版本号

然后运行 flutter pub get 来安装依赖。

接下来,你需要进行一些Android特定的配置。在 android/app/src/main/AndroidManifest.xml 文件中,添加以下权限和ARCore功能支持:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <uses-permission android:name="android.permission.CAMERA" />

    <application
        ...>
        <!-- ARCore requires OpenGL ES 3.0. -->
        <uses-feature android:glEsVersion="0x00030000" android:required="true" />

        <!-- 其他配置 -->
    </application>
</manifest>

此外,确保你的 android/build.gradle 文件中包含对Google Maven仓库的引用:

allprojects {
    repositories {
        google()
        jcenter()
    }
}

现在,让我们创建一个简单的Flutter应用来展示如何使用 arcore_flutter_plugin。在 lib/main.dart 文件中:

import 'package:flutter/material.dart';
import 'package:arcore_flutter_plugin/arcore_flutter_plugin.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ARCoreScreen(),
    );
  }
}

class ARCoreScreen extends StatefulWidget {
  @override
  _ARCoreScreenState createState() => _ARCoreScreenState();
}

class _ARCoreScreenState extends State<ARCoreScreen> {
  late ArCoreController _arCoreController;

  @override
  void initState() {
    super.initState();
    _arCoreController = ArCoreController(
      onArCoreViewCreated: (arCoreView) {
        // ARCoreView 创建完成后的回调
      },
      onTapArPlane: (hitResult, plane, motionEvent) {
        // 在检测到平面并点击时的回调
      },
    );
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('ARCore Flutter Plugin Demo'),
      ),
      body: Center(
        child: ArCoreView(
          controller: _arCoreController,
        ),
      ),
    );
  }
}

这个示例展示了如何初始化 ArCoreController 并将其与 ArCoreView 关联。ArCoreView 是实际显示AR内容的视图。你可以根据需要进一步扩展这个示例,例如添加3D模型、处理用户交互等。

请注意,ARCore 只能在支持ARCore的设备上运行,并且可能需要用户更新其Google Play服务以获取最新版本的ARCore。在生产环境中,你应该添加适当的错误处理和设备兼容性检查。

希望这个示例能帮助你入门 arcore_flutter_plugin 的使用!

回到顶部