やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

MMD読込ライブラリSabaをビルド・起動できた

 背景の透明化ができないがミクがダンスしてくれた。

成果物

demo

手順

OpenGL等インストール

sudo apt-get install -y libx11-dev xorg-dev \
                        libglu1-mesa libglu1-mesa-dev \
                        libgl1-mesa-glx libgl1-mesa-dev
sudo apt install -y libglfw3 libglfw3-dev
sudo apt install -y libglew-dev
sudo apt -y install freeglut3 freeglut3-dev
sudo apt -y install libglu1-mesa-dev mesa-common-dev
sudo apt -y install libgles2-mesa-dev libegl1-mesa-dev xorg-dev
sudo apt -y install libglew-dev
sudo apt -y install libbullet-dev

sabaビルド

git clone https://github.com/benikabocha/saba/blob/master/README.jp.md
cd saba
mkdir build
cd build
cmake ..
make -j4
./saba_viewer

一部エラー

[ 98%] Built target gtests
/tmp/work/saba/example/simple_mmd_viewer_glfw.cpp: In function ‘bool SampleMain(std::vector<std::__cxx11::basic_string<char> >&)’:
/tmp/work/saba/example/simple_mmd_viewer_glfw.cpp:1245:18: error: ‘GLFW_TRANSPARENT_FRAMEBUFFER’ was not declared in this scope
   glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GL_TRUE);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/tmp/work/saba/example/simple_mmd_viewer_glfw.cpp:1245:18: note: suggested alternative: ‘GL_READ_FRAMEBUFFER’
   glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GL_TRUE);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  GL_READ_FRAMEBUFFER
make[2]: *** [example/CMakeFiles/simple_mmd_viewer_glfw.dir/build.make:63: example/CMakeFiles/simple_mmd_viewer_glfw.dir/simple_mmd_viewer_glfw.cpp.o] エラー 1
make[1]: *** [CMakeFiles/Makefile2:469: example/CMakeFiles/simple_mmd_viewer_glfw.dir/all] エラー 2
make: *** [Makefile:95: all] エラー 2

saba実行

./saba_viewer

demo

  1. 適当にダウンロードしたpmd(pmx)やvmdファイルをドラッグ&ドロップする
    demo
    demo
  2. マウス移動とホイールでカメラを調整する
    demo
  3. 画面左にあるControlAnimationPlayをクリックする
  4. 踊りだす

demo

情報源

cmake
$ make -j4
[  6%] Built target fcpp
[ 36%] Built target lua
[ 59%] Built target Saba
[ 60%] Building CXX object example/CMakeFiles/simple_mmd_viewer_glfw.dir/simple_mmd_viewer_glfw.cpp.o
[ 62%] Built target mmd2obj
[ 88%] Built target SabaViewer
[ 90%] Built target saba_viewer
[ 98%] Built target gtests
/tmp/work/saba/example/simple_mmd_viewer_glfw.cpp: In function ‘bool SampleMain(std::vector<std::__cxx11::basic_string<char> >&)’:
/tmp/work/saba/example/simple_mmd_viewer_glfw.cpp:1245:18: error: ‘GLFW_TRANSPARENT_FRAMEBUFFER’ was not declared in this scope
   glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GL_TRUE);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/tmp/work/saba/example/simple_mmd_viewer_glfw.cpp:1245:18: note: suggested alternative: ‘GL_READ_FRAMEBUFFER’
   glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GL_TRUE);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  GL_READ_FRAMEBUFFER
make[2]: *** [example/CMakeFiles/simple_mmd_viewer_glfw.dir/build.make:63: example/CMakeFiles/simple_mmd_viewer_glfw.dir/simple_mmd_viewer_glfw.cpp.o] エラー 1
make[1]: *** [CMakeFiles/Makefile2:469: example/CMakeFiles/simple_mmd_viewer_glfw.dir/all] エラー 2
make: *** [Makefile:95: all] エラー 2

背景が透明にならない

Transparent Window (GLFW 3.3.2 or higher, Windows)

 GLFW 3.3.2以上でなければならない。対して私の環境は3.2.1と古い。

apt search glfw
libglfw3/stable,stable,now 3.2.1-1 armhf [インストール済み]
  portable library for OpenGL, window and input (x11 libraries)

libglfw3-dev/stable,stable,now 3.2.1-1 armhf [インストール済み]
  portable library for OpenGL, window and input (development files)

 私の環境ではバージョンが古いため、背景が透明化できないと思われる。

 ビルド時にも以下のようなエラーが出た。背景透明用の定義値とおぼしきGLFW_TRANSPARENT_FRAMEBUFFERが未定義だと怒られる。

[ 98%] Built target gtests
/tmp/work/saba/example/simple_mmd_viewer_glfw.cpp: In function ‘bool SampleMain(std::vector<std::__cxx11::basic_string<char> >&)’:
/tmp/work/saba/example/simple_mmd_viewer_glfw.cpp:1245:18: error: ‘GLFW_TRANSPARENT_FRAMEBUFFER’ was not declared in this scope
   glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GL_TRUE);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/tmp/work/saba/example/simple_mmd_viewer_glfw.cpp:1245:18: note: suggested alternative: ‘GL_READ_FRAMEBUFFER’
   glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GL_TRUE);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  GL_READ_FRAMEBUFFER
make[2]: *** [example/CMakeFiles/simple_mmd_viewer_glfw.dir/build.make:63: example/CMakeFiles/simple_mmd_viewer_glfw.dir/simple_mmd_viewer_glfw.cpp.o] エラー 1
make[1]: *** [CMakeFiles/Makefile2:469: example/CMakeFiles/simple_mmd_viewer_glfw.dir/all] エラー 2
make: *** [Makefile:95: all] エラー 2

 でも実行できた。背景が透明にできないだけ。

所感

 背景が透明にできたらデスクトップ・マスコットになったのになぁ。

対象環境

$ uname -a
Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux