2008年04月29日

基礎を固める。メモリー管理を再度見直す

動的な領域確保について
Cならmalloc、delphiならばgetmemかsetlengthを使うのが普通で
特にsetlengthの場合は開放は必要ないわけだ。
しかし確実にgetmemとfreeをやっている場合でも何かメモリーマネージャーが悪さしているらしく
繰り返していたらどんどん使用リソースが膨らむということがあったので
Qmemoryというのを使っていたのだけれど今回はdelphi以外の環境も考えてきちんと見直すことにした。

メモリー管理に手を出す場合ライブラリーなどを使う場合のバッティングの注意が必要だが
当座は問題ないと思う。

アプリケーションは極力静的に宣言したメモリーだけで再割り当てなどしないようにしたいが
今回はとりあえずメッシュファイルの読み込みをする場合など
テンポラリーや可変長のもの、リスト型への準備も踏まえてみた。

結果論からいくとプライベートヒープを使う事にした。
それでどうした!......
ラベル:メモリー管理
posted by Xo_ox at 22:04| Comment(0) | Win出直し | このブログの読者になる | 更新情報をチェックする

2008年04月26日

メッシュを書き出す

データとしてプログラムに入れたメッシュデータだが
読み込んで使いやすいファイルを目指しつつもとりあえず
毎回exeに入れるのは非効率なのでとりあえず書き出してみた。

今回のバージョンは過渡的だけれど将来的互換性はもたせるようにした。
このフォーマットはDirect3D9のFVFを意識した頂点データである事が特徴。
それでどうした!......
ラベル:メッシュ
posted by Xo_ox at 23:20| Comment(0) | Win出直し | このブログの読者になる | 更新情報をチェックする

2008年04月18日

ちょっと基礎を固める。ファイル読み書き操作

メッシュ読込みに進む前にファイルの読み書き関数を整理する。
delphiで普通にやる場合はclassesをuseしてTFileStreamを使うか
Sysutilesをuseしてファイル読み込みルーチンを使えばいいと思う。
TFileStream互換のものを以前は自作して使っていたのだが素のAPIを見直してみた。
それでどうした!......
posted by Xo_ox at 23:11| Comment(2) | Win出直し | このブログの読者になる | 更新情報をチェックする

2008年04月17日

メッシュ表示への道、コピペソースでモデルを表示する。

モデル読み込みの一里塚としてソース中のテキストデータとしてモデルを持つ方法を取る。
メッシュデータのフォーマットとしては先日の方法がベストだと思えるが
世の中甘くはない。
コンバーターを自分で作らなくてはいけないようだ。
そこで今回はXファイルを文字列置換してソース化して見た。
それでどうした!......
ラベル:メッシュ Direct3D9
posted by Xo_ox at 23:55| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年04月16日

メッシュ表示への道、DrawIndexedPrimitiveUPであれこれ

DrawIndexedPrimitiveUPで組みなおしたところやはりalt+ctrl+delからの復帰でエラーがでる。
デバイスロスト発生で描画命令を呼ばないトラップをいれてもだめだったので
現状マウス移動がトリガーなのでフラグをつくり「WM_ACTIVATE」でオンオフするようにしたら
エラーにならなくなった。本筋ではないが今回以降はWM_ACTIVATEが入る。
今回はとりあえずDrawIndexedPrimitiveUPを使用しメッシュデータを分離することがメインだが
実質デバイスロスト苦闘編
それでどうした!......
posted by Xo_ox at 16:14| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年04月15日

3Dのメッシュ表示の道、DrawIndexedPrimitiveを使ってみた。

基本的に描画のため結構独自なモデル構造と手法に走る予定で
そのプロセスで典型的なプリミティブの描画というのもやるだろうが
それまで立方体だけでは心もとないのであまり工夫のないメッシュ表示をできるようにする事にした。
その第一歩としてDrawIndexedPrimitiveを使ってみた。
そして、メッシュについてDrawIndexedPrimitiveで進めようと思ったが
後述のように基本的には挫折。
しかしとりあえず動作はさせたのでこれはその記録なのである。
それでどうした!......
ラベル:Direct3D9 メッシュ
posted by Xo_ox at 23:55| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年04月13日

ビルボード改+チョコっと進化

ビルボードは1ポリゴンでひとつの小さいテクスチャーの全域を使うやり方にしていたのだが
ビルボードは「抜き」が基本なので大きいテクスチャーに変更した。
1ポリゴンでやると使用効率が落ちるが使用領域を一つおきにすることで50%にできた。
現時点ではリストなどがないので非効率なコードで書いているが
drawprimitiveupで一気に描ける。
座標とかUVの変更が前提なのでバッファー内には入れない前提
それでどうした!......
posted by Xo_ox at 19:34| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年04月11日

闇フォグ入れたりアルファブレンドしたり

今回のテクスチャーの設定の範囲で出来ることとして
レンガ系テクスチャーも貼ったのでアルファブレンドなども入れてみた。
ライトは前回と異なりシンプルな1次系のNormal Light
(D3DTSS_TCI_CAMERASPACENORMALをVIEW行列で固定)
フォグを暗色にしてそれで奥行きがどうでるかみてみた。
それでどうした!......
posted by Xo_ox at 23:29| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年04月10日

まだ影はないけれど

