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

FPSを作ってみる@wiki

07)

最終更新:2014年07月28日 22:09

slice

- view
管理者のみ編集可

(2014/07/28)

とりいそぎ

急いでないけど絵だけ公開
Drawing(analog)

(2014/07/19)

テストフレームワーク

BoostTestとGoogleTestのどっち使おうかという話。
一応両方試した。身構える程難しくなかった。

結論としては「どっちでもいいんじゃないの?」と。
かなりマニアックな事をすれば違ってくるんだろうけども、普通にテスト書く分にゃほぼ同じ。
どっちでもいいとなれば新しい方を使おうという事でGoogleTestに決定。
ただ、BoostTestはヘッダのインクルードだけで使えるバージョンもあるから
ちょっと書いてみたアプリケーションを手軽にテストしたい時に便利かも。

ULPs

GoogleTestのリファレンス
を読んでいた時に浮動小数点数の比較が詳しく載ってたのでついでに。
浮動小数点数(以下floatと呼ぶ)の計算には誤差がつきものだが
大抵のプログラミング入門的なwebページや参考書は「誤差が出る」ことと
「だから比較には許容値(epsilon)を設けましょう」までしか書いてない気がする。

いや、epsilon自体はともかくこれを何の策もなく絶対値にしてしまう事が問題で
一口に値と言っても0付近の小さい値か1000000.0のような大きい値かでfloatの分解能が異なる。
もちろん弾丸の当たり判定でこの位の大きさを扱うからこの誤差、キャラクター同士の判定にはこれと決めれば
ある程度カバーできるが、どうにも柔軟性に欠ける訳で。

ではと、比較する時に値をチェックし小さい値なら小さい誤差、
大きければ大きい誤差という風にepsilonを相対的にすれば良さそうに思える。
これは絶対値よりはマシなものの、余程上手く調整しないと0付近の比較が細かすぎたりして上手く行かない。
余計な処理が増えて結局調整が必要なら絶対値でいいじゃんという気も。

当てずっぽうにそれらしい誤差値を使うのではなく
要はfloatで表現できる最小の刻み幾つ分を許容するっていうのがやりたい。
こういうのは割とメジャーな話題のようで、その辺が
http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
ここに詳しく書かれている。
乱暴に言ってしまえばfloatをin32_tにreinterpret_castして
それをインクリメントするとfloatで表現可能な最小単位(Unit in the last place = ULP)で1だけ0から離れる方向へ、
デクリメントすれば0に近づく方向へずらせるというもの。
負数と正数の場合でちょいと工夫してやれば2つの値のULPsが求まるので、
同じくULPsで指定された許容誤差と比べれば目的の挙動が達成出来る寸法。

ところでここまで書いておいてアレだが
ベクトルや平面、行列など使って色々していると
長さが1のはずのベクトルが0.997だったり、その程度の誤差はすぐ出てしまうので
やはり用途に合った許容誤差は必要なのだという結論に。しかも大抵は大小比較があれば事足りるし。
だからあまり触れられないのか・・

最終的に自分のライブラリでは
// float定数のULPs単位での差をコンパイル時計算するルーチン
constexpr int32_t ULPs_C(float val0, float val1);
// ULPsを実行時計算するルーチン
int32_t ULPs(float val0, float val1);
// ULPsで誤差を指定するfloat値比較
bool EqULPs(float val0, float val1, int32_t ulps);
を用意し、例えばfloat精度で1.0が1.001だったりする位の誤差なら許容する場合
constexpr int32_t ulps1_0 = ULPs_C(1.0f, 1.0f+1e-3f);
EqULPs(val0, val1, ulps1_0);
のように書く形で落ち着いた。
従来度通り絶対値で誤差を指定したければEqAbs(val0, val1, 1e-3f)など。

絵

あくまでメインはプログラミングなので気が向いた時に気が向いた対象を描く方針。
下書き(?)が終わり次回の更新でアップできればいいなという感じで、マッタリと。

(2014/07/15)

プログラムが思うように進まないのでスクリーンショットの代わりに絵でお茶を濁す。
自分の左手。今回は陰影を付けずにイラスト風でやってみた。
グラデーションの作業は要らなくなるがどの線を残すか(強調するか)っていう勘所がよくわかんなくて
これはこれで難しい。
模写とか実物を見ながら描く絵は全体のバランスにさえ気をつければ結構それっぽくなっちゃうもんだね。
人の顔はそうもいかなそうだけども。

問題は想像しながら描く時のパースで、歪ませるといっても自分にはどうやっていいのかさっぱり。
3DCGには少し覚えがあるという事でまずバウンディングボックスを描いて、それから中を・・とやってみても
箱自体は確かにパースがかかって立体的、だがしかし。みたいな。

自分のボキャブラリじゃ上手く表現できないのが残念だが、強いて言えば
絵の初心者にありがちと思われる、左右をなるべく対称に描かないと不安になるとか
物が重なる(後ろの物が隠れて一部見えなくなる)構図を無意識に避けようとする現象。

ま、地道に行くしかないか。

プログラムの方はテクスチャで詰まる

今の実装ではモデルのテクスチャをSDL_imageで行っている関係で
ファイルを一旦SDL_Surfaceに落としてから改めてglTexImage2D等を呼びGPUに転送している。
SDL_Surfaceを経由するという事は、当然SDLのピクセルフォーマット -> OpenGLのテクスチャフォーマットの関連付けが必要となる。
どうするか?と、問われてもSDLはともかくOpenGLの定数はフォーマットと中身の値に関連性が無いので
仕方なくリスト化してポチポチ打ち込んでた。

