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

FPSを作ってみる@wiki

05)

最終更新:2013年05月25日 21:10

slice

- view
管理者のみ編集可

(2013/05/25)

更新休止

お世辞にもプレビュー数が多いとは言えないページではあるが進捗を淡々と記すのは一応自分で決めた事なので。
身内に不幸があった関係でしばらく更新を休止する。
再開は・・ちょっと今はわからない。すぐかもしれないし一ヶ月後かもしれない。

あとこれはお願い。一言でいいからトップページにコメントとか貰えると有難い。
ではまた。

(2013/05/22)

行列クラス公開

といってもまだバグチェックとかはしてない。もちろんGitHub。
しかし・・・・boost::preprocessorを使って色々してると、やはりコンパイラが出すエラーが分かりにくいのが気になる。
もっともboost::spirit程ではないが。今思えばアレはやばかった。
別に無理にBNF記法に合わせなくていいからもうちょっとコンパイル時間が短くてエラーが解りやすい、
なおかつ外部ツールのプリプロセスが不要な文法解析ライブラリとか無いものか。

話を戻して
まぁ何だね。これだけマクロで無駄な苦労してるといっそ
「デバッグ時は外部DLLをリンクする」
「リリース時は別のヘッダをインクルードしてインライン展開をしてもらう」
形でライブラリ構成するのもアリかもしれんね。

とはいえ今作ってるのも中途半端だけは避けたいから
前に自分が作ってたライブラリの機能くらいは移植してから終わりたい。
変にテンプレート使ってデバッグが遅いとはいえクォータニオンや平面クラスとか用意してあって、一応動いたので。
現に公開してるデモプログラムは数学クラス全部自前実装だし。

一からゲームを組みたいんだっていう奇特な人で無ければ普通にD3DX関数(廃止するんだっけ?)やEigenとか使っておけばいいと思う。
Eigenは最近になってライセンスがLGPLからMPL2.0に変わったようなのでより使いやすくなってる。
ちなみに自分がGitHubで公開してるコードはMITライセンス・・・という程大層なものでもないが、形から入る方なのでそうしてみた。

(2013/05/15)

ベクトルクラス公開

前にちょこっと書いて触れずに放置していたSSE命令を使ったベクトルクラスを
boost preprocessorの助けを借りた形で前よりスマートに書きなおした。
まだベクトルクラスだけしか無いが、とりあえず公開とする。詳しくはいつものGitHubにて。
リポジトリ名はSpinner。もちろん適当につけた。

実の所wikiを更新してないけど裏では作業してるんですよーという事を示したかったのもある。
GitHubのフィードをwikiに載せれば・・とも思ったがAtWikiの機能が本当にただ「表示するだけ」で、
何件までとかのフィルタさえ無くて微妙過ぎた。

そんな訳でこれから行列クラスに取り掛かる

(2013/05/13)

シェーダーが使えない

書きかけの記事を置いたまんま放置してた件。
とりあえず体調不良だったのもあるけど理由として一番でかいのは
OpenGLが何故かver1.4で初期化されてしまう問題。
自分が詰まってたのはQtでのOpenGLなのだが、原因からすればXWindowで自前初期化したケースと変わらないだろうと。

日にちも経ってしまった事だし概要だけ述べる

1. シェーダーの初期化やVertexBufferObjectの動作を確かめるためにQtのQGLWidgetを用いた時に
glGenBuffers()を呼んでも本来メモリにセットされるはずの値がセットされてない事に気づき、原因を探す
(glGetError()ではGL_NO_ERRORが返る)
2. QGLWidgetが悪いのかと踏んでQGuiApplicationとQWindowを使った実装に変更するも、改善されず
3. シェーダー管理クラスのQGLShaderProgramを使ってシェーダーを読み込むと「このバージョンのOpenGLでは対応してない云々」と言われ、QOpenGLContextにて初期化されたバージョンを見ると1.4になっている。初期化パラメータをどういじっても2.0以上にはならず
4. ドライバを入れなおすも、変わらない(RadeonなのでCatalyst 13.4を導入)
5. ふと、lddで依存ファイルを調べると・・libGL.so.1のパスにmesaとかいうのが(確かオープンソースドライバ)

6. どうも普通にlibGLをリンクするとmesaドライバが読み込まれる設定になってる。で、fglrxがプロプライエタリ=catalystのドライバ

7. soファイルのパス設定はどうだったっけ?と思い、見てみると見慣れないリンクが・・(水色の2つ)

8. とりあず水色の2つは除外してldconfigを実行して自プログラムをコンパイル後、再度ldd
mesaじゃない方をリンクしている

バージョンを見ると無事4.2になっていた。glGenBuffersその他シェーダー関連の関数も普通に動く。
出力される対応エクステンションの数がmesaと比べて桁違いであった。

前にドライバの導入に手間取ってオープンソースのに戻したりまたcatalyst入れたりを繰り返していたんで、その辺かなぁ・・

その後

