0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Android強化月間 - Androidアプリ開発の知見を共有しよう -

PLATEAU 2023 ハッカソン by 日本Androidの会 に参加

Last updated at Posted at 2023-09-17

はじめに

日本Androidの会 浜松支部と香川支部の共同開催のPLATEAUのハッカソン
香川はデジタルハリウッド高松STUDIO、浜松はSOUで行われました。
PLATEAUの詳細は公式サイトを見てもらうのがわかりやすいです。
公式サイトの言葉を借りると「国土交通省が主導する、日本全国の3D都市モデルの整備・活用・オープンデータ化プロジェクト」になります。
PLATEAUで提供されるデータはUnityやThree.jp、AR.jsなどで扱うことが可能です。

ツールとか

PLATEAU VIEW

PLATEAUのデータをWebで確認できる

PLATEAU GitHub

UnityやUNREAL ENGINE用のSDK等を公開している

なにやった?

アイデアソンにも参加してないし、UnityもThree.jp、AR.jsも使ったことがないので、ハッカソンに参加していますが、お勉強です。
日本Androidの会浜松支部 第144回ミーティング 「PLATEAU体験会パート2(もくもく会Part39)」 で公式のUnityのサンプルを動かした。
Flutterでも扱えそうなので、こちらを参考にしつつ、model_viewer_plusで表示ができないか試してみる。

model_viewer_plus を導入する

インストール

model_viewer_plus はAndroidとiOSで扱える形式が変わるみたい。
今回はAndroidでやっていきます。

まずは、model_viewer_plus を導入。

> flutter pub add model_viewer_plus
・・・
Changed 17 dependencies!
Building with plugins requires symlink support.

Please enable Developer Mode in your system settings. Run
  start ms-settings:developers
to open settings.

Windowsだと開発者モードを有効にしないといけないらしい。
以下のコマンドで開発者向けオプションを起動します。
※Windows11以外はこれでいいのかわからない。

> start ms-settings:developers

開発者モードをONにし、表示されるダイアログで「はい」ボタンをクリック
image.png

もう一度実行したら成功

> > flutter pub add model_viewer_plus
"model_viewer_plus" is already in "dependencies". Will try to update the constraint.
Resolving dependencies... 
  collection 1.17.1 (1.18.0 available)
  matcher 0.12.15 (0.12.16 available)
  material_color_utilities 0.2.0 (0.8.0 available)
  meta 1.9.1 (1.10.0 available)
  model_viewer_plus 1.6.1 (1.7.0 available)
  source_span 1.9.1 (1.10.0 available)
  stack_trace 1.11.0 (1.11.1 available)
  stream_channel 2.1.1 (2.1.2 available)
  test_api 0.5.1 (0.6.1 available)
  url_launcher_web 2.0.19 (2.0.20 available)
Got dependencies!

設定

AndroidManifest.xml 変更

AndroidManifest.xmlに変更が必要(Android9以上)
android:usesCleartextTraffic="true" を applicationタグに追加する

    <application
        android:label="plateaudemo"
        android:name="${applicationName}"
        android:icon="@mipmap/ic_launcher"
        android:usesCleartextTraffic="true">

app/build.gradle の変更

minSdkVersion flutter.minSdkVersion を minSdkVersion 21に変更

    defaultConfig {
        minSdkVersion 21

データの準備と表示の確認

まずは、PLATEAUのデータをgltf形式に変換する。
公式ドキュメントのTOPIC 12|Three.jsで活用する[1/2]|Three.jsを使った3D都市モデルの読み込みと表示にやり方が載っているのでそれを参考に行う。

まずBlenderが必要になるので、インストールが必要になる。
次に都市データをダウンロードする。
今回はチュートリアルにある東京23区のデータを使う。

扱うデータはチュートリアル通り、以下のいずれかをインポートして変換する

  • bldg/lod1/53394525_bldg_6677.fbx
  • bldg/lod2/53394525_bldg_6677.fbx
    • こっちのほうがデータが重い。データ読みこんでるときにアプリが落ちた。

BlenderでインポートメニューからFBXを選択。
image.png

チュートリアルにあるファイルを選択する。
オプションを以下のように設定する必要がある。

項目 設定
スケール 100
方向を手動で設定 前方 Yが前方
Zが上

image.png

表示の確認っぽいのは置いておいて、エクスポートする

image.png

・・・時間がかかるようだ

表示はできたが、小さすぎて見えない。
Screenshot_20230917-132302243.jpg

エクスポート時のオプションを変えてみる。
次に、データを選択してからエクスポートを選択。
内容の選択したオブジェクトにチェックを入れてエクスポートする。
image.png

大きく表示された!
Screenshot_20230917-133409517.jpg

ソースは以下の通り

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key});

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return const Scaffold(
      body: ModelViewer(
        backgroundColor: Color.fromARGB(0xFF, 0xEE, 0xEE, 0xEE),
        src:'assets/53394525_bldg_6677.glb',
        ar: false,
        autoRotate: false,
        cameraControls: false,
        disableZoom: true,
        arModes: ['scene-viewer', 'webxr', 'quick-look'],
      ),
    );
  }
}

工夫して何か作る

ハッカソンなので、何か作りたい。
この時点で残り時間2時間半を切っている・・・

とりあえずARを有効にして、コンビニでガンダム買ってきて合わせてみた・・・
IMG_20230917_141116.jpg

ピントが・・・w

ARについて

ARはGoogleの機能を使うので、作成したアプリとは別にGoogleのAR用のアプリが起動する感じ。
なので、ARの機能はこちらでは制御できなさそう。
アプリ内でコントロールとして扱われれば何かできそうな気もするけど。
ただ、写真は取れるので、ARで撮影した写真を加工するなどの利用方法はありかも。

使った感想

ハッカソンとしては時間が短かったとはいえ、何も知らないところから何かできた感じがあったので良かったかな。
model_viewer_plusはモデルを表示するライブラリのようなので、モデルデータでいろいろやりたいという用途には向かないかなと思います。

賞を頂きました

image.png

審査員賞頂きました
地図を召喚的なご意見もいただきました。
地図を召喚・・・このワードは使える!
何か考えよう!

発表資料はこちら

補足
イベントも終わって1日たったので冷静に。
審査員賞を頂いたのは技術面ではないです。
地図を持ってくる発想に対して評価を頂きました。
それで、審査員の方より地図を召喚するという言葉を頂きました。
まぁ、3時間で初めて使ったライブラリを試した程度ですので技術面の評価はいただけないのは仕方がないのですが、発想の面で評価いただいたのは良かったと思っています。
次はSPAJAMも控えている(予選の参加が抽選になって漏れなければ)いますが、PLATEAU AWARD 2023に向けて何か作れれば応募したいと思います。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?