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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
猫の湯吞み
記事: 3
登録日時: 1年前

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

#1

投稿記事 by 猫の湯吞み » 1年前

zバッファを実装しようと思い
空間上にある三角形の任意の点のZ座標を取得したいのですが計算方法が分からず途方に暮れています。
ヒントだけでもいいので教えてもらえないでしょうか

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

アバター
あたっしゅ
記事: 664
登録日時: 13年前
住所: 東京23区
連絡を取る:

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

#2

投稿記事 by あたっしゅ » 1年前

[香車]東上☆あらし☆海美「
https://okwave.jp/qa/q6069803.html
3次元上の三角形内の任意点の高さを求める公式の導き方 - OKWAVE(ja)
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

アバター
usao
記事: 1887
登録日時: 11年前

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

#3

投稿記事 by usao » 1年前

> 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 になるよね.

アバター
usao
記事: 1887
登録日時: 11年前

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

#4

投稿記事 by usao » 1年前

おおっと! 「ピクセル座標」という言葉だとダメだ.Sorry.

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

アバター
usao
記事: 1887
登録日時: 11年前

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

#5

投稿記事 by usao » 1年前

(かえって面倒な話になってしまった感! なので…)
結局,ピクセル座標系におけるスキャンライン上の各画素について

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

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

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

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

猫の湯吞み
記事: 3
登録日時: 1年前

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

#6

投稿記事 by 猫の湯吞み » 1年前

返信が遅くなって申し訳ありません

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

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

アバター
usao
記事: 1887
登録日時: 11年前

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

#7

投稿記事 by usao » 1年前

一般に(?)は,前者の側の話をよく見る気がします.

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

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

---

> どちらがいいのか

あなたの状況次第で

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

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

アバター
usao
記事: 1887
登録日時: 11年前

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

#8

投稿記事 by usao » 1年前

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

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

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

#9

投稿記事 by みけCAT » 1年前

猫の湯吞み さんが書きました:
1年前
添付する方法が分からないためファイル転送サービスを利用しています
ログインしているようなので、投稿画面 (クイック返信は除く) の本文を入力する欄に添付するファイルをドラッグ&ドロップすることで添付できるはずです。
ドラッグ&ドロップできない端末を利用している場合でも、下の「添付ファイル」をクリックすると出てくる「ファイル追加」から添付できると思います。
mixcpp-attach-20230426.png
添付ファイル欄
ガラケー用のUIを用いている場合は、申し訳ないですがわかりません。(まだサービス生きてるのかな…?)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

猫の湯吞み
記事: 3
登録日時: 1年前

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

#10

投稿記事 by 猫の湯吞み » 11ヶ月前

大変返信が遅くなってしまい申し訳ありません。

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

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

アバター
あたっしゅ
記事: 664
登録日時: 13年前
住所: 東京23区
連絡を取る:

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

#11

投稿記事 by あたっしゅ » 11ヶ月前

[香車]東上☆あらし☆海美「
以前、『GPU を使わずに CPU だけで 3DCG したい』と書き込まれた方と同じ人ですか ?
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

返信

“C言語何でも質問掲示板” へ戻る