ARCoreViewにimageファイルを追加して特定のベクトルに表示させたい
Flutterのarcore_flutter_pluginを使用し、ArCoreViewにimageファイルを追加して特定のベクトルに表示させたいと考え、以下のサイトを参考に実装したのですがimageファイルが表示されません。ビルドエラーは発生せず、以下の画面のみ表示されます。(画像はエミュ上の画像で実機上でも同様の状況です)
githubを参照するとArCoreImageというクラスがあることを知り、それを使って実装しようと考えました。
参考にしたサイト
・https://github.com/giandifra/arcore_flutter_plugin
・https://pub.dev/packages/arcore_flutter_plugin
該当のソースコード
main.dart
import 'package:flutter/material.dart'; import 'ar_view_page.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.red, ), home: ARViewPage(title: 'Flutter ARCore'), ); } }
ar_view_page.dart
import 'dart:async'; import 'dart:typed_data'; import 'package:arcore_flutter_plugin/arcore_flutter_plugin.dart'; import 'package:vector_math/vector_math_64.dart' as vector; import 'package:flutter/material.dart'; import 'package:flutter/services.dart' show rootBundle; import 'package:image/image.dart' as imgLib; class ARViewPage extends StatefulWidget { ARViewPage({Key key, this.title}) : super(key: key); final String title; @override _ARViewPageState createState() => _ARViewPageState(); } class _ARViewPageState extends State<ARViewPage> { ArCoreController arCoreController; Uint8List bytedata; @override void initState() { super.initState(); loadImage(); } Future loadImage() async { getImageFileFromAssets('ubuntu.png'); } Future getImageFileFromAssets(String path) async { final imagedata = await rootBundle.load('images/$path'); imgLib.Image image = imgLib.decodeImage(Uint8List.view(imagedata.buffer)); bytedata = image.getBytes(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: ArCoreView( onArCoreViewCreated: _onArCoreViewCreated, enableTapRecognizer: true, ), ); } void _onArCoreViewCreated(ArCoreController controller) { arCoreController = controller; _addImage(controller); } void _addImage(ArCoreController controller) { final img = ArCoreImage( bytes: bytedata, width: 500, height: 500, ); final node = ArCoreNode( image: img, position: vector.Vector3(0, 0, -1.5), scale: vector.Vector3(1, 1, 1), ); controller.addArCoreNode(node); } }
補足情報
・使用OS ubuntu 20.04 LTS ・テスト用実機 HUAWEI Mate20 Pro ・使用IDE Android Studio ・flutterのversionと使用プラグイン version: 1.0.0+1 arcore_flutter_plugin: ^0.0.10 image: ^3.0.2
あなたの回答
tips
プレビュー