2008年02月08日

捨てるMSもあれば救うMSもあり関数を自作する。

D3DXの関数群を実装しないといけないわけだけれど
MS算術関数に式とかあったので
LookatとかPerspectiveFovとか問題なく自作できそうだ。
最初は一般ユーティリティにしようと思ったのだけれど結構多くなりそうなので独立のユニットにすることにした。
これでOpenGLに移行した場合でもgluを使わないとかできる。
それでどうした!......
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年02月09日

OrthoLHも作って考えた。

昨日の関数で右手系と左手系と別に作るのもめんどくさいし
-1か1をかけるだけだから共用にしようと思ったけれど
どちらかしか使わないので非効率になるからさっくり二つずつ関数をつくった。
またOrthoLHも作った。これでVIEW行列とPROJECTION行列の主要な関数はそろったわけだ。
しかし「Flash」ということであればスケールをZ値で処理したいから
Worldでのスケールを使ってもいいのだがPROJECTION行列で遠近でやるほうがよいようにも考えた。
それでどうした!......
ラベル:Ortho projection
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年02月14日

右も左もわかりません。

D3D9の仕様どおりにVIEW行列等をセットすると表示するのだが
Zのマイナスが手前だということがなんとも理解しがたい
元々スクリーン座標系のYが反転していることもあるが
Zの後から見ているわけだから当然「正しく演算」した場合
Z軸回転が逆になっちゃうわけだ。

でもまぁなんとかつかんできた。
それでどうした!......
ラベル:Direct3D9 行列
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年02月17日

テクスチャーの行列を変更してみる。

テクスチャーの行列を変更することで単純なアニメーションなどができるが
むしろ座標を反転させるあたりが使いどころかもしれない。
落とし穴があって最初どうやれば使えるのか分からなかった。
それでどうした!......
ラベル:Direct3D9
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年02月18日

結局VIEW行列でつじつま合わせ

y軸反転の頂点変形済み扱いのRHW互換の座標系だが
透視変換するときに3D変形をする部品の場合
Z軸だけ1.0ベースなのでとXYとのアンバランスが生じるのでワールドスケールとしてVIEW行列にかけてやり
PROJECTIONは従来のままでオフセットだけつけてやることにした。
それでどうした!......
ラベル:projection Direct3D9
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年02月20日

ちょこっとボーン

なんやかやで基礎関数ばかりいじってSSE化したりと脱線していて
いまだに空間のあり方すら決まっていないのだけれど
とりあえずworld行列を入れ替えて2個の四角形を表示させてみた。
一個目の四角形の行列に次の行列をかけてやっている。
いわゆるボーンみたいな感じだ。
それでどうした!......
ラベル:変形 Direct3D9
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年02月21日

ワールドスケールに関するルールやっと帰着

とりあえず

ワールドスケール行列 * PROJECTION行列 →オフセット値(大抵1をセットするとか)

という形のものをPROJECTION行列にセットすれば
例えば320ドットの画像は辺長320のポリゴンに貼り付ければよいということにした。

この「ワールドスケール」という概念はあまりなくて
たいていは一辺1.0のポリゴンとかが多いけれど
現実の寸法はむしろ1mから0.1mm単位のサイズで数値として考えても5桁で足りるし
わかりやすい。画像にあわせたものもドットと一致させた方がよいと思うのだ。
それでどうした!......
ラベル:projection
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年02月22日

自由回転をさせてみる。

まだあまり構造を複雑にしないで自由回転をさせてみた。
結果からいうと
X→Z→Y
の順番で回転させた場合X回転は任意の軸での回転ということになりわかりやすい。
クォータニオンも三角関数が入ることを考えると
ZとYの部分を事前計算しておけば等価でかつ直接行列として扱えていいのでは無いかと思えた。
それでどうした!......
ラベル:行列 Direct3D9
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年02月24日

1ポリゴンでのスプライト

特に変換済み頂点モードでは自前で頂点座標を書き換えるので少なければ少ないほうがいいのだが
なぜか言及が少ないポイントスプライトを使わない場合2ポリゴンの「四角形」にテクスチャーを貼るのが普通で
今までTRIANGLEFANなりTRIANGLESTRIPで記述していたものの
TRIANGLELINSTかTRIANGLELINSTベースのDrawIndexedPrimitiveUPにした方がいいのかななどと考えていたのだが
考えてみると大は小をかねるで三角形の中に四角いテクスチャーを貼ればよいことに気づいた。
但しZバッファとαの問題ははみ出る部分があるだけより深刻になる。
それでどうした!......
ラベル:Direct3D9
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年02月25日

頂点ブレンドしてみる。

Direct3Dの標準機能である頂点ブレンドをやってみた。
これはまぁ頂点データで構造されたデータをボーンで変形させるというような使い方をするものだ。
どうもFX5200は4つまでしかブレンドできない上にインデックスブレンドはできない模様なので
使うコンセプトとしては関節ブロックごとに2つ行列をセットする感じになるのだろうか?
とりあえず使い方の確認はできたのでCPUでの実装とモデル読み込みに手を出す時の準備は出来た。
それでどうした!......
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年02月26日

