atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
ページ検索 メニュー
FPSを作ってみる@wiki
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
FPSを作ってみる@wiki
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
FPSを作ってみる@wiki
ページ検索 メニュー
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • FPSを作ってみる@wiki
  • 進捗状況(2013
  • 07)

FPSを作ってみる@wiki

07)

最終更新:2013年07月30日 23:33

slice

- view
管理者のみ編集可

(2013/07/30)

プログラム側に関してはとりあえず公開できそうな状態には出来た。が、debianパッケージの作り方を忘れる。
それとメインで使ってるコンパイラが今clang3.4なのだけどwindows用にクロスコンパイルするにはどうすればいいのかわからないので
ひとまずgcc4.81とmingwでやろうかなと試みるもgccではコンパイルが通らない。
まぁclangでクロスコンパイルも調べれば出来るとは思うが
githubで公開してるようなソースがgccでコンパイル出来ないのもアレなので直すことに。

具体的にはclangで許容されていた書き方や新しい言語仕様がgccにはまだ無かったり
当方32bit環境な事もあってコンパイラの使用メモリが2GBを超えるとメモリ確保失敗エラーで落ちてしまうからファイルの分割をする等。
(今まではclangの方がメモリ消費が少ないから問題にならなかっただけ)
これからソースを修正しーの動作テストしーので8月までにアップ出来れば理想か。

その後clang + mingwも調べるつもり。

(2013/07/29)

もうちょい

やっと安定してきた。
積分の公式なんて久しく使ってないしそこから復習だったんで随分時間かかった。
いや、正確には3Dな計算式は論文に書いてあるのだが2Dは自分で出す必要があったので。

計算式がどこかが間違っているのか、それともアルゴリズムが不味いのかよく分からんが
当初は箱を地面に置いたら摩擦が強すぎて暴れだすし、箱を3つ以上積んだら吹っ飛ぶしで何度心が折れた事か。
とはいえ今まで3回か4回挫折して来てまた今回も諦めるという事態になれば
これは自分はもとより誰が見てもヘタレであるのは明白なので負けじと食い下がった。

最終的に摩擦力のトルクだけ0.1を掛けたら何故だか嘘のように安定しだして
それから箱を5、6個積もうが微動だにしないし
30個積んだら流石に精度の問題で崩れはするが残骸の積み重なり方がそれっぽい挙動を示すので自分としては満足している。
理由の追求をする気力はもう残っていないものの、とりあえずこれで何かしらのデモが出せる訳だし。

現在はQtを使ったインタフェースの整備。
最後に触ったのは半年前ですっかり忘れてしまったがそんなのは些細な事、学び直せば良い。
少なくとも先の見えないシミュレーターの調整よりはずっとマシ。

予定

7月末までに出来ればデモを、最低限動画をアップする。
8月に入ったら上旬は自前OpenGLエフェクトファイルの整備をしつつOpenGLに慣れる。それと各種シェーダー技法の選定と資料集め。
中旬から下旬にかけては例の「グラフィック強化期間(with OpenGL)」とし、見栄えのする動画やデモを続々とアップしていければと。

(2013/07/24)

接触面

接触法線の計算まだしてなかった。
接触体積に基づくペナルティ法では物体が重なった体積を元に押し出す力を算出するのであるが
重なった部分の凸包だけ渡されても物体がどの方向から、どの角度で衝突したのかがわからず計算のしようがないので
「この面に対して衝突した」という指標が要る。
これが接触法線(または接触面?)。
物体が回転していたりすると場所によって衝突の力がマチマチになると思うが
そこまで詳細にやると計算が面倒という事で通常は全部接触面上で衝突したとみなして力を計算するようだ。

で、この接触面。
例えば平らな地面と箱の場合だったら接触面の位置は常に地面上のどこか、法線は地面の向き=上となるので
とりあえず決め打ちでハードコーディングしていて今までまじめに計算して来なかった。
当然これだと平らな地面に箱を1つ静止させるしか出来なくて使いものにならない為、今回ちゃんと実装した。

これからテストして箱を2つ以上出して無事に積み上げられたら動画でも上げてみようかと思っている。

(2013/07/20)

時間が過ぎる

おおっと、もうこんな日付。2D物理に時間費やしすぎじゃないか?
と思って履歴見たらそうでもなかったという。

じゃあ何してたかといえばGLEffectで2D物理を表示したいけど実際はなんもその準備が出来てなかった!
 -> リソースハンドル使ってOpenGLリソースや剛体の管理、あとバグ取り
う~ん・・・大した事してないかも。

