/m5stack-avatar-ut-custom

An M5Stack library for rendering avatar faces

Primary LanguageC++MIT LicenseMIT

M5Stack-Avatar Custom Face

M5Stack-Avatarを元に、オリジナルのカスタムフェイスを作成した版です。

現時点では、カスタムフェイス以外のコードは、M5Stack-Avatarからは変更していません。 フォーク元のREADMEファイルもこちらに残してあります。

日本語 ENGLISH

本リポジトリでは2つのカスタム例を公開しています。

カスタム例1:AA顔(ショボーン/シャキーン)

実際にカスタマイズして作成した例として、スタックチャンのデフォルトの顔 [・_・] をベースにして、AA(アスキーアート)でよく見る(よく見ていた?)ショボーン (´・ω・`) やシャキーン(`・ω・´)の顔を作成してみました。

<AAface>

このカスタムフェイス用に実装したコードは下記の2つになります。

  • スケッチファイル
    • /example/aa-face/aa-face.ino
  • カスタムフェイス定義
    • /src/faces-custom/AAFace.h

このカスタマイズでは、目、眉毛、口の顔パーツを新規に定義しています。 コードの詳細については、リポジトリの上記ファイルをご覧ください。 ここではカスタムフェイス定義での作成概要を記載します。

  • AAEye
    • 目のクラス
    • 標準顔に適用される /src/Eye.cpp の内容をベースにしています。
    • 標準では、感情表現がAngryおよびSadの場合に目が半月状に加工されますが、今回のカスタマイズではその加工をしないように修正しています。
  • AAEyeblow
    • 眉毛のクラス
    • 標準顔に適用される /src/Eyeblow.cpp の内容をベースにしています。
    • 標準では、感情表現がAngryおよびSadの場合に眉毛が傾くように定義されていますが、今回のカスタマイズではNeutralの場合にシャキーン(`・ω・´)、Sadの場合にショボーン (´・ω・`)の形状になるように定義しています。
    • また、それ以外の感情では眉毛は表示しないように修正しています。
  • AAMouth
    • 口のクラス
    • 顔カスタムのサンプルである /src/faces/DogFace.h の内容をベースにしています。
    • AAの口である ω の形状になるように、円や四角を重ね合わせて描画するように記述しています。

カスタム例2:ラピュタのロボット

もう一つのカスタマイズ例として、天空の城ラピュタに出てくるロボット兵の顔を作ってみました。

<Laputaface>

このカスタムフェイス用に実装したコードは下記の2つになります。

  • スケッチファイル
    • /example/laputa-face/laputa-face.ino
  • カスタムフェイス定義
    • /src/faces-custom/LaputaFace.h

このカスタマイズでは、顔の輪郭の作成、目、口の顔パーツの新規定義を行っています。 眉毛は表示させないようスタックチャンのデフォルトの顔 [・_・]と同様に高さを0にしています。 コードの詳細については、リポジトリの上記ファイルをご覧ください。 ここではカスタムフェイス定義での作成概要を記載します。

  • laputa-face.ino
    • Avatarクラスの初期化の際に、引数を与えて複数色の使用を有効にしています。
      • avatar.init(8);
        • 8ビットカラーの使用が可能。もっと多色にしたい場合16,24などに上げることができるようだ。
      • デフォルトは avatar.init(); この状態だと2色しか表示できない。
  • LaputaFace.h : LaputaEye
    • 目のクラス
    • 感情ごとに、目の色が変わるように設定しています。
  • LaputaFace.h : LaputaMouth
    • 口のクラス
    • ロボット兵の輪郭の部分もこのクラスの中で定義しています。
      • 丸や三角などを組み合わせて輪郭の形状を作りました。
    • 顔の輪郭部の色は、固定値かつ任意のRGBで指定しています。
    • 口の機能は顔の**にある2つの小さい●に持たせたい(しゃべると色が変わるような感じ)と考えていますがまだ実装できてません。とりあえず起こったときだけ赤くしています。

この作例では、複数色の使用や顔輪郭の作成などが試すことができて、表現の幅が広がりました。 (頑張ればガンダムとかも作れるんじゃないか?とか)