2025年10月15日水曜日

ESP32マイコンでビデオゲーム 2(グラフィックス命令)

基本グラフィックス命令

 らびやんさんのLovyanGFXライブラリを使用するときに、たなかまさゆきさんのブログ「Lang-ship」に「LovyanGFX入門 その1 基本描画系」のサイトが参考になりました。
    書き込んだサンプルプログラムや上記サイトを見るとdrawLine」、「drawRect」、「fillRect」、「drawCircle」、「fillCircle」を使うと、グラフィックを使用できることが分かります。また、文字も「print」命令で出力できるため、この命令だけでかなりのUI(User Interface)を作ることができます。

オリジナル画像を表示させる

 参考にさせて頂いているブログ「Lang-ship」を読み進めると、「LovyanGFX入門 その5 画像描画」の記事に、LovyanGFXライブラリを使うとpng画像などの画像ファイルを「drawPng」命令で表示できるとあり、まずはサンプルを実行させました。
 
 自分で作成した画像を表示させます。ブログに従い、データファイルを作ります。

 Lang-shipサイトの「画像変換」を開き、画像ファイルを指定します。
 データ形式は「RAW Dump」にしました。

 
 送信ボタンを押すと、データが出来上がります。
 このデータをコピーして、ArduinoIDEの新規タブからファイル名「image.h」追加して、貼り付けます。
 「xxx.ino」のプログラムの先頭で「image.h」をインクルードします。これで、画像ファイルを組み込むことができます。

 実行したプログラム(setup、loop部のみ)

#include "image.h"
LGFX gfx;

void setup() {
  gfx.init();
}
void loop() {
  int x = rand() % gfx.width();
  int y = rand() % gfx.height();
  gfx.drawPng((std::uint8_t*)img, sizeof(img), x, y);
  delay(300);
}

 画像を表示させる命令は「drawPng」命令です。画像ファイルと座標を指定しています。
 データを作成するときの「RAW Dump」は画像データをそのまま16進データに変換していますので、メモリを必要とします。メモリが限られるマイコンなどでは色数を落としてデータを作る必要があります。RGB565では、1ピクセル16ビットデータに変換されます。


 画像をランダムな座標に表示しています。

0 件のコメント:

コメントを投稿

3Dプリンタ造形時のデータ出力による造形物の違い

 3Dプリンタで次のような傾斜のある設計を行い、造形をしました。その結果、フラットな面であるのに、造形した結果は、模様が出ていました。(2枚目の造形物の写真)  BambuStudioでも、確かにプレビューすると、フラット面に模様があるのが確認できました。  フラット面は、ボール...