自動テクスチャーによる陰影を描画を2ステージ目に移して描画してみた。
シェーダーも固定パイプのライトも使っていない
陰影はもっぱらライト用テクスチャーの効果という邪道で
ゲーム用空間とか3Dデモとかアニメ用としてはいい感じだと思うが
明暗があると逆に影がないのが不自然に感じる。
それでどうした!......
ラベル:Direct3D9
posted by Xo_ox at 23:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年04月08日

算術関数を整理

delhi5は配列ポイント型の配列は配列の位置のポインタそのものを表していたけれど
delphi6以降は「^」をつけなくても値として扱われる。
関数を作る場合ポインタ渡しにすると配列の任意のところを送るのがちょっとめんどくさくなるようだ。
そういうことも踏まえ、最近頻度の多い関数などを整備した。
あと今後の頂点処理を考えて配列型を強化した。
それでどうした!......
posted by Xo_ox at 23:12| Comment(0) | Win出直し | このブログの読者になる | 更新情報をチェックする

2008年04月07日

とりあえずグーロー風味の空間が出来る。

1000.0の壁にあたった。
どうも実寸だと1000の壁があるみたいなので1m=1.0にすることにした。
projection行列がfarで1000以上を受けつけない他破綻しやすくなるようだ。
次に進む前に「部屋」を描いて箱を置いてみた。
箱は割り付けてないもののテクスチャーが前提
部屋はテクスチャーなしで頂点色を設定。
ライティングはオフにした。
いわゆる固定機能のライトは使わないがシェーダーも使わずライティングができた感じだ。
それでどうした!......
ラベル:Direct3D9
posted by Xo_ox at 23:55| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年04月06日

D3DTSS_TCI_CAMERASPACEPOSITIONで座礁。

GL_EYE_LINEARじゃなくって...
法線系ではないD3DTSS_TCI_CAMERASPACEPOSITIONに手をつけた。
Direct3D8の頃は影などで言及されていたサイトもあっただろうが
現在はとんとないようだ。

元の明確な法線と異なりなにをどう掛けたらいいのかもとんと分からないが
テクスチャーに基本行列を入れていたときは小さい点のようにしか映らなかったので
一筋縄ではいかないのは分かっていた。
Web上にも資料がないし初日から暗礁という感じだ。
それでどうした!......
posted by Xo_ox at 23:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年04月05日

D3DTSS_TCI_CAMERASPACENORMALによる球状環境マップに挑戦

Direct3Dで普通に固定視点で球状環境マップをやるならD3DTSS_TCI_SPHEREMAPだ。
これはなぜかどこにも言及されていない。
視点を変える方法はパースの影響をきるためD3DRS_LOCALVIEWERをかけて
法線を視点に応じて回転させる。この方法はNVIDIAがOpenGLのBubbleデモでやっている。
D3DTSS_TCI_CAMERASPACENORMALをカメラに応じて固定したため「ライティング」になっちゃってるが
こいつが唯一法線全角度演算入力できるモードのようなので
今度はこれで環境マッピングをやってみる。
頂点については初期段階で工夫したが原則的にモデルデータは固定でいろいろやってみた。
それでどうした!......
posted by Xo_ox at 23:30| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年04月04日

D3DTSS_TCI_CAMERASPACEREFLECTIONVECTORによる球状風環境マップの微妙

D3DTSS_TCI_CAMERASPACEREFLECTIONVECTORに再挑戦しようとしたのだが
出来ていたような出来ていないような微妙な感じだ。
ちなみにD3DTSS_TCI_SPHEREMAPだがこちらは法線ベースの自動割付だが
テクスチャー座標の扱いは2DでX,Y,Zの法線の回転が出来るわけではなく
Z回転とZ,Y移動しかできないようだった。
D3DTSS_TCI_CAMERASPACEREFLECTIONVECTORは前回の方法でほぼ固定される。
しかしどうも180度まわすと一周してしまうようなのだ。
90度曲げても上面と側面とで矛盾が生じるため一次テクスチャーのライティング以外いい結果にならなかった。
それでどうした!......
posted by Xo_ox at 19:29| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年04月03日

NORMALライトがなんとかできた。

どうにも計算がうまくいかなかったD3DTSS_TCI_CAMERASPACENORMALを使ってのライティングだが
MSDBのカメラ空間トランスフォームのドキュメントに引っ掛けられていただけで
ライトベクターという発想を捨てたらあっさりとうまくいった。
早い話が簡単ビルボードと同じ発想でよかったわけだ。
それでどうした!......
posted by Xo_ox at 12:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年04月02日

Direct3Dでセルシェーディングぽいtexture1D Lightingをやってみる。

D3DTSS_TCI_CAMERASPACENORMALを使ってのライティングをしようとしているわけだが
まだ行列のかけ方が完全にわかっていないので
とりあえずOpenGLのセルシェーディングのような感じで
一方向だけなんとかカメラが動いても大丈夫なようにしてみた。
それでどうした!......
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年04月01日

ライトとしての自動テクスチャー再考察

ライトとしての自動テクスチャー再考察
D3DTSS_TCI_CAMERASPACENORMALとD3DTSS_TCI_CAMERASPACEREFLECTIONVECTORを見直した。
どうも前回は使い方を理解していなかったようで
SPHEREMAPと異なりテクスチャーの範囲内に演算してくれるのではなく
法線の値そのまま、つまり-1から1の値をそのまま渡してくるらしいことが分かった。
つまりテクスチャー側を対応させるためにD3DTS_TEXTURE0の変形は必須ということになる。
それでどうした!......
ラベル:Direct3D9
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。