物理シミュのステップ計算

安直にオイラー法で計算を進める分には特に何も考えず
姿勢更新 -> 衝突判定 -> 姿勢更新 ・・・とやっていけば良いのだが
如何せんオイラー法は安定しない。箱を地面に静止させるのも一苦労だ。
去年の年末に出したような動画が妙にスローモーだなと感じた人も居ると思うが、
あれは正にオイラー法で動かしていてあのくらい時間刻みを細かくしなければすぐに箱が吹っ飛んでしまうからなのであった。

ならばと、改良オイラー法や4次のルンゲクッタとか使おうとなる訳だが
こいつらは途中で何回か加速度すなわち衝突判定の結果が要る。

例えば改良オイラー法では一旦オイラー法で次の位置や速度を出してそこで受ける加速度(物体の衝突で受ける力を含む)を計算、
それを踏まえて次ステップでの姿勢を出すわけなので
すべての動くオブジェクトはまず中間姿勢を計算したら一旦そこで止め、改めて衝突判定をして
後半の処理を行う・・という具合になる。・・・で、合ってるよね?多分

勿論こういうのは決め打ちで組み込むんじゃなくて
処理負荷や安定性を見ながら複数のアルゴリズムをとっかえひっかえしたいというのは皆が思う事。
従って仮想関数の呼び出しコストがどうのと五月蝿い環境でも無し、インタフェースを決めて動的に切り替えられるようにした。

ただ当然の如く衝突判定の負荷が改良オイラー法では倍、4次のルンゲクッタだと更にその倍にもなってしまうという。
確かに劇的に安定するのだが。
ちなみに衝突判定を手抜きで4次のルンゲクッタだけど加速度は最初の衝突結果を使いまわしたりなんてのも試したが精度がガタ落ち。

ところでOpenDynamicsEngineは1次のオイラー法だと聞いたが、
自分の実装が不味かったのか、単に時間刻みを細かくしているのか
1次のオイラー法にも陰的と陽的があってその辺の違いなのか・・

その他

来る「グラフィック強化月間」に向けて実装したいアルゴリズムを物色。
前にも書いたけどLiSPSMとSSAO(のリベンジ)、それにSSDOやRLRにも挑戦したい。
いや。実はまだある。
DX10相当の機能を使った海レンダリングとか、プロシージャルな木の生成などなど。
Sphere harmonicsも気になったけど前提知識が足りてなさげなのでパス。

(2013/07/08)

noseq_listの配列一本化

面倒だからと言いつつ気にはなる訳で、えいやっとやってしまった。
どうせvectorやmatrixクラスでboost使ってるんだから今更boost依存も何もない、boost::optionalとboost::variantも遠慮無く使った。
最初はソースちょっと変えればと高をくくってゴチョゴチョといじっていたら案の定訳がわからなくなり
200行にも満たないんだし結局1から組み直したらサクッと行けた。この辺が未だに初心者臭い。

リファクタリングなので動作は変わらず。詳細はいつも通りgithub/spinner/noseq.hppにて。

GLEffect公開

リポジトリ作っておもむろにアップロード。この前言ってたOpenGLでDirectX9のエフェクトファイル風にシェーダーを書く仕組みである。
勿論途中なので実用性はなく、
このままコンパイルするとやはり前にアップロードしたようなチェッカー模様の四角ポリゴンが回るサンプルが出来上がるだけ。
一応EBNFでフォーマットを書き記してはみたが・・プログラム作りながらboost::spiritの勉強しながらだったので色々とフォーマット的に無駄がある。
そのうち直すと思う。
github/GLEffect
ちなみにコンパイルにはclangを使っているのでgccな人はqtglsl.proファイルを弄ってなんとかして下さい。

こんなとこか。

githubのリポジトリが増えるにつれ妙な満足感と自信が湧いてくる不思議

(2013/07/06)

要素の登録、削除、全走査(巡回)

オブジェクトをある集合に任意で追加や削除して、あるタイミングで全走査をしたいとなった場合のデータ構造について。
今まではstd::unordered_setを使ってテキトーに済ませていたが
自分がプログラミングする上で地味に現れるのでちゃんと実装せねばと前々から思っていた。
間近のケースで言えば「当たり判定のオブジェクト集合」とか。

なんでunordered_setじゃ駄目かといえば
stdの実装はチェイン法なのでメモリが散らばるのが宜しくないし
ハッシュで格納場所を決めているわけだが、そもそも検索など必要ないというのもある。
要はオーバースペックなのではと。
巡回速度にしたってstd::mapよりはマシという情報もあるものの、そもそものstd::mapが遅すぎるんで・・

