ランダムドットステレオグラムアプリ - その9 [ランダムドットステレオグラムアプリ]
僕はたいていちょっと日にちを置くと忘れてしまう。ダイナミックRAMのようにいつも記憶をリフレッシュしないといけない。
最近やってるステレオグラム用のアプリは規模が小さいのでこの土日にさくっ、と片付けてしまいたい。
ということで今日はもう遅くて年寄りは寝る時刻だけど、前回の続きをまとめる。
これは のような実数値をとるとする。これは何を表すかというと、S(p)のある点(p0)にテクスチャタイルの色T0(D(p0))を配置する、つまり という意味の配列である。実数値をとるのは、整数値以外の場合は補間することを考えている。つまり整数以外の値をとるとき とすることに決める。ここでDfとDcはD(p0)をはさむ整数である(とりあえず線形補間するということ)。
この中間配列がなくてもステレオグラムを作ることができるが、これを使うと最終的なステレオグラムとテクスチャを分離することができて、実装上は簡単になる。また、テクスチャの入れ替えが簡単にできるというメリットもある。
これは最終的なステレオグラムS(p)と同じ次元(配列サイズ)を持っているが、簡単のため横方向の座標原点をずらした変数を導入する(ずらし方は二通り用意する)。まず右方向にタイルを作るときには中央に配置したテクスチャタイルT0(p)の左下を原点にする。つまり横方向の位置についての新しい変数∧pを として(∧p)を使うことにする。phが奇数のときは小数以下を切り捨てることにする(どっちでもいいけど決めておく必要がある)。
こうしておくとまず、基準になる中央のタイルに対応する部分は である。つまりテクスチャタイルのそれぞれの画素を並んでいるまま配置するということを表す。その右側はこの基準タイルを左目で見て、右目でその右側のタイルを見たときに輻輳を持たせる、ということになるので なんでこうなるかというと、 とすると、これは輻輳の距離だけ離れたタイルをコピーすることになる。これを立体視すれば壁の位置ということになる。あとは式-11に従ってずらした、ということである。式-53の引数はまた整数ではなくて実数になる。これはまた式-50と同じことをして補間すればいい。ただし、最終的なタイルに対して位置とその値との両方を補間することになって、正しい補間にならない場合が起こる。
これをp=pTの位置から右端まで伝播させればいい。αH(∧p)は正でpTを超えることはないので常に可能である。
また左側に関して、こんどは原点を中央のテクスチャタイル右下を原点にとりなおす。つまり とする。そうすると とすればいいことは対称性からすぐわかる。
煩わしいのでこれ以降∧pなんかをただpと書くことにする。混乱しそうなときはちゃんと書く。
このように中央から左右の端に向かってD(p)の値を埋めていく。全部できたら、おもむろにテクスチャT0(p)から補間しながらS(p)を作っていけばいい。
最近やってるステレオグラム用のアプリは規模が小さいのでこの土日にさくっ、と片付けてしまいたい。
ということで今日はもう遅くて年寄りは寝る時刻だけど、前回の続きをまとめる。
1.4.5 輻輳配列(prallax map)の生成
H(p)から、テクスチャをどのくらいずらすか、という中間的な作業用の配列D(p)を作る(もちろんqが省略されているだけでこれは2次元配列である)。これは のような実数値をとるとする。これは何を表すかというと、S(p)のある点(p0)にテクスチャタイルの色T0(D(p0))を配置する、つまり という意味の配列である。実数値をとるのは、整数値以外の場合は補間することを考えている。つまり整数以外の値をとるとき とすることに決める。ここでDfとDcはD(p0)をはさむ整数である(とりあえず線形補間するということ)。
この中間配列がなくてもステレオグラムを作ることができるが、これを使うと最終的なステレオグラムとテクスチャを分離することができて、実装上は簡単になる。また、テクスチャの入れ替えが簡単にできるというメリットもある。
これは最終的なステレオグラムS(p)と同じ次元(配列サイズ)を持っているが、簡単のため横方向の座標原点をずらした変数を導入する(ずらし方は二通り用意する)。まず右方向にタイルを作るときには中央に配置したテクスチャタイルT0(p)の左下を原点にする。つまり横方向の位置についての新しい変数∧pを として(∧p)を使うことにする。phが奇数のときは小数以下を切り捨てることにする(どっちでもいいけど決めておく必要がある)。
こうしておくとまず、基準になる中央のタイルに対応する部分は である。つまりテクスチャタイルのそれぞれの画素を並んでいるまま配置するということを表す。その右側はこの基準タイルを左目で見て、右目でその右側のタイルを見たときに輻輳を持たせる、ということになるので なんでこうなるかというと、 とすると、これは輻輳の距離だけ離れたタイルをコピーすることになる。これを立体視すれば壁の位置ということになる。あとは式-11に従ってずらした、ということである。式-53の引数はまた整数ではなくて実数になる。これはまた式-50と同じことをして補間すればいい。ただし、最終的なタイルに対して位置とその値との両方を補間することになって、正しい補間にならない場合が起こる。
これをp=pTの位置から右端まで伝播させればいい。αH(∧p)は正でpTを超えることはないので常に可能である。
また左側に関して、こんどは原点を中央のテクスチャタイル右下を原点にとりなおす。つまり とする。そうすると とすればいいことは対称性からすぐわかる。
煩わしいのでこれ以降∧pなんかをただpと書くことにする。混乱しそうなときはちゃんと書く。
このように中央から左右の端に向かってD(p)の値を埋めていく。全部できたら、おもむろにテクスチャT0(p)から補間しながらS(p)を作っていけばいい。
2011-07-22 23:07
nice!(0)
コメント(0)
トラックバック(0)
コメント 0