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

FPSを作ってみる@wiki

06)

最終更新:2014年06月22日 18:55

slice

- view
管理者のみ編集可

(2014/06/22)

左下に軸表示するとモデラーぽくて格好良いね
とはいえ、まだそんな事やってるのかという・・
いつも通りgit履歴を見ながら書く。
テクスチャ表示はオマケ。こんなんチャッチャとやればパッと出るわみたいな。

OpenGL APIのラップ

OpenGLの関数を読み込んでそれをラップしたクラス経由でAPIを呼び出す仕様なのだが
Debug版では自動的にglGetErrorによるエラーチェックを挟み、何かエラーがあればコンソールに出力するようになっている。
(勿論glGetError自体はチェックしない)
OpenGLを真っ当に使うならそれで問題無さそうだし
「もし問題あっても、コンソールに出力されるだけだからいいよな・・・」と放置していた。
例えばGLSLシェーダーに特定のuniform変数が存在するかをチェックする場合
仮に無かったからと言ってエラーにはならない。

が、先日とある箇所のデバッグをしていたらその「何でも無い」警告がエラー出力を埋め尽くしてしまい
バグに直結するようなエラーやログが検索しないとわからない、見通しが悪い、
1フレームに何百個も発生していたらさすがに遅い等の問題に遭遇した。
当たり前っちゃあ当たり前だ。

そんな訳でどうするか考えた結果、Debug時でもエラーチェックをしないバージョンのラップ関数を用意する事で落ち着いた。
glGetUniformLocation() という関数なら glGetUniformLocation_NC()みたいな感じ。
勿論Release時はどちらを呼んでも同じ動作にした。

AMDのドライバにハマる

AMDのドライバがクソと言われる所以が少し、わかったような。

結論を先に書くとAMDドライバではGLSLに整数を渡す時にglVertexAttribIPointer()を使わないと値が化ける。
更にGLSL側でfloatで受けたりしても駄目、逆にfloat -> intも駄目。
Nvidiaとかだと普通に動きそうな気がする。

GLSLのattribute変数(頂点入力変数)にソースを渡す時は
VertexBufferObjectを使うかによらず大体、glVertexAttribPointer()を使うと思うのだけど
これが曲者で。

APIの公式リファレンスを見るとglVertexAttribPointer()以外にも
整数専用のglVertexAttribIPointer()や64bit浮動少数点数用のglVertexAttribLPointer()なんてのがあったりするが
glVertexAttribPointer()にはGL_INTも渡せると書いてある。
公式に書いてあるし、そもそもOpenGL ES2にはIPointerの方は無いのでglVertexAttribPointer()だけで組んでいたら
整数を渡すと値が化ける事に気づき・・

かなり時間食った。

その他

自作ライブラリの細々としたバグ修正など。

あと、最近プログラミングや3DCG以外に取り組んでる事があるとだけ。

(2014/06/12)

例のごとくまた放置してしまった。
相変わらずプレビュー表示で止まってる訳だけど、まぁ進んでいると言えば進んでる。
見た目の変化といえばグリッドに色がついてノードの軸表示が出来ただけっていう。
前回から何をしたかなんて忘れてしまったのでgitのログで振り返ると
  • コンパイル環境をC++11からC++14に移行
  • 階層構造を持ったモデルを描画する為の機構
  • 上と関連してスキンメッシュ描画の色々
  • ベクトルの初期化と代入のstd::initializer_list対応
  • Uniform変数配列に対応
  • システムUniform変数を管理するクラス
  • 更新フラグ管理のクラス
  • Actorクラス
こんなとこである。

コンパイル環境をC++11からC++14に移行

新しい規格という感じもあまりしなくなったし、もうそろそろ使ってもいいんじゃないかと思ったので。
主に汎用ラムダキャプチャ、ジェネリックラムダ、関数の戻り値推定など。
他にも色々機能が追加されてるようだが自分は上記が目当て。

階層構造を持ったモデルの描画

モデルから関節ノードを読み込んでそれぞれの角度や位置を描画時に反映してって
要するにキャラクターを描画するってだけで。スキンメッシュも対応はしてあるがまだテストしてない。

ベクトルの初期化と代入のstd::initializer_list対応

ベクトルの初期化は今までVec3 v(1,2,3) としか出来なかったのをVec3 v = {1,2,3}と記述できるようにし、
関数の引数にもAddVector({0,1,0}, {1,0,0})といった感じで直接書けるようにした。行列も同様。
なんで今までやってなかったんだろうというレベル。

Uniform変数配列に対応

これもなんで今まで(略

システムUniform変数を管理するクラス

World、View、Projection、Transform行列(World*View*Projection)や、
EyePosition, EyeDirectionベクトルなんかのよく使うuniform変数は
ライブラリ側で名前を決めてしまったほうが管理が楽そうだと思ったのでそうした。
World行列が更新されたらWorldの逆行列やTransformは計算し直しする等のフラグ管理なんて
アプリケーションごとに何度も書きたくないし。

更新フラグ管理のクラス

変数同士の依存関係をマクロで記述したら後はフラグ管理を
自動でやってくれるようなテンプレートクラスも作ったりした。
マクロというのが若干格好悪いがいつもキャッシュ変数を持ったクラスを書く時のモヤモヤが解消したので良しとする。
ソースコードはGitHubにあるのだが簡単に説明すると

boost::preprocessorのsequenceを使って
(キャッシュ名)(変数型)(依存キャッシュ名0)(依存キャッシュ名1)...
という形で依存関係を記述する

上記の行列であれば
(World)(Mat44)
(View)(Mat44)
(Projection)(Mat44)
(WorldInv)(Mat44)(World)
(Transform)(World)(View)(Projection)
こんな感じになる。
World, View, Projectionは4x4行列変数で、他の何にも依存しておらず
WorldInvはWorldに依存し、TransformはWorldとViewとProjectionに依存している。

各変数は、これまたマクロで自動記述されたgetXXX()という関数で取得するようになっていて戻り値がconst参照である。

getWorld()を呼ぶと何もチェックをせずそのままconst Mat44& (中身はWorld) が返り、
getWorldInv()はWorld変数が更新されていれば別途ユーザーが記述した
関数refresh(Mat44& mWorldInv, World*)の内部でgetWorld()を使って再計算した上でconst Mat44& (中身はWorldInv)を返す。
といった具合。

Actorクラス

名前からしてありがちで説明の必要も無いんじゃないかという程だが一応。
モデルと関節ポーズを内部に持ち、draw関数でポーズを適用しつつ描画する物。
このクラスもそうだがFBXローダーもまだまだ作成途中なのでGitHubに上げてない。

予定

引き続きFBXローダー。
以上

「06)」をウィキ内検索
LINE
シェア
Tweet
添付ファイル
  • grid1.png
  • grid2.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.