要求は以下
  • メモリを散らかさない
  • 追加と削除と巡回は速く
  • 集合内における要素の順序はどうでも良い
  • 巡回中は追加や削除をしない

1つ目の要求で配列ベースというのが決定。
その上で2つ目の要求に応える為に3つ目に書いた前提を使う。
といっても複雑な事をする必要は全くなく、要素を削除した時に後ろをずらさずに
削除した隙間へ最後尾の要素を突っ込んでやればいい。
追加は勿論最後尾へ。
4つ目はまぁ、読んでそのまま。これが汎用クラスと言い張るにはネックになりそう。

ところで問題は追加と削除の時にどうやってオブジェクトの位置を特定するかだが・・
これについてはオブジェクトを登録した時にIDを返し、削除の際はそのIDを渡すようにする
従ってオブジェクト配列とは別に「IDとオブジェクトの位置」の対応付けをするもう一本の配列(UID配列)を用意。
更にUID配列の空き位置を保持するフリーリストを用意。(UID配列まで順序無しにしたら意味が無いので)

なんだ。合計配列3本も確保してたら遅いじゃないかと思われるかもしれないが
空き要素のフリーリストというのはUID配列の使ってない要素数分だけしか要らないので、UID配列に統合してしまえる。
更にオブジェクト配列とUID配列の長さは同じになるので、オブジェクト領域とセットで格納してしまえば最終的には1本に出来る・・筈。

配列の一本化までは面倒くさくてやってないけど二本で済ませるとこまでは完了。
詳細はgithubリポジトリboomstickのnoseq.hppにて。(non-sequenceの意)

実装してから思ったがこれはオブジェクトに対してハンドル値を割り当てる、いわゆるリソースマネージャの様な物じゃないか。
違いといえば参照カウンタと弱参照ハンドル、エラーチェックのマジックナンバーの有無くらいか。
であれば前述の機能を追加してこのクラスに弱参照ハンドル生成をプラスしたリソースマネージャを作ればよりスマートな予感。

(2013/07/02)

未遂

ううむ。結局2D物理が完成しないまま7月になってしまった。
現在の完成度はデバッガで追いかけて「まぁ、動いてるかなぁ?」くらいのレベル。
だがここに来て剛体の体積や質量のキャッシュ機構がおざなりな事が発覚し、設計中。
読んで字のごとく体積(2Dだと面積だが)や慣性モーメントを計算&キャッシュ&取得する関数を用意するだけなのだが
物によっては体積を求める過程で出る中間変数が、他の計算にも使える事はままある訳で、
そういった時に一旦破棄して再計算は無駄だから体積と重心は一緒に計算してしまってキャッシュのフラグも同じにするとか。

これが終わったらシミュレーションは表示できてナンボなので
さっさと例のOpenGL-Effectな表示ルーチンを組み込みたい所ではある。
2D形状のインタフェースが割と固まってきたからきっと3Dになっても前のソースを参考にサクッと行けるはず!との期待を胸に・・
「07)」をウィキ内検索
LINE
シェア
Tweet
添付ファイル
  • rigid2d_0.png
FPSを作ってみる@wiki
記事メニュー
  • トップページ
  • 参考資料ブックマーク等
  • Tips

Media

  • 頂き物
Screen shot
  • FPS_page1
  • FPS_page2
  • FPS_page3
  • Other_page1
Drawing
  • Drawing(analog)
  • Drawing(digital)
  • Drawing(digital) 2
  • Drawing(digital) 3
  • Drawing(digital) 4
  • Drawing(digital) 5
  • Drawing(digital) 6
  • Drawing(digital) 7
  • Drawing(digital) 8
  • Drawing(digital) 9
  • Drawing(digital) 10
  • Drawing(digital) 11
  • Drawing(digital) 12
  • Drawing(digital) 13
Movie
  • movies-list

Old Contents

  • トップページ(old)
  • メモ書き
  • 力仕事UP場
  • ゲームシステムとか
  • バグ・動作報告
  • program(twilve)

