FPSを作ってみる@wiki
04)
最終更新:
slice
-
view
(2014/04/30)
モデルファイルはFBXなんて複雑奇っ怪な物に手を付けないで素直にColladaやっとけばよかったね!なんてまだ引きずってる・・
Qt5によるハイライティングとか(途中)
モデルファイルの話はおいといて、
自分はGLSLの文法がまだOpenGL ES2の範囲でしか把握してないので
「こんな記述はありかな?」「実際に使われてるUniformやAttribute変数のリストが欲しい」っていう試し書きをするのだけど
一回一回プログラム実行して、エラー出してじゃ面倒すぎるので
巷のライブコーディングツールはフラグメントシェーダーオンリーとか、GLSL ES2までの対応だったりでアレなのでこの際Qt5でサクッと。
自分はGLSLの文法がまだOpenGL ES2の範囲でしか把握してないので
「こんな記述はありかな?」「実際に使われてるUniformやAttribute変数のリストが欲しい」っていう試し書きをするのだけど
一回一回プログラム実行して、エラー出してじゃ面倒すぎるので
巷のライブコーディングツールはフラグメントシェーダーオンリーとか、GLSL ES2までの対応だったりでアレなのでこの際Qt5でサクッと。
いや、本当は自作エフェクトファイルを編集する時に文法エラーチェックとハイライトしてくれたらいいなあっていうのもある(むしろこっちか)
(2014/04/29)
gdbの件。あれから条件の特定を頑張ってみたものの、
ひどい時にはあるメンバ関数を外部記述するかどうかで挙動が異なったり
しまいにゃ自作ライブラリの特定のヘッダに記述した関数を参照すると駄目だったりで
SEGVの原因がこっちのソースコードでないと思われる。
ひどい時にはあるメンバ関数を外部記述するかどうかで挙動が異なったり
しまいにゃ自作ライブラリの特定のヘッダに記述した関数を参照すると駄目だったりで
SEGVの原因がこっちのソースコードでないと思われる。
結局gdbを前のバージョン(7.6)に戻すという格好で結着。
丸1日無駄にした。さっさと方針転換していれば・・
丸1日無駄にした。さっさと方針転換していれば・・
(2014/04/28)
進んでない報告。
Lubuntuを入れなおした。
本当はArch Linuxにしようかと迷ったがまだ全然慣れてなくって
確実に無用なトラブルを招くため見送り。
相変わらずビデオドライバがすんなり入んない等あったけどそれはさておき。
本当はArch Linuxにしようかと迷ったがまだ全然慣れてなくって
確実に無用なトラブルを招くため見送り。
相変わらずビデオドライバがすんなり入んない等あったけどそれはさておき。
一先ず以前のプログラムをビルドして実行〜しようとしたらGDBがシンボルを読む段階で落ちる。
普通に実行は出来るのに、GDBをかませると駄目。
こんなのは初めてなので手探りでソースコードを削っていき、原因を突き止めようと画策。
が、どうやら幾つかの微妙な条件が揃うと
例えば仮想デストラクタを持ったクラスを多重継承したり(多分他にも条件はある)、
ひどい時はメンバ関数の実装をヘッダに書くか別ファイルに書くかで変わってきたり。
普通に実行は出来るのに、GDBをかませると駄目。
こんなのは初めてなので手探りでソースコードを削っていき、原因を突き止めようと画策。
が、どうやら幾つかの微妙な条件が揃うと
例えば仮想デストラクタを持ったクラスを多重継承したり(多分他にも条件はある)、
ひどい時はメンバ関数の実装をヘッダに書くか別ファイルに書くかで変わってきたり。
実行する以前の問題なのでメモリ破壊がどうとかでは、ない。多分。
別々の箇所でインクルードした同一ヘッダのマクロ定義が異なっているかも調べたが、これでもなさそう。
別々の箇所でインクルードした同一ヘッダのマクロ定義が異なっているかも調べたが、これでもなさそう。
そんな調子で原因が今ひとつ掴めずにいる。
でも何とかしないとデバッグすら出来ないので、頑張るしかない・・
でも何とかしないとデバッグすら出来ないので、頑張るしかない・・
(2014/04/26)
なんか色々やってたような気がしたけど、実際gitのログ見たら大した事なかった。
作業以外では軽量ディストリビューションらしいArch linuxを試したとか。
作業以外では軽量ディストリビューションらしいArch linuxを試したとか。
モデルコンバータ
とりあえずFBXからデータ抽出云々はいいとして
GUIのモデルコンバータ作ろうか、Qt5と自前ライブラリを組み合わせてプレビュー表示させようかと頑張るも
(主に自前ライブラリの作りが甘いせいで)細かい所でエラーが続出してコンパイルすら通らなかったり。
結局その修正ばっかしてた気が。
QGLWidgetは明示的にshare指定しないと同じスレッドで実行するのにコンテキストが別になってて
テクスチャ作ったはずなのに使えない現象にも随分悩まされた。
GUIのモデルコンバータ作ろうか、Qt5と自前ライブラリを組み合わせてプレビュー表示させようかと頑張るも
(主に自前ライブラリの作りが甘いせいで)細かい所でエラーが続出してコンパイルすら通らなかったり。
結局その修正ばっかしてた気が。
QGLWidgetは明示的にshare指定しないと同じスレッドで実行するのにコンテキストが別になってて
テクスチャ作ったはずなのに使えない現象にも随分悩まされた。
これだけじゃなんだからまだモデルは出てないがスクリーンショット貼ってみる。
格子が表示されてるとこが自前表示の部分。
BlenderのFBX出力が中途半端なのでインポートするモデルを選択した後にユーザーが頂点色や法線セット、
テクスチャを組み合わせる若干ダサい仕様。
BlenderのFBX出力が中途半端なのでインポートするモデルを選択した後にユーザーが頂点色や法線セット、
テクスチャを組み合わせる若干ダサい仕様。
そんなことより
Lubuntuを14.04にupgradeするか?と聞いてきたんで
「ま、いきなり起動しないとかにはならんだろう・・」と甘い考えでOK押した。そしたら
自前でインストールしたパッケージ類を全部排除してくれた挙句、半分ほど進んだ所で
「エラーが出たんでもう続けられんわ。システムがunstableな状態になりまっせ」とか言われてそのまま終わった。
もう一度upgradeし直したいのだが内部的には14.04になってしまってて、出来なさそう。
「ま、いきなり起動しないとかにはならんだろう・・」と甘い考えでOK押した。そしたら
自前でインストールしたパッケージ類を全部排除してくれた挙句、半分ほど進んだ所で
「エラーが出たんでもう続けられんわ。システムがunstableな状態になりまっせ」とか言われてそのまま終わった。
もう一度upgradeし直したいのだが内部的には14.04になってしまってて、出来なさそう。
どうしろと。
(2014/04/13)
なんとなくGPUのドライバを更新したら
attributeやvaryingはdeprecatedだとかの警告と共に、以前通ってたGLSLコードがエラー吐く。
どうやら冒頭のGLSLバージョン指定が不味かったようで・・
attributeやvaryingはdeprecatedだとかの警告と共に、以前通ってたGLSLコードがエラー吐く。
どうやら冒頭のGLSLバージョン指定が不味かったようで・・
FBX
なんだかんだ言ってまたかなり時間かかってるけど
結局たとえ英語でも公式のチュートリアルやサンプル見たほうが数倍速いね。
FBXは定期的に仕様変更があるみたいで2,3年前の個人で解説してるページなんかは
関数がそのままじゃ使えなかったりして難儀だし。
あとあれだね。能書きや説明をぐだぐだ書かれるよりソースで示されたほうが明快で間違いが少ない。
プログラマはソースコードで語れとは良く言ったものだ。
結局たとえ英語でも公式のチュートリアルやサンプル見たほうが数倍速いね。
FBXは定期的に仕様変更があるみたいで2,3年前の個人で解説してるページなんかは
関数がそのままじゃ使えなかったりして難儀だし。
あとあれだね。能書きや説明をぐだぐだ書かれるよりソースで示されたほうが明快で間違いが少ない。
プログラマはソースコードで語れとは良く言ったものだ。
BlenderとFBX
今回は主にここで詰まった。
概要はいい加減わかったので、さあ変換ツールを作ろうか。と思ったら
概要はいい加減わかったので、さあ変換ツールを作ろうか。と思ったら
実はBlenderが吐くFBXはFBX SDKを使用しておらず、独自にそれっぽいフォーマットに仕立ててるだけという事が判明。
いや、SDK不使用なのはGPLだからなんとなく察してはいたが。
Pythonはよく知らないが、とりあえずプラグインのソースを見たら
結構ヘッダ情報やらなんやらがハードコードされている。
具体的に何が出力されるのかはBlender公式をあたればいいとして、大体
いや、SDK不使用なのはGPLだからなんとなく察してはいたが。
Pythonはよく知らないが、とりあえずプラグインのソースを見たら
結構ヘッダ情報やらなんやらがハードコードされている。
具体的に何が出力されるのかはBlender公式をあたればいいとして、大体
- テクスチャはDiffuseしか対応してない。BumpやSpecularは非対応というか、UVエディタでバックグラウンドにしてたテクスチャをDiffuseとみなすのでマテリアル情報ほぼガン無視(diffuse色と強さ位は認識するが中途半端過ぎて、ちょっと)
- UV座標セットは名前も含めて出力可。だがやっぱりUVエディタの背景をDiffuseとしたマテリアルをUVセットの数分出力するので別途ツールで再設定必須
- アニメーションセット出力はしてくれる
- アニメーションはキーフレームでなくてフレーム毎のX,Y,Zとかの数値をベタ出力(同じような値を省く機能はあるが・・)
- カメラやライトは対応してるが、自分は使わないので知らない
そんな感じ。
ちなみにColladaは規格がオープンな事もあってこんな中途半端ではなくちゃんと出力されるようだ。
わかってたら最初からColladaにしたんだが・・
わかってたら最初からColladaにしたんだが・・
更に関係ないけどテクスチャを外部参照にして一旦Blenderを閉じ、テクスチャファイルを消してサイドBlenderを起動してモデルを読み込むと
当然ファイルが無いのでベタ表示になるんだけど
このままFBX出力をかけ、その後何回か視点変更してるとマウス中ボタンを押したタイミングでOSを巻き込みフリーズする。
当初フリーズの条件がわからずこれで時間を無駄にした。
(Blenderのバージョンは2.70, OSはLUbuntu13.10 64bit, Kernel 3.11.0-20.34)
当然ファイルが無いのでベタ表示になるんだけど
このままFBX出力をかけ、その後何回か視点変更してるとマウス中ボタンを押したタイミングでOSを巻き込みフリーズする。
当初フリーズの条件がわからずこれで時間を無駄にした。
(Blenderのバージョンは2.70, OSはLUbuntu13.10 64bit, Kernel 3.11.0-20.34)
(2014/04/06)
Blenderの簡単なモデリング、ボーンを仕込んでモーション設定までの一連の流れをチュートリアルで学んだり
FBX SDKのオンラインマニュアルを食い入るように見つめてたり・・
あとはQtの復習など。
FBX SDKのオンラインマニュアルを食い入るように見つめてたり・・
あとはQtの復習など。
モデルフォーマット
まだモデルファイルを読み込んで描画、モーションをしてなかったので対応しようと思った。
前に使ってたような独自JSONフォーマットでいいならコピーしてくれば済むのだが如何せん自作プラグインが古いとか、
3ds max用なので誰かのモデルを流用する場合に敷居が高いという事で再考。
独自フォーマット自体はともかく出力手段が3ds maxからの独自プラグインしかないってのは非常にアレだ。
そんな訳で適当なファイルフォーマットを探す。
前に使ってたような独自JSONフォーマットでいいならコピーしてくれば済むのだが如何せん自作プラグインが古いとか、
3ds max用なので誰かのモデルを流用する場合に敷居が高いという事で再考。
独自フォーマット自体はともかく出力手段が3ds maxからの独自プラグインしかないってのは非常にアレだ。
そんな訳で適当なファイルフォーマットを探す。
現時点でメジャーなフォーマットといえばColladaとFBXだろう。
ColladaはXMLでオープンフォーマット、中身は主にモデルファイルとモーション。
FBXはモデリングツール間の受け渡しが想定されていてカメラやライトといったシーン全体を扱える
Colladaとは違い、クローズドでSDKだけが提供されてる状態(ただAndroid用のSDKは無い)
自分としてはAndroidでも動かしたいのでColladaかと思いきや、ググった限りこれはこれでColladaDOMの評判が宜しくない様子・・
ColladaDOMのライブラリが何やらごちゃごちゃと他のライブラリを要求するのもあまり印象が良くない。
やりたい事はモデルの読み込みだけなので。
ColladaはXMLでオープンフォーマット、中身は主にモデルファイルとモーション。
FBXはモデリングツール間の受け渡しが想定されていてカメラやライトといったシーン全体を扱える
Colladaとは違い、クローズドでSDKだけが提供されてる状態(ただAndroid用のSDKは無い)
自分としてはAndroidでも動かしたいのでColladaかと思いきや、ググった限りこれはこれでColladaDOMの評判が宜しくない様子・・
ColladaDOMのライブラリが何やらごちゃごちゃと他のライブラリを要求するのもあまり印象が良くない。
やりたい事はモデルの読み込みだけなので。
結局モデリングツールからはFBXで出力し、コンバータを通して独自形式という手順で落ち着いた。
といってもこれからツール作るんだけど。
といってもこれからツール作るんだけど。