SDLのピクセルフォーマットにはヘッダを見るに16bit(float or int)や32bit floatを示す定数があって、
てっきりSDL_SurfaceにRGB16(Red,Green,Blue(16bits))なんかも扱えるものだと思って組んでいたら
どうもRGBA合わせて32bitまでの整数フォーマットしか受け付けないご様子で色々と組み直しになったり。
試しにSDL_ConvertSurface()の引数にRGBA(float)なんかを食わせるとunknown formatと怒られてしまう。
将来的にサポートするつもりという事だろうか・・

あとSDLのピクセルフォーマットの表記でも引っかかった
Red=0xff, Green=0x80, Blue=0x3fだったとすると
SDL_PIXELFORMAT_RGB24はメモリ上に
0xff, 0x80, 0x3f
と並ぶが
SDL_PIXELFORMAT_RGB888では
0x3f, 0x80, 0xff
なのだ。
これはどういうことかと言うとヘッダを見るとわかるがSDL_PIXELFORMAT_RGB24は
SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGBとなっており
意味は中身がuint8_tの配列で、要素の並び順はR -> G -> B
対してSDL_PIXELFORMAT_RGB888は
SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGBで
中身は32bit値にhigh bitからX -> R -> G -> Bの順でパックされている
という意味になる。Xのところは使われない。

もしかしてCPUがビッグエンディアンだったりすると違うのかもしれないが
とりあえずリトルエンディアンの環境だと上記の例は
0x00ff803f [32bitパックされた状態]
0x3f, 0x80, 0xff, (0x00) [メモリの配置]
長くなってしまったが、要するに名前が似てるのに配置が逆なのだ。紛らわしい。
これを知った上で改めてPIXELFORMATを眺めると
RGBA8888のように要素ごとのbit数が並んでる物はパックされていてメモリ上では表記と逆の配置、
RGB24のように全体のbit数が1つだけ書いてあればそれは配列形式でメモリ上でもそのまま。
という事に気づく。けど、パッと見てこうだ!とは、ならんよなぁ。

テスト

行列とかベクトルなんかの計算をするクラスはテストコードが必須、
でも漠然とランダムデータを生成してエラーチェックしていてもなんだか釈然としない。
(それ以前にまともなテストコード書いてないのはともかく)
テストコードにはそれ用の書き方がある筈だし
チームで開発しなくても普通はテスト用のフレームワーク使うよな。
と思ったのでこれを機に調べて使ってみたい。

候補はGoogle TestとBoost Test。
Boostが既に導入済みなのでとりあえずBoost Testから試す所存。

(2014/07/06)

FBXとモデル

相変わらずモデルの読み込みや描画を詰めている(煮詰まっているともいう)
コード書き直しばっかりでページに乗せられるような画像が上がってこない。

前にも書いたかもしれないが、FBXはあくまでもモデラー間のデータ受け渡し用であって
ゲームにそのまま使える代物じゃないだろって思う。
プログラミング解説のサイトなんかで
DirectX9までで使われてたXファイルが廃止されちゃったから代わりに使えそうなのはFBXだーみたいな記述を割と目にするけど
汎用的すぎてゲームに無用な情報が多い。
デバッグ時にモデラーから出力したFBXを直接読み込ませたいならともかく
自分はゲーム本体にFBXライブラリをリンクしたくはないかなぁ。
ライセンスの問題もありそうだし、それ以前にAndroid向けのライブラリが用意されてないとか。

プログラミング以外の・・

ところで長らく殺風景だったWeb拍手のお礼画面の画像、またはtwitterの投稿からわかる通り
プログラミングの他に取り組んでる事というのは絵の練習。
何故かと言うと、それをここに書くにはスペースが足りないので詳細は省くが言ってみれば
「描けると楽しそうだから」
に尽きる。
例えば何かネタを思いついたとしてそれを面白おかしくtwitterで伝える為に文章だけというのは結構難易度が高い。
したがって百聞は一見に如かず、画像でとなり
自分の場合2Dの絵は描けないから3DCGでやろうとすると後ろ側までモデリングした後にテクスチャとエフェクトを作らなければならないし、
ネタは鮮度が命なのにそんな悠長なことをやっていては作る側としても気分が覚める。
第一視点を変更して何回も描画する訳でもないのにわざわざ3Dで作る利点って何よ?とか。
自作ツールに使うアイコン等の小さい画像にしても3DCGで作って縮小すると大抵メリハリついてなくて微妙になったりするので
描けないからとも言ってられず、必要性を感じた次第である。

そこですぐに始められる第一歩として鉛筆またはシャーペンと紙で写真やイラストの模写なんかをやっている。
方法論はよく知らんけど見よう見まねでやってればちょっとくらい出来るようになるだろうとの目論見。
絵の練習は下手くそでも描き終われば一区切りつくし前回との差異もわかりやすく
何かしら目に見える形で成果が残せて、ぶっちゃけ今の所プログラミングなんかよりずっと楽しく
余計にプログラミングが進まない格好に。

こうなると近々ペンタブが必要になってくるのかもしれないが、まだ何とも。
(とか言いつつamazonをチラチラ)

「07)」をウィキ内検索
LINE
シェア
Tweet
添付ファイル
  • handC.jpg
  • hardballer0.jpg
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
もっと見る
最近更新されたページ
  • 2687日前

    menu_L
  • 2687日前

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

    Drawing_digital_13
  • 2687日前

    Drawing_digital_12
  • 2687日前

    トップページ
  • 2892日前

    Drawing_digital_11
  • 2974日前

    Drawing_digital_10
  • 3006日前

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

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

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

    menu_L
  • 2687日前

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

    Drawing_digital_13
  • 2687日前

    Drawing_digital_12
  • 2687日前

    トップページ
  • 2892日前

    Drawing_digital_11
  • 2974日前

    Drawing_digital_10
  • 3006日前

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

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

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

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

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

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

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