Progress log

  • (2018/03)
  • (2017/04)
  • (2017/03)
  • (2016/10)
  • (2016/09)
  • (2016/08)
  • (2016/07)
  • (2016/06)
  • (2016/05)
  • (2016/04)
  • (2016/03)
  • (2016/02)
  • (2016/01)
  • (2015/12)
  • (2015/11)
  • (2015/10)
  • (2015/09)
  • (2015/08)
  • (2015/07)
  • (2015/06)
  • (2015/05)
  • (2015/04)
  • (2015/03)
  • (2015/02)
  • (2015/01)
  • (2014/12)
  • (2014/11)
  • (2014/10)
  • (2014/09)
  • (2014/08)
  • (2014/07)
  • (2014/06)
  • (2014/05)
  • (2014/04)
  • (2014/03)
  • (2014/02)
  • (2014/01)
  • (2013/12)
  • (2013/11)
  • (2013/10)
  • (2013/09)
  • (2013/08)
  • (2013/07)
  • (2013/06)
  • (2013/05)
  • (2013/04)
  • (2013/03)
  • (2013/02)
  • (2013/01)
  • (2012/12)
  • (2012/11)
  • (2012/10)
  • (2012/09)
  • (2012/08)
  • (2012/07)
  • (2012/06)
  • (2012/05)
  • (2012/04)
  • (2012/03)
  • (2012/02)
  • (2012/01)
  • (2011/12)
  • (2011/11)
  • (2011/10)
  • (2011/09)
  • (2011/08)
  • (2011/07)
  • (2011/06)
  • (2011/05)
  • (2011/04)
  • (2011/03)
  • (2011/02)
  • (2011/01)
  • (2010/12)
  • (2010/11)
  • (2010/10)
  • (2010/09)
  • (2010/08)
  • (2010/07)
  • (2010/06)
  • (2010/05)
  • (2010/04)
  • (2010/03)
  • (2010/02)
  • (2010/01)
  • (2009/12)
  • (2009/11)
  • (2009/10)
  • (2009/09)
  • (2009/08)
  • (2009/07)
  • (2009/06)
  • (2009/05)
  • (2009/04)
  • (2009/03)
  • (2009/02)
  • (2009/01)
  • (2008/12)
  • (2008/11)
  • (2008/10)
  • (2008/09)
  • (2008/08)
  • (2008/07)
  • (2008/06)
  • (2008/05)
  • (2008/04)



記事メニュー2

Update Log

取得中です。
人気記事ランキング
  1. Drawing_analog
もっと見る
最近更新されたページ
  • 2686日前

    menu_L
  • 2686日前

    進捗状況(2018/03)
  • 2686日前

    Drawing_digital_13
  • 2686日前

    Drawing_digital_12
  • 2686日前

    トップページ
  • 2892日前

    Drawing_digital_11
  • 2973日前

    Drawing_digital_10
  • 3005日前

    進捗状況(2017/04)
  • 3046日前

    進捗状況(2017/03)
  • 3097日前

    頂き物
もっと見る
人気記事ランキング
  1. Drawing_analog
もっと見る
最近更新されたページ
  • 2686日前

    menu_L
  • 2686日前

    進捗状況(2018/03)
  • 2686日前

    Drawing_digital_13
  • 2686日前

    Drawing_digital_12
  • 2686日前

    トップページ
  • 2892日前

    Drawing_digital_11
  • 2973日前

    Drawing_digital_10
  • 3005日前

    進捗状況(2017/04)
  • 3046日前

    進捗状況(2017/03)
  • 3097日前

    頂き物
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. MadTown GTA (Beta) まとめウィキ
  2. AviUtl2のWiki
  3. R.E.P.O. 日本語解説Wiki
  4. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  5. シュガードール情報まとめウィキ
  6. ソードランページ @ 非公式wiki
  7. ドラゴンボール Sparking! ZERO 攻略Wiki
  8. シミュグラ2Wiki(Simulation Of Grand2)GTARP
  9. 星飼いの詩@ ウィキ
  10. Dark War Survival攻略
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 検索してはいけない言葉 @ ウィキ
  6. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  7. 発車メロディーwiki
  8. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  9. オレカバトル アプリ版 @ ウィキ
  10. SDガンダム ジージェネレーションジェネシス 攻略Wiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 過去の行動&発言まとめ - 鹿乃つの氏 周辺注意喚起@ウィキ
  2. マイティーストライクフリーダムガンダム - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  3. 魚拓まとめ - 鹿乃つの氏 周辺注意喚起@ウィキ
  4. 参加者一覧 - ストグラ まとめ @ウィキ
  5. 1103環境(遊戯王) - アニヲタWiki(仮)
  6. 前作からの変更点 - 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  7. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  8. コレクター・ユイ - アニヲタWiki(仮)
  9. サーヴァント/一覧/クラス別 - Fate/Grand Order @wiki 【FGO】
  10. 画像倉庫 - 鹿乃つの氏 周辺注意喚起@ウィキ
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.