ボンヤリ眺めるルービックキューブ

Table of Contents

1 なんすか?これ?

暇つぶしに作ったデモです(^^; 何の操作もできません(^^;;;;

[画面イメージ]

2 ボンヤリ眺め方

動作確認はWindowsXP SP3と Windows7 SP1 64bit で行いました。W系APIを使用していますのでWindows98 とかでは動かないかも。以下の7zファイルを適当なディレクトリに展開します。

7zファイルを展開して、rbcube.exeを実行するとウインドが開いて、何やらルービックキューブが 勝手に動くと思います。スペースキーを押すと一時停止します。もっかい押すと再開します。 終了するにはウインドを閉じてください。

稀に何も表示されない場合があるかも知れません。その時はもう一度実行すればうまく 表示されると思います。これ、原因がよく判ってません(汗;; ver001でこれかな?と思う点を直してみたつもり。

表示を大きくしすぎるとフレームレート(fps=??の値)が下がる場合がありますが、 ビデオカードの性能次第です。fps=60より大きくなる事は(多分)ありません。

tick=??の値には特に意味はありません。なんとなく動いているんだなぁってのを 見るくらいの感じに思ってください(^^;

3 プログラムソース

D言語(2.0)で書かれています。

Windows API プロジェクトのWinAPIバインディングを少し手を入れて利用させていただいています。 D言語はコンパイラバージョンが変わると、すぐにコンパイルが通らなくなりますので、 現時点でコンパイルできるセットをwin32-r391c.tar.xzとして勝手に固めさせてもらいました。 そんな訳で、Windowsでしか動きません(^^;

zlib , libpng , libjpeg を、mingw用に野良ビルドしたものをスタティックリンク しています。また、乱数生成関数である メルセンヌ・ツイスタ をD用に野良ポートしています。

コンパイラは2012/12時点でgithubでメンテされている GDC を使用しました。 ただし、メインラインのtrunkはMinGW向けにビルドできません。 このため、MinGW向けに venix1さんがforkしているDMD2.060対応されたバージョンに少し手を入れて 使用しています(ビルドの参考)。

$ gdc -v
Using built-in specs.
COLLECT_GCC=C:\MinGW\gdc031_2060_463\bin\gdc.exe
COLLECT_LTO_WRAPPER=c:/mingw/gdc031_2060_463/bin/../libexec/gcc/mingw32/4.6.3/lto-wrapper.exe
Target: mingw32
Configured with: ../gcc-4.6.3/configure --build=mingw32 --with-arch=i686 --enable-languages=c,d --prefix=/mingw/gdc031_2060_463 --enable-threads --enable-fully-dynamic-string --enable-libstdcxx-debug --enable-version-specific-runtime-libs --disable-nls --disable-win32-registry --disable-symvers --disable-werror --enable-sjlj-exceptions --with-bugurl=https://bitbucket.org/goshawk/gdc/issue --disable-bootstrap --disable-shared --disable-libgomp --disable-libmudflap
Thread model: win32
gcc version 4.6.3 (GCC)

ビルド方法は以下の通り。~/download/ の下にtar.xzアーカイブをダウンロードしたとします。 作業ディレクトリは適当な場所だとします。

  1. xz -dc ~/download/rbcube_v002_src.tar.xz | tar xvf -
  2. cd rbcube_v002_src
  3. xz -dc ~/download/win32-r391c.tar.xz | tar xvf -
  4. ./mk.sh -a

どちらかと言うとコンパイル環境を整えるのにかなり手間がかかりますが、それをいとわないという方 ならば適当に改造するなどして遊んでみてください。

4 制作メモ

全く読みやすくないソースなのですが参考までに。

  • ゲームのフレームワークっぽい作りになってます。その為、myGameFrameクラス の中に描画ループ が書かれている感じになってます。
  • 3DモデルはOpenGL表示を行っていますが、これらはSpriteクラスの中に全てを押し込んでいます。
  • 文字表示も2Dスプライトで扱っています。この為、文字を画像ファイルから1文字ずつ切り出して スプライトデータとして読み込んでいます。
  • 位置や回転軸や回転角度は全て自前で計算しています。これは3Dモデルのスプライトでは 座標変換は行っておらず、一度だけ与える事のできる位置と回転軸/回転角度に従った 表示を行う作りになっている為です。回転の表現にはクォータニオン(四元数)を ありがたく活用させてもらってます。数学的な話はムズカシくて良くわかってませんが(^^;
  • 念のため。バラバラになってるのを真面目に揃えている訳ではありません(^^;;;;;;

うむ、何の参考にもならないですね(汗; まぁいいや(ぉぃ;

5 履歴

  2010/08/08 : 初版
  2010/09/01 : 使用したgdcのバージョン表示に-mno-cygwinが付いてなかったのを修正
  2010/10/03 : ver001に置き換え。バグっぽい点をいくつか直したり、ソースコードを少し整理したり。
  2012/03/22 : ページをEmacsのorg-modeを使用して生成してみた。内容は2010/10/03と同じです。
  2012/12/23 : ver002改版。ソースコードの改版がメインです。

TOP PREV

Author: TANE

Org version 7.8.11 with Emacs version 22