行列関数追加と改善

基本的にスタックでの変数のやり取りは避けたいと思っている。
まだ不完全だがそのためのメモリレジスタの設置でもある。
行列演算は固定データを変形させることが多いし
将来的には相互干渉もありうるから
現在の計算結果を元の変数に戻す方法はコピーを前提としていて無駄に感じる。
とはいうもののコピーして一気に処理したほうがいい可能性もある。
現時点では最小限だけ用意しておいてもう少し構造体とかが決まるまでは保留にすることにした。
それでどうした!......
ラベル:行列
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年03月02日

簡単ビルボード

単位を取れた記憶すらさだかでない大学時代の線形代数の教科書から
2008年度でやっと卒業できそうな昨今
SSE版の余因子行列をやって逆行列にいこうかとも思ったけれど
考えてみたら今は物理シミュではなくてビルボードをやるためのいろいろということだったし
ちょっとつまらないのでここはちょっとD3D9系の内容にしてビルボードをやってみた。
それでどうした!......
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年03月03日

ALPHATESTENABLEとZWRITEENABLEで穴をあける。

今まで透明度のあるテクスチャーを使ったり「抜き」を普通にやっているように見えたが
実際は透明な部分にあとから描きこむと見えないという状況で
描画順を工夫して破綻しないようにしてきた。
つまり「穴」ではなくて「ガラス」だったわけだ。
以前はあったカラーキーもなくなったがαテストという方法でぬく事ができる。
またアルファブレンドはZENABLEではなくてZWRITEENABLEでデプスチェックだけするのがよさそうだ。
それでどうした!......
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年03月05日

フォグを使ってみる。

海外でのシーンはからっとして遠景まで見えるけれど
日本、こと鎌倉に関しては霞んでいるのがデフォルトであり
フォグで遠景をごまかすのは都合が良い。
フォグというのは早い話彩度ダウンでありFlashでも使える手法ではある。
そして3Dでも初期からありかつ効果的なものだと思っている。
それでどうした!......
ラベル:フォグ Direct3D9
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年03月20日

まわる行列の作り方。

ビューアーのようなシンプルな3Dアプリケーションで
特定オブジェクトではなくて画面全体、つまりは世界を回したいというときがある。
そういうケースを扱ってみた。
これはいわゆる「カメラの移動」とは違うが
無論方法は「極めて簡単」である。
簡単というのは計算量が少ないということでつまり負荷が低いということになる。
それでどうした!......
ラベル:VIEW行列 Direct3D9
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年03月22日

回転と移動でVIEW行列を作ってみる。

Lookat的関数ではターゲットとカメラの位置からVIEW行列を求めるのだが
単位行列から回転と移動でVIEW行列を作ってみた。
それでどうした!......
ラベル:Direct3D9 VIEW行列
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年03月23日

簡単ビルボード改と簡単ビルボード+

簡単ビルボードでは通常の板ポリと切り替えるためプロセスごとに演算したが
実質移動だけであり逆行列部分には移動要素は無いので簡略化できる。
前回同様ワールド行列を作るパターンと直接変更するパターンと考えてみた。
それでどうした!......
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年03月29日

自動テクスチャーに手を出す。

Direct3D9の資料サイトはRHWモードで三角形を描くと
次はいきなりバーテックスシェーダーを使い出すことがもっぱらだけれども
古いカードでもサポートしている便利な機能として自動テクスチャー生成というのが固定パイプでもある。
OpenGLのものとまた一味違うようだが必要条件も含めて試してみた。
それでどうした!......
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年03月30日

意外と使えなさそうなD3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR

D3DTSS_TCI_CAMERASPACEREFLECTIONVECTORはキューブ環境マップには使えるが
キューブ環境マップを使う前提の場合は固定パイプで描画する必要性も低いので
他の用法が無いかみてみたが結構厳しいことが分かった。
うーむ。


※これをやった段階では把握していなかったがD3DTS_TEXTURE0をずらしてスケーリングしてやれば
普通に使えることが分かった。
それでどうした!......
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする

2008年03月31日

ライトとしてSPHEREMAPを使ってみた。

D3DTSS_TCI_SPHEREMAPを指定して反射テクスチャーを貼る手法は
ほとんどのハードに対応しているのだが最近では使われていない。
理由はマップ生成コストが分かりにくいことと固定視点のみとされるためだ。
しかし負荷が小さく効果は大きい。今回はこれをライティングにつかえないか
その可能性を見てみた。
それでどうした!......
ラベル:Direct3D9 SPHEREMAP
posted by Xo_ox at 21:00| Comment(0) | 3D | このブログの読者になる | 更新情報をチェックする
×

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