FPSを作ってみる@wiki
10)
最終更新:
slice
-
view
(2012/10/31)
メモリリーク
ふと,メモリどの位使ってるのかなーと前回のデモを起動してみたら32Mbyte程度だった.まぁそれはいいとして
ライト1個出す毎に5kb程度のメモリリークが.
プログラム終了時の解放し忘れならともかく動かしてる最中にこれは不味い.直さねば
ライト1個出す毎に5kb程度のメモリリークが.
プログラム終了時の解放し忘れならともかく動かしてる最中にこれは不味い.直さねば
(2012/10/30)
windows8導入
アップグレードでサクッっと,別パーティションに.
今すぐ乗り換える必然性というのは無いのだが。なんとなく.
たまにDirectX10(11)を触ってみたくなるのと対応ゲームも割と増えてきたとかは一応理由にはなるか.
あとXPからのアップグレード(ダウンロード版)はちょっと気が乗れば買っちゃう値段だし・・(結局これが一番)
メトロだったかモダンなんちゃらは全く興味ないので即効ClassicShellを入れ、フォントのアンチエイリアスも切った.
今すぐ乗り換える必然性というのは無いのだが。なんとなく.
たまにDirectX10(11)を触ってみたくなるのと対応ゲームも割と増えてきたとかは一応理由にはなるか.
あとXPからのアップグレード(ダウンロード版)はちょっと気が乗れば買っちゃう値段だし・・(結局これが一番)
メトロだったかモダンなんちゃらは全く興味ないので即効ClassicShellを入れ、フォントのアンチエイリアスも切った.
メモリが相変わらず4GBなんで64bitにする意義があまり感じられないとか、案の定HDDが足を引っ張ってスコアが下がってるとか色々
ところで
試しにwin8で自作のプログラムを動かそうとしたらd3dx9_43.dllが無いとか言われて起動できなかったのだが,DX9は動かない?
そんな訳ないよなぁ・・
そんな訳ないよなぁ・・
#追記
というかD3DXって何処で使ってたっけ?と思って検索かけたらD3DXEffectがそうじゃないか.これは流石に外せない.
他にはD3DXCreateCubeTextureFromFileInMemoryEx,D3DXGetImageInfoFromFileInMemory,D3DXSaveSurfaceToFileInMemoryと,ファイル入出力系の関数が.
他にはD3DXCreateCubeTextureFromFileInMemoryEx,D3DXGetImageInfoFromFileInMemory,D3DXSaveSurfaceToFileInMemoryと,ファイル入出力系の関数が.
現状
HDRのトーンマッピングまでは行けたものの,その後のブルームエフェクトをかけるにあたり
(何段階かに縮小してそれぞれガウシアンブラーしてってやつ)
レンダーターゲット記述フォーマットの不備があってまたしても頓挫中.
あと,画面サイズが例えば640x480の時にレンダーターゲットを640x480そのまま確保していいのか
やっぱり2の累乗サイズ(この例では1024x512)で確保して一部分だけ使った方がいいのか悩む.
速度的な意味で.
(何段階かに縮小してそれぞれガウシアンブラーしてってやつ)
レンダーターゲット記述フォーマットの不備があってまたしても頓挫中.
あと,画面サイズが例えば640x480の時にレンダーターゲットを640x480そのまま確保していいのか
やっぱり2の累乗サイズ(この例では1024x512)で確保して一部分だけ使った方がいいのか悩む.
速度的な意味で.
(2012/10/24)
パーツを削除
Twitterパーツを排除。理由は重いから。
メニューを出したり畳んだりするスクリプトも排除。理由は(ry
上記の為だけに導入したjQueryもお払い箱。
メニューを出したり畳んだりするスクリプトも排除。理由は(ry
上記の為だけに導入したjQueryもお払い箱。
デモについて
アンチエイリアス(DLAA)が追加された。
内部は1500行程書き換えたけれど動作は変わらない。
前と違ってMRTの定義、管理とか別ファイルでちゃんとやってるしHDRあたりすぐ出来ればいいが、
今までの分からするとそうは問屋が卸さないのだろうな。
内部は1500行程書き換えたけれど動作は変わらない。
前と違ってMRTの定義、管理とか別ファイルでちゃんとやってるしHDRあたりすぐ出来ればいいが、
今までの分からするとそうは問屋が卸さないのだろうな。
WebGLがwiki上で動かない
トップのカウンタが急上昇してるのはなんのことはない、
自分がトップページにWebGLのポリゴンデモを載せようと悪戦苦闘してただけだ。
元々このwikiにはjavascriptを記述する為のブロック文が用意されてはいるんだが文法が妙で
他のファイルからインクルードしたければ<script src="...">とHTMLタグを書くし(これマニュアルに載ってる?)
もちろんjavascript文法をそのまま書けたりもする。
しかしインクルードとその他文法を一緒のブロックに置くと不正な文字列とみなされエラー(コマンドだだ漏れ)
インクルードのsrcにURLを記述するわけだが、他のサーバーから持ってきたりするとページリロード5回に1回くらいの割合で
勝手にsrc="about:blank"にされてしまう。
自分がトップページにWebGLのポリゴンデモを載せようと悪戦苦闘してただけだ。
元々このwikiにはjavascriptを記述する為のブロック文が用意されてはいるんだが文法が妙で
他のファイルからインクルードしたければ<script src="...">とHTMLタグを書くし(これマニュアルに載ってる?)
もちろんjavascript文法をそのまま書けたりもする。
しかしインクルードとその他文法を一緒のブロックに置くと不正な文字列とみなされエラー(コマンドだだ漏れ)
インクルードのsrcにURLを記述するわけだが、他のサーバーから持ってきたりするとページリロード5回に1回くらいの割合で
勝手にsrc="about:blank"にされてしまう。
あの手この手で頑張ってWebGLを表示させるところまでは行ったものの、今度は他のページへのリンクやらが反応しなくなる。
これはWebGLコンテキストを取得した段階でなる様だ。その後すぐ破棄しても駄目。
これはWebGLコンテキストを取得した段階でなる様だ。その後すぐ破棄しても駄目。
正直言って訳がわからん。折角4年以上続けてきたatwikiだけど乗り換えようかねと思わざるを得ない。
ちなみに
WebGLでテストしたソースはGitHubに上げてある GitHub:RSJe
(2012/10/20)
Passは必要か
HLSLのPassを今までロクに使ってなかったのでこれを機に頑張って対応はしてみたものの・・
Passは幾つかのシェーダーを1セットで使う時に
見た目と描画処理が若干スッキリする事くらいしか利点が無い気がする.
Passは幾つかのシェーダーを1セットで使う時に
見た目と描画処理が若干スッキリする事くらいしか利点が無い気がする.
例えばTech Aの1pass目(エッジ抽出),Bの1pass目(ガウスフィルタ),Aの2pass目(何かポストエフェクト)
という描画順序だとすればpassを纏める意味が薄い.
この場合Bの1pass目に相当する宣言をAにコピペで加えれば良い話ではあるが同じような記述を何遍も書くのは,ちょっと.
内部的にも特にpassの切り替えでどうこうって訳でもなさそうだし
OpenGL(GLSL)に至ってはPass自体存在しない(よね?).
MRTが一般的でなかった頃のForwardRenderingにおけるマルチパス用途かなあ?と思う.
Techの中,Passの外に書けて重複するステート設定を省けますよってんなら分かるが,それは出来ないようだ.よくわからん.
現時点であって困ることはないがOpenGL用に移植しようとなるとやはり不要・・
という描画順序だとすればpassを纏める意味が薄い.
この場合Bの1pass目に相当する宣言をAにコピペで加えれば良い話ではあるが同じような記述を何遍も書くのは,ちょっと.
内部的にも特にpassの切り替えでどうこうって訳でもなさそうだし
OpenGL(GLSL)に至ってはPass自体存在しない(よね?).
MRTが一般的でなかった頃のForwardRenderingにおけるマルチパス用途かなあ?と思う.
Techの中,Passの外に書けて重複するステート設定を省けますよってんなら分かるが,それは出来ないようだ.よくわからん.
現時点であって困ることはないがOpenGL用に移植しようとなるとやはり不要・・
ちなみにVertexShader = compile vs_2_0 Func(); 等と書くコンパイル宣言はTechの外でも可能.
というより複数箇所で使う場合にはその方が容量が小さくなる.
というより複数箇所で使う場合にはその方が容量が小さくなる.
ま,ともかく.
以前の表示が出来る段階までは来たのでデモまでもう一踏ん張りといった所か.
以前の表示が出来る段階までは来たのでデモまでもう一踏ん張りといった所か.
#追記
とは言いつつも冗長とはいえステート記述をコピペして1纏めにするのも悪くない気がしてきた
(2012/10/19)
レンダーターゲットの管理
アンチエイリアス(DLAA)はサンプルをほとんどコピペして早々に完了していた。
しかし次のHDRを実装するにあたってブルームに必要なガウスフィルタ等を組み込む作業で
「この際レンダーターゲットの定義とかちゃんとしようと」仕様を決めてたら思った以上に大掛かりで
てんやわんやしてる所である。
まだ延びるようであれば一旦アンチエイリアスだけのバージョンをv0056_1として公開してしまおうかと。
しかし次のHDRを実装するにあたってブルームに必要なガウスフィルタ等を組み込む作業で
「この際レンダーターゲットの定義とかちゃんとしようと」仕様を決めてたら思った以上に大掛かりで
てんやわんやしてる所である。
まだ延びるようであれば一旦アンチエイリアスだけのバージョンをv0056_1として公開してしまおうかと。
定義方法については2,3種類試した末に「別途JSONファイルとして記述」となった。
各RTのフォーマット、テクスチャとしての設定、クリア方法など・・
これに限った話ではないけどスクリプトやシェーダーはテキストデータなんで興味があればどうぞ。
現在もう少しで新方式で前と同じような描画が出来るかな?という段階。頑張るしか無い。
各RTのフォーマット、テクスチャとしての設定、クリア方法など・・
これに限った話ではないけどスクリプトやシェーダーはテキストデータなんで興味があればどうぞ。
現在もう少しで新方式で前と同じような描画が出来るかな?という段階。頑張るしか無い。
(2012/10/09)
デモ更新
んーまあ,目新しい所といえばオートカメラとライトがランダム軌道で動くの位しか・・
透明な円柱がちゃんと前後関係を考慮して描画される!とはいっても,こちとら数百回は見てるんでもう飽きた.
あと色々変えてたらスキンメッシュが正常に描画されなくなってしまったので一旦除外しておいた.そのうち直す.
透明な円柱がちゃんと前後関係を考慮して描画される!とはいっても,こちとら数百回は見てるんでもう飽きた.
あと色々変えてたらスキンメッシュが正常に描画されなくなってしまったので一旦除外しておいた.そのうち直す.
見えない所ではログファイルが出力されるようになっている,
ウィンドウ閉じでプロセス残るバグの修正,透明物が視界に入ってない場合のカリング,アンビエントライト調整・・等.
それ以外特に書くことがないので,次は見栄えのする更新がしたい.
ウィンドウ閉じでプロセス残るバグの修正,透明物が視界に入ってない場合のカリング,アンビエントライト調整・・等.
それ以外特に書くことがないので,次は見栄えのする更新がしたい.
ゲーム以外の事
ちょくちょくとOpenGL(WebGL & GLSL)をいじっていたり.
Qtライブラリを最新版のgccでビルドしたいし,どうせならLinuxからLinuxとWindowsバイナリ両方を出力できたら便利だと思ったので
Linux -> Windowsのクロスコンパイル環境を構築しようと思い立つ.
当初,QtをWindows上のmingw32でビルドしようと思ったら,どうやら32bitWindowsのメモリ2GB制限でデバッグ版が生成できなくって
ここで大人しくwindows7を買おうとなるなら技術者として失格な気がした.
そんな訳で悪戦苦闘.
Qtライブラリを最新版のgccでビルドしたいし,どうせならLinuxからLinuxとWindowsバイナリ両方を出力できたら便利だと思ったので
Linux -> Windowsのクロスコンパイル環境を構築しようと思い立つ.
当初,QtをWindows上のmingw32でビルドしようと思ったら,どうやら32bitWindowsのメモリ2GB制限でデバッグ版が生成できなくって
ここで大人しくwindows7を買おうとなるなら技術者として失格な気がした.
そんな訳で悪戦苦闘.
QtはLinux -> Linuxなら問題なくビルドが通るのだがmingw32でクロスコンパイルするとリンクエラーが出たりする.
QSjisCodec::QSjisCodec()がundefinedとか行って来るから仕方なく手動でそのクラスをコンパイルしオブジェクトファイルを突っ込むと
今度は_imp__XXXXなんちゃらかんちゃらがundefinedと言われる・・ので未完.
QSjisCodec::QSjisCodec()がundefinedとか行って来るから仕方なく手動でそのクラスをコンパイルしオブジェクトファイルを突っ込むと
今度は_imp__XXXXなんちゃらかんちゃらがundefinedと言われる・・ので未完.
ちなみにQt5で試すと今度は
undefined reference to `__dso_handle' と
undefined reference to `__cxa_atexit' が出る(もちろんターゲットlinux-g++では出ない)
これってgccにおけるC++のコンストラクタとデストラクタ周辺の関数だっけ?
もしかしてgccが新しすぎるとか?
誰か詳しい人教えて欲しい.
undefined reference to `__dso_handle' と
undefined reference to `__cxa_atexit' が出る(もちろんターゲットlinux-g++では出ない)
これってgccにおけるC++のコンストラクタとデストラクタ周辺の関数だっけ?
もしかしてgccが新しすぎるとか?
誰か詳しい人教えて欲しい.
予定
サクッと2つほど視覚エフェクトを実装してデモ公開へ.
アンチエイリアスとHDRとか?
アンチエイリアスとHDRとか?
(2012/10/01)
遅れが目立つ
無念.結局あれからデモを出せないまま10月を迎えてしまった.
1ヶ月1回ペースとかじゃ(何となくだが)駄目.せめて週1ペースで行きたい.
1ヶ月1回ペースとかじゃ(何となくだが)駄目.せめて週1ペースで行きたい.
ようやく解決か・・?
当面の予定としては「とにかく一日でも早くデモを出す」事に終始するわけだが・・
境界ボリュームを求める為の主成分解析がえらく難航している.
一応ルーチン自体は組めたけどいくつかの問題点が.
1. 物体が大き過ぎると行列の固有値が虚数になる
対称行列の固有値は実数になる筈
2. 球体,円柱など軸対称オブジェクトにおいて主成分3軸が求まらない
最後の連立1次方程式を解くと全部0になってしまう
境界ボリュームを求める為の主成分解析がえらく難航している.
一応ルーチン自体は組めたけどいくつかの問題点が.
1. 物体が大き過ぎると行列の固有値が虚数になる
対称行列の固有値は実数になる筈
2. 球体,円柱など軸対称オブジェクトにおいて主成分3軸が求まらない
最後の連立1次方程式を解くと全部0になってしまう
1については適度に物体を縮小してやれば解決できた.浮動少数点数精度の関係だろうかね?
floatはもちろん,doubleで計算してもなかなか厳しい様子.もしかしたら計算間違えてる可能性もある.
floatはもちろん,doubleで計算してもなかなか厳しい様子.もしかしたら計算間違えてる可能性もある.
2はスマートに解決する手段を思いつかなかった.
ので,どうせゲームだし大体でいいやと思い一度計算してみて駄目だったら
全部の頂点位置を微量ずつランダムに動かして再計算というある種の暴挙に出た.
ただこれが割と上手くいってるようで2回目のトライで使ってるモデルは全部通る.
ので,どうせゲームだし大体でいいやと思い一度計算してみて駄目だったら
全部の頂点位置を微量ずつランダムに動かして再計算というある種の暴挙に出た.
ただこれが割と上手くいってるようで2回目のトライで使ってるモデルは全部通る.
残る課題と妥協
これを利用した透明物体ソートの動作確認と,ライトの軌道制御がカクカクしすぎているのでパラメータを少し調整したらデモ出せそう.
複数モーションの補間についてはコーディングしたっきりで碌にデバッグをしていないのと
やはりサンプルが難儀という理由で見送り.
やはりサンプルが難儀という理由で見送り.
添付ファイル