スポンサーサイト

  • --/--/--(--) --:--:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

開発風景

  • 2010/05/09(日) 01:46:35



シャドウマップ実装風景
影を真っ暗にしてシャドウマップ判定をやっているのだが……
一つ山超えたけど、まだなんかミスってるw

あと、Light Space Perspective ShadowMapをXNAに移植作業で分かった注意点メモ
・座標系の問題
・・DirectXは左手系、OpenGLは右手系、XNAは右手系
・ベクトルと行列との計算順序の問題
・・OpenGLは数式で言うと行列の後ろに縦ベクトル、XNAとDirectXは行列の前に横ベクトル。なので行列同士をかける順序や行列内の各要素の位置が違うので注意
・mulHomogenPoint
・・LispSMのサンプルを普通に読んでると、ただのVector3.Transformに見えるのだが、実はこっそりWで割っている。
・・よって答えはVector4.Transformを使って計算し、出てきた4次元ベクトルをwで割り、xyzで3次元ベクトルとすると上手くいく。

スポンサーサイト

この記事に対するトラックバック

この記事のトラックバックURL

この記事にトラックバックする(FC2ブログユーザー)

この記事に対するコメント

LispShadowMap.csについて

はじめまして、willcraftiaともうします。
ソースコードを拝見させて頂きました。大変参考になります。

LispShadowMap.csのコメントある「refit to unit cube...」についてです。
素人なので自信はないですが、行列lispMatは射影行列の範囲をはみ出しているので、あるべき(-1,-1,-1)(1,1,1)で構成される箱の範囲に調整する、という意味だと解釈しました。
LiSPSM本家のソースはOpenGL仕様なので(-1,-1,-1)(1,1,1)、XNAならば(-1,-1,0)(1,1,1)でしょうか。
スケール変更と移動が必要になるので、直前で仮に箱を計算し、その情報から調整のための変換行列を作成してlispMatに掛けておく、という流れかと思います。

とは言うものの、自分でコードを修正してみましたが見た目の変化はよくわかりませんでした・・・。

  • 投稿者: willcraftia
  • 2010/06/13(日) 22:03:18
  • [編集]

Re: LispSHadowMap.csについて

コメントありがとうございます
あー、なるほど。そういうことか。
なんとなく等価な答になるコードを無理やり選択していくやり方で移植してたので……

報告ありがとうございます。
対応箇所を修正させていただきました。

  • 投稿者: ウィルフレムP
  • 2010/06/13(日) 23:12:29
  • [編集]

No title

よくよく調べると自分の解釈もおかしい気もしてきました。
もうしわけないです。

本家のscaleTranslateToFit関数はOpenGL用かつ左手用の正射影行列っぽいですね。XNAのCreateOrthographicOffCenterをOpenGL用かつ左手用にしたもの、と言うか。

結局、最後はUSM同様に正射影行列を掛けているだけ・・・なのかな。

  • 投稿者: willcraftia
  • 2010/06/14(月) 14:17:08
  • [編集]

コメント投稿

管理者にだけ表示を許可する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。