FPSを作ってみる@wiki
03)
最終更新:
slice
-
view
(2014/03/30)
で、でた〜、色々手を出して進捗してない奴〜
- Blenderを触る
自分が持ってる3ds maxもなんだかんだ言って古いバージョンだし 前々から気になっていたBlenderというソフトはどうなんだろう・・という事で、ちょっと触ってみたり。 まだ初日だから何も言えない。無料のソフトとしてはかなり高機能(元々売ってたのを有志で買い取ったとか、なんとか・・) 中でもスカルプト機能がお気に入りで適当に土を盛ってるだけでも楽しいが、ちゃんと作ろうとすればムズイだろうな。 本当に触っているだけなので本格的に使うかは不明
- 非同期ファイル読み込み
ファイルの拡張子でリソースを判別して読み込むだけのはずが、シーンごとのリソース管理を考え始めていつの間にか別スレッドで非同期読み込みをしていた。な、なにを言ってるか(略
- いつの間にか前のプログラムが動かなくなってた
多分環境を構築しなおしたせいだろうけど、 OpenALでサウンドデバイスが開けないとか(OpenALのビルド時にALSAやpulseaudioのヘッダなどがインストールされて無くて無効になってた) ビデオドライバがOpenGLに対応していない(SDLを最新のリビジョン取ってきてビルドし直したら動いた。よくわからん) PNGやJPEGが開けない(SDL_imageのビルド時にバージョン決め打ちでlibjpeg8がリンクされていて、こっちのブログラムではlibjpeg9がリンクされエラーになってた。pngも同じ) あと、エフェクトファイル(HLSLにおけるFxファイルみたいなの)の文法変えてないしファイルもそのままの筈だけど 実行時に文法エラー出る。直さないと。
なんか、土台ばかりやってて全ッ然ゲーム制作してないね。
始めてもないじゃん、という・・
始めてもないじゃん、という・・
(2014/03/20)
Android対応も一段落し、スクリプト制御のオブジェクト生成やらシーン管理やらは動いてるので
ここらでサウンドでも鳴らしてみるかーと、思ったらそのような物が無かった。
そもそもリソース周りをどういう設計方針で行くか忘れかけていたのでもう一度確認してみる。
ここらでサウンドでも鳴らしてみるかーと、思ったらそのような物が無かった。
そもそもリソース周りをどういう設計方針で行くか忘れかけていたのでもう一度確認してみる。
- リソース自体はスクリプトからアクセスできず、あくまでハンドルを扱うのみ
モデル描画したりサウンド鳴らしたりなんてのは専用クラスに任せる
シューティングならシューティング用に設計したサウンドクラス等
シューティングならシューティング用に設計したサウンドクラス等
- リソースをファイルパス指定で1つ1つ読んでいたのでは管理が大変なので別途ファイルにリソースブロックとして記載し、これをインポートして一括読み込みする
「別途ファイル」もLua形式であり、単なるテーブル(配列)にURLを文字列で並べるだけ
2ブロックの差分とって必要なリソースだけ追加読み込み対応の予定
2ブロックの差分とって必要なリソースだけ追加読み込み対応の予定
-- Resource.lua
-- リソースブロック定義
Block = {
modelA = "path/to/modelA.mdl",
modelB = "path/to/modelB.mdl",
seffect = "sound0.wav",
music = "music0.ogg",
-- あと色々
}
-- Main.lua
-- リソースブロック読み込み
local block = ResourceManager:loadBlock(require("Resource.lua").Block)
-- 敵モデルをセット
enemy.setModel(block.modelA) -- block.modelAには"path/to/modelA.mdl"のリソースが入ってる
-- サウンド再生
soundmgr.play(block.seffect) -- block.seffectには"sound0.wav"のリソースが入ってる
で、リソースハンドルが格納されたblockテーブルは通常、Sceneクラスが持っていて場面によって必要なリソースを読み込むと。
別にリソースのリストだけ別ファイルにせんでもSceneクラス定義に一緒に書いてしまっていいかもしれない。
そんな感じかねぇ。あとはやってみないと分からん。
別にリソースのリストだけ別ファイルにせんでもSceneクラス定義に一緒に書いてしまっていいかもしれない。
そんな感じかねぇ。あとはやってみないと分からん。
(2014/03/17)
clangとAndroid
先週辺りから自作プログラムをAndroid用にコンパイルする試みを、ずっとしている。
Boostに始まり各種libogg, libfreetype2, libSDL2...なんかのライブラリをビルドし
うっかりOpenGL ES2には無いAPIを使ってエラーが出ている箇所を修正など。
Boostに始まり各種libogg, libfreetype2, libSDL2...なんかのライブラリをビルドし
うっかりOpenGL ES2には無いAPIを使ってエラーが出ている箇所を修正など。
OpenSLのシリアライズ処理を書いてないのにコンパイルが通って「あれ?」っと思ったが
よく見たらOpenALやOpenSL依存のルーチンをそれぞれ別クラスに隔離していて、
シリアライズは共通クラスだった。後はちゃんと動いてくれればいいが・・
よく見たらOpenALやOpenSL依存のルーチンをそれぞれ別クラスに隔離していて、
シリアライズは共通クラスだった。後はちゃんと動いてくれればいいが・・
コンパイラもgccではなくclangを使う様に変更。
今までそうしてなかったのは正直言ってclangでどのようにクロスコンパイルするか設定などがわからなかったから。
別にgccでもプログラムの動作は変わらないのだが多分boost::spiritの影響で
1プロセスで1.8Gも行くと4つ並列に動かしたらビルド用にメモリが7.2Gは必要な計算。
gvim(clang_complete)やリファレンスを見るためのブラウザに現在1.6G程度使っているので、全然足りない。
今までそうしてなかったのは正直言ってclangでどのようにクロスコンパイルするか設定などがわからなかったから。
別にgccでもプログラムの動作は変わらないのだが多分boost::spiritの影響で
1プロセスで1.8Gも行くと4つ並列に動かしたらビルド用にメモリが7.2Gは必要な計算。
gvim(clang_complete)やリファレンスを見るためのブラウザに現在1.6G程度使っているので、全然足りない。
ま、プロセスを2,3程度に制限すれば良いとも言えるがそれだとクアッドコアのCPUが遊んでしまう。
だったらこの際メモリ消費が半分以下で済むclangを試してみようかという事で。
結論から行くと Arm5Teの場合
"clang++ -target arm5te-none-linux-androideabi --sysroot=(NDKのplatformヘッダのパス) --gcc-toolchain=(NDKのgccツールチェインのパス)"とオプションを与えればクロスコンパイル出来た。
自分のケースではNDKを/opt/adt-bundle-linux-x86_64/ndkにインストールしているのでArmアーキテクチャ向け,Android API Level 9以降を対象とすると
clang++ -target arm5te-none-linux-androideabi --sysroot=/opt/adt-bundle-linux-x86_64/ndk/platforms/android-9/arch-arm --gcc-toolchain=/opt/adt-bundle-linux-x86_64/ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
のようになる。
だったらこの際メモリ消費が半分以下で済むclangを試してみようかという事で。
結論から行くと Arm5Teの場合
"clang++ -target arm5te-none-linux-androideabi --sysroot=(NDKのplatformヘッダのパス) --gcc-toolchain=(NDKのgccツールチェインのパス)"とオプションを与えればクロスコンパイル出来た。
自分のケースではNDKを/opt/adt-bundle-linux-x86_64/ndkにインストールしているのでArmアーキテクチャ向け,Android API Level 9以降を対象とすると
clang++ -target arm5te-none-linux-androideabi --sysroot=/opt/adt-bundle-linux-x86_64/ndk/platforms/android-9/arch-arm --gcc-toolchain=/opt/adt-bundle-linux-x86_64/ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
のようになる。
なんでnone-linuxなのかはよく分からんっていうか普段PC用にコンパイルするときの
i686-pc-linux-gnu
なんかの指定も内部動作をほとんど知らないまま使ってるので、これについてはなんとも。
i686-pc-linux-gnu
なんかの指定も内部動作をほとんど知らないまま使ってるので、これについてはなんとも。
ちなみに
Androidに付属している (NDK-Path)/docs/STANDALONE-TOOLCHAIN.html を読むとスタンドアロンで動くツールチェインセットを生成することができるが、
見た感じ手間はNDK内のパスを指定して動かす場合と比べてあまり変わらないっぽいし
同じファイルをディスクに2つ3つ置きたくないので自分は上記の設定で直に使ってる。
見た感じ手間はNDK内のパスを指定して動かす場合と比べてあまり変わらないっぽいし
同じファイルをディスクに2つ3つ置きたくないので自分は上記の設定で直に使ってる。
(2014/03/10)
LUbuntu13.10のアレコレ
サスペンド失敗する問題
カーネルの自前コンパイルしたらサスペンド(電源OFF)するまでは行くが、相変わらず復帰に失敗。
なにやらfglrxがどうのとかエラーメッセージが出るのでドライバを最新版やBeta版に変えてみるも改善せず。
LUbuntuのログアウトウィンドウでサスペンド・・ではなくコマンドラインで
なにやらfglrxがどうのとかエラーメッセージが出るのでドライバを最新版やBeta版に変えてみるも改善せず。
LUbuntuのログアウトウィンドウでサスペンド・・ではなくコマンドラインで
sudo pm-suspend --quick-s3-mode
とやるとちゃんとサスペンド&復帰ができるので
少し手間だが当分これで行く。
pm-suspendの代わりにpm-hibernateを使うとハイバネーションで
pm-suspend-hybridはHDDにRAMの内容を書き込んでサスペンド状態へ、復帰時にRAMの内容が残ってたらそれを使い
消えてたらハイバネーションと同じ動作って事だろうか?
少し手間だが当分これで行く。
pm-suspendの代わりにpm-hibernateを使うとハイバネーションで
pm-suspend-hybridはHDDにRAMの内容を書き込んでサスペンド状態へ、復帰時にRAMの内容が残ってたらそれを使い
消えてたらハイバネーションと同じ動作って事だろうか?
ibusのmozcが全角カナ入力になってしまう問題
どうも、Alt + Shiftを押すとなってしまうっぽい。
これはキーバインドにも載ってないので解決方法が分からんけど、とりあえずもう一度Alt+Shiftを押せば戻る。
これはキーバインドにも載ってないので解決方法が分からんけど、とりあえずもう一度Alt+Shiftを押せば戻る。
ibusのmozcでキーバインドを変えても反映されない問題
IMを使うアプリケーションを再起動かと思いきや、
ibus自体を再起動しなければ反映されなかった。コマンドラインで
ibus自体を再起動しなければ反映されなかった。コマンドラインで
ibus-daemon -drx
等として手動で再起動
(2014/03/10)
Boost 1.55.0のAndroid向けビルド
BoostはそのままではAndroidコンパイラでビルドできず修正が必要なようで、パッチを作ってみた。
といっても
http://yutopp.hateblo.jp/entry/2011/12/26/233059
ここの記事の通りやっただけ。バージョンが1.48.0と少々古かったので最新版で使えるよう微修正。
ページの一番下にリンクがあるのでもし良かったらどうぞ。
適用するには単純にboost_1_55_0を展開したディレクトリで
といっても
http://yutopp.hateblo.jp/entry/2011/12/26/233059
ここの記事の通りやっただけ。バージョンが1.48.0と少々古かったので最新版で使えるよう微修正。
ページの一番下にリンクがあるのでもし良かったらどうぞ。
適用するには単純にboost_1_55_0を展開したディレクトリで
patch -p1 < boost_arm.patch
とする。
後はb2で普通にビルドする。一応自分がビルドした時のオプション等をbuild_arm.shに書いてある。
後はb2で普通にビルドする。一応自分がビルドした時のオプション等をbuild_arm.shに書いてある。
1つ注意が必要なのは、ファイルの名前通りboost_arm.patchはarm用でboost_x86.patchがx86用なのだが
x86の方はarm版の後に追加で適用する形となっている事。
あとNDKは64bit版を /opt/adt-bundle-linux-x86_64/ndk にインストールした前提で書いてあって、
これは各自tools/build/v2/user-config.jamを修正してほしい。
32bit版NDKなら
androidPlatform = linux-x86_64
なってるところを
androidPlatform = linux-x86
に変えるとかね。
x86の方はarm版の後に追加で適用する形となっている事。
あとNDKは64bit版を /opt/adt-bundle-linux-x86_64/ndk にインストールした前提で書いてあって、
これは各自tools/build/v2/user-config.jamを修正してほしい。
32bit版NDKなら
androidPlatform = linux-x86_64
なってるところを
androidPlatform = linux-x86
に変えるとかね。
実のところ
gitでpatchを作るにはどうするか?適用は・・・とか、そういう自分の勉強が主だった。
つまりパッチはオマケ。
つまりパッチはオマケ。
(2014/03/07)
進捗としては前回書いた項目の半分くらいだけどキリが悪いから次回ということで。
今回は単なる日記。
今回は単なる日記。
とりあえず「期間空いたけど残念ながらあまり進んでない・・・云々」と始めようとしたら
mozcの日本語入力がうまく動かず記事を書く気力が激しく減退したものの、
僅差で「2週間も音沙汰なし」の後ろめたさが勝利。
自分でも何を言ってるのかよくわからんが。
mozcの日本語入力がうまく動かず記事を書く気力が激しく減退したものの、
僅差で「2週間も音沙汰なし」の後ろめたさが勝利。
自分でも何を言ってるのかよくわからんが。
色々あって環境(LUbuntuとWin8)の再構築をしている。XPはもういいかなという事で入れなかった。
このご時世だけどメモリを新調し合計8GになったのでMinGWでboost::spiritとか使って
1プロセスのメモリ使用量が1G超のコードでも4,5個並列コンパイルでき、
ついでにLUbuntuも64bit版にしてみたのでもし2Gを超えてもエラーでgccが落ちることはないと思われる。
コンパイルにそんなメモリ食うコードは良くないと言われればそれまでではあるが・・
ライブラリ一式も64bitバージョンが導入され、32bitで動くプログラムを配布したい時の手間が気にかかる。
このご時世だけどメモリを新調し合計8GになったのでMinGWでboost::spiritとか使って
1プロセスのメモリ使用量が1G超のコードでも4,5個並列コンパイルでき、
ついでにLUbuntuも64bit版にしてみたのでもし2Gを超えてもエラーでgccが落ちることはないと思われる。
コンパイルにそんなメモリ食うコードは良くないと言われればそれまでではあるが・・
ライブラリ一式も64bitバージョンが導入され、32bitで動くプログラムを配布したい時の手間が気にかかる。
windowsの方は元々ゲームとモデリングが主な用途だったのでパッチのインストールとソフト突っ込んで終わり。
マザボとメモリ交換したのもあって認証関係でちょい躓いたがまぁいい。
マザボとメモリ交換したのもあって認証関係でちょい躓いたがまぁいい。
問題はOSそれ自体より今まで書いたソースコードの断片だのメモ書きだのの整理が面倒で先送りにしていたツケが回ってきた事。
どうでもいいファイルばかりだからフォルダごと消そうか・・・と思いきや大事なメモが〜とか、
逆に大事なプロジェクトフォルダの周りにゴミが散乱してたり。
そもそも、用済みのメモ等を消すのが忍びなくて放置してるのが元凶かねぇ
どうでもいいファイルばかりだからフォルダごと消そうか・・・と思いきや大事なメモが〜とか、
逆に大事なプロジェクトフォルダの周りにゴミが散乱してたり。
そもそも、用済みのメモ等を消すのが忍びなくて放置してるのが元凶かねぇ
大事なファイルだったらgitで管理すればいいんだろうけど自分の場合、
最初は一時的なメモとして書いていたけどそのうち文章が増えてって気づいたら・・というパターンも結構あるから悩ましい。
何でもかんでもgitするとそれはそれで邪魔。う〜む、これといった解決策が思いつかん。
最初は一時的なメモとして書いていたけどそのうち文章が増えてって気づいたら・・というパターンも結構あるから悩ましい。
何でもかんでもgitするとそれはそれで邪魔。う〜む、これといった解決策が思いつかん。
#追記
LUbuntu 13.10 64bit版にして良かった点
- 64bitなプログラムを書ける(本当は使えるレジスタ本数が増えて速くなってるはずだが、測ってないのでよくわからん)
- 起動時間が前の半分か2/3くらいになった
(LUbuntu 12.04 32bit版と比べて)悪い点
- コンパイルする際にライブラリの準備、管理が少し面倒
- マザボ依存っぽいが、サスペンドからの復帰に失敗する。画面が崩れ再起動を余儀なくされる
- 英語版を入れたせいか、日本語入力が不便(12.04でも英語版だったがこちらは問題なし)
一番困るのは不意にmozcが全角カタカナモードになってなんのキーを押しても戻らない事。
この時何故かScrollLockランプが点灯し、キーを押しても解除はできない。
戻すには一旦ログアウトしなければならず、大変不便である。ググッてもそれらしき症状の人が居なくて手詰まり。
mozcのキーコンフィグも効かない。GUIで設定を変更しても反映されてないという・・
他にはキーボードのリピート間隔設定も相変わらず反映されない。調べたところバージョン8くらいからずっとで、もう何年目だろうか。
この時何故かScrollLockランプが点灯し、キーを押しても解除はできない。
戻すには一旦ログアウトしなければならず、大変不便である。ググッてもそれらしき症状の人が居なくて手詰まり。
mozcのキーコンフィグも効かない。GUIで設定を変更しても反映されてないという・・
他にはキーボードのリピート間隔設定も相変わらず反映されない。調べたところバージョン8くらいからずっとで、もう何年目だろうか。