本当は3Dでポリゴンぐりぐり動かしてる予定がシェーダー云々以前で手間取り、見事に調子が狂ってしまったんで
気分転換ついでに別の事をしていた。勉強タイム。
今回取り組んだのはboost::asioで、名の通り非同期(asynchronous)に入出力(input/output)をするライブラリである。
具体的にはネットワーク通信やシリアルポート?なんかの、時間がかかる処理に対しイベントハンドラを設定し各種処理が終わり次第呼び出すような仕組み。
通信に限らず別スレッドで重い画像処理をさせるとかにも使えるが、基本はtcpやudpな気はする。

イベントハンドラが実行されるスレッドはboost::asio::io_serviceのrun()を呼び出したスレッドと保証されてるんで
処理の完了通知を取り扱う上でいちいち同期をとらなくてもいい。
チュートリアルをひと通り終えた程度の知識じゃこんなとこですねはい。

チュートリアルでやってたようにdaytimeサーバーに繋いでテキスト一行受け取って終了のようなケースだと
プログラムの行数的にはwinsockでチマチマやった時と変わらんからまだ「boost便利!」とは行かないのが実情。
複数同時リクエストしたりキャンセル処理が入れば違ってくるとは思う。

前回の記事

書きかけ記事は引き続き放置で。
近日中にリファインして再公開したいが、気力がない。

(2013/05/09)

[書きかけ記事]

またもや空いてしまって申し訳ない。

訂正

とりあえず・・
前回「OpenGLのセッティング関数云々はこんな感じ」等と書いたな。あれは嘘だ。(アアアァァァァァァァァ....

実は上手く動かないことに5月入る前には気づき、考え直して再実装したものの
肝心な記事の間違い訂正を面倒臭がってズルズルと今日に至る。
詳しいことはソースを見てもらったほうが早い。

[---- ソース載せる欄(後日)----]

要点だけ説明すると(linewidth,glLineWidth,1)という風に引数の数だけ指定して
intだろうがboolだろうが全部floatでまかなっていた所をちゃんとboost::variantを使って分離。
従って(linewidth,glLineWidth,float)と引数型を記述するようにした。
ウィンドウへの描画範囲(四隅)を指定するglViewportだったら(viewport,glViewport,int,int,int,int)という感じ。

ところでboost::variantから値を取り出すboost::getはテンプレート引数に数値を使えないのだろうか?
例えば
boost::variant<bool,int,float> value;
という変数があって、ここにintが格納されているとしたら値を取り出すのに1番目の型という事で
boost::get<1>(value)と書きたかったのだがコンパイルが通らず。
実際はboost::get<int>(value)という風に型を指定する。

なんだかな、内部にタイプリストを持っておけばインデックスで型を特定できそうな物だがな。
自分は偉い人じゃないので理由はわからない。

進捗状況

まぁ、Gitのコミット履歴を見るに・・
4日までは自前エフェクトフォーマットの仕様変更を繰り返してたようだ。
5日でエフェクト記述から頂点、ピクセルシェーダーそれぞれを関連する変数ブロックと一緒に出力し、OpenGLドライバでコンパイルまで行けたらしい。
その後はOpenGLの頂点バッファの管理クラス、シェーダークラス、間合せの行列クラス、OpenGLAPIのエラーチェックアサートマクロ・・・と、実装は月並みなので省略。

昨日までは頂点ポインタの関連付け機構なんぞをやっていた。
これはDirectXと同様に頂点ストリームとオフセットとセマンティクスを事前に設定しておき
実行時はストリームに頂点配列ポインタを渡すだけでシェーダー変数の設定(glVertexAttribPointerとか)をやってくれる物。
例として3次元の座標と2次元のテクスチャ座標を持つ頂点ならば
// 頂点を表す構造体
struct Vert {
    vec3 pos;
    vec2 tex;
};
// 頂点オフセット定義 {ストリーム番号、バイトオフセット、正規化フラグ、要素数、セマンティクス}
VertexDecl vDecl[] = {
    {0, 0, GL_FLOAT,GL_FALSE, 3, (GLuint)VSem::POSITION},
    {0, 12, GL_FLOAT, GL_FALSE, 2, (GLuint)VSem::TEXCOORD0}
};
Vert vert[] = {
    {
        {-1,-1,-1},
        {0,0}
    },
    {
        {-1,1,-1},
        {0,1}
    },
    {
        {1,1,-1},
        {1,1}
    },
    {
        {1,-1,-1},
        {1,0}
    }
};
GLVBuffer vbuff;
vbuff.setData(vert, countof(vert));    // 頂点バッファの作成
GLEffect glx("file.fx");    // エフェクトファイルの読み込み
glx.setVStream(0, vbuff);    // 頂点ストリームの設定
 
頂点バッファの作成とかは疑似コードなんだけど、大体このように書く。
後は内部でglEnableVertexAttribArrayやglglVertexAttribPointerを呼んでくれて描画の準備が整う(予定。まだテクスチャとかやってないし)
「05)」をウィキ内検索
LINE
シェア
Tweet
添付ファイル
  • 001.png
  • 002.png
  • 003.png
  • 004.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.