ページ 11

zバッファの計算方法が分からない

Posted: 2023年4月23日(日) 20:05
by 猫の湯吞み
zバッファを実装しようと思い
空間上にある三角形の任意の点のZ座標を取得したいのですが計算方法が分からず途方に暮れています。
ヒントだけでもいいので教えてもらえないでしょうか

質問が文面では伝わらないので画像をのせます(添付する方法が分からないためファイル転送サービスを利用しています)
https://xgf.nu/hEtAH

Re: zバッファの計算方法が分からない

Posted: 2023年4月24日(月) 01:31
by あたっしゅ
[香車]東上☆あらし☆海美「
https://okwave.jp/qa/q6069803.html
3次元上の三角形内の任意点の高さを求める公式の導き方 - OKWAVE(ja)

Re: zバッファの計算方法が分からない

Posted: 2023年4月24日(月) 10:40
by usao
> zバッファ

と言っているということは,三角形をラスタライズする処理をしているってことだよね?
で,その処理とは
ピクセル座標でのあるスキャンライン(水平線)に関して言えば
「(L,y) から (R,y) までを塗る」ような話になるハズ.
(ここで,LとRは そのy座標における三角形範囲の両端のx座標)

このとき,この両端点 (L,y)と(R,y) に対応する3次元空間上の点の座標 QL, QR は簡単に求まるよね(3次元の三角形の辺上の座標になる).
で,描画対象が三角形(平面)なのだから,この2点を結ぶ線分上の座標値の変化は線形だよね(辺上の座標を求めたのと全く同じ理屈だ).
例えば,ピクセル座標 ( (L+R)/2, y ) に対応する3次元座標は,( QL + QR )/2 になるよね.

Re: zバッファの計算方法が分からない

Posted: 2023年4月24日(月) 10:57
by usao
おおっと! 「ピクセル座標」という言葉だとダメだ.Sorry.

(L,y) とかは,正規化座標系(? 正しい言葉がわからないが)における「スクリーン座標(? 〃)」とでも言うかだ.
当然,考えているのは Orthogonal な投影だよ.
つまり,本当の意味での「ピクセル座標」から前記「スクリーン座標」を求める処理は必要なハズ.

Re: zバッファの計算方法が分からない

Posted: 2023年4月24日(月) 11:09
by usao
(かえって面倒な話になってしまった感! なので…)
結局,ピクセル座標系におけるスキャンライン上の各画素について

ピクセル座標 → ray → 三角形上の座標

って素直に計算するのが楽か.

・三角形(が乗る平面)から原点(視点)までの距離 d
・三角形の法線 N
・ray の方向を示す単位方向ベクトル t

に対して,
s * tN 方向成分が d になるようなスカラー s を求める感じで.

Re: zバッファの計算方法が分からない

Posted: 2023年4月26日(水) 07:23
by 猫の湯吞み
返信が遅くなって申し訳ありません

一応ピクセル座標あたりのzの値を求めることができたのですが
三角形のラスタライズについて疑問があります
https://xgf.nu/7ovC

y軸を区切ってx座標がどこにあるか判断する方法と
1ピクセルごとに分け中心の点が三角形の内側にあるかどうかを判断する方法
どちらがいいのか迷っています
zバッファの計算方法とは少し違う質問になってしまい、すみません。

Re: zバッファの計算方法が分からない

Posted: 2023年4月26日(水) 10:00
by usao
一般に(?)は,前者の側の話をよく見る気がします.

(空間上の三角形の像が三角形になる世界を扱っているならば)
3頂点の画像への投影位置さえ求めればそれでピクセル座標上の三角形の範囲がわかるわけで,
ピクセル座標上で三角形の内側の画素だけを処理するならば(空間上でも内側なことは自明なわけだから)画素毎にいちいち内外判定をする必要が無く,効率的だからでしょう.

そういうのを抜きにして画素毎に独立して内外判定していくのはレイトレーシング法な方向ですね.

---

> どちらがいいのか

あなたの状況次第で

・今々処理効率を突き詰めるべきところなのか
・とりあえず実装が楽な側で動く状態を用意できれば当面はOKなのか
・それぞれをやってみること自体に価値があるのか
・etc

というのは変わるでしょうけど,
特段切羽詰まっているわけでもない場合には【どっちも実装してみる & 動作速度とかを比較してみる】とかしてみれば 良い/楽しい/etc のではないでしょうか.

Re: zバッファの計算方法が分からない

Posted: 2023年4月26日(水) 10:12
by usao
ところで,UPされた図を見ると,
x,y,z の成分が丸出しで入り乱れた感じの数式が書いてありますが,
ベクトル演算の形で書いた方が(紙の上での数式も,実装も)大分楽になるんじゃないかと思います.
オフトピック
仮に「ベクトルがどうの」いう数学自体に慣れてないみたいな感じなのだとしても,
コレ系の話の説明とかは普通はベクトルを用いて行われてるんじゃないかと思うので,
慣れといた方がいいんじゃないかな,とか.

Re: zバッファの計算方法が分からない

Posted: 2023年4月26日(水) 19:03
by みけCAT
猫の湯吞み さんが書きました:
1年前
添付する方法が分からないためファイル転送サービスを利用しています
ログインしているようなので、投稿画面 (クイック返信は除く) の本文を入力する欄に添付するファイルをドラッグ&ドロップすることで添付できるはずです。
ドラッグ&ドロップできない端末を利用している場合でも、下の「添付ファイル」をクリックすると出てくる「ファイル追加」から添付できると思います。
mixcpp-attach-20230426.png
添付ファイル欄
ガラケー用のUIを用いている場合は、申し訳ないですがわかりません。(まだサービス生きてるのかな…?)

Re: zバッファの計算方法が分からない

Posted: 2023年5月09日(火) 08:27
by 猫の湯吞み
大変返信が遅くなってしまい申し訳ありません。

どっちも実装してみたところ高速で保守性が高いベクトル演算を利用することにしました。

長々と質問に付き合って下さりありがとうございます

Re: zバッファの計算方法が分からない

Posted: 2023年5月10日(水) 06:03
by あたっしゅ
[香車]東上☆あらし☆海美「
以前、『GPU を使わずに CPU だけで 3DCG したい』と書き込まれた方と同じ人ですか ?