投稿
InDoor TheInDoor12
ヒャッハーー!(←狂い気味) ついに、ポリゴンの裏表判定の計算で出る値が逆になる理由を突き止めたー! これで残る問題は、あと一つに。
5そうだね
プレイ済み
返信[1]
親投稿
InDoor TheInDoor12
いやあ、どの辞書とは言わないけどね… 右手系での計算なら、そう書いておいてくれないと左手系信者の僕が困るじゃないか。 外積なんて嫌いだあ(←世話になっている分際で何を言う)
0そうだね
プレイ済み
返信[2]
親投稿
InDoor TheInDoor12
>うえこうさん えーと、 裏表判定でプチコンの演算誤差とは思えない範囲の誤差が出ます。 …説明になってるかなあ
0そうだね
プレイ済み
返信[3]
親投稿
InDoor TheInDoor12
えーとえーと 裏表判定は、背面カリングという処理で使う計算です。 背面カリングというのは、カメラから見たポリゴンの向きを判定して裏向きのとき描画をやめるという処理で、 処理速度を上げたりポリゴン欠けを防いだりします。 そんでもってポリゴンの裏表が何なのかというと… うー、言葉で説明できんので図で説明します
0そうだね
プレイ済み
返信[4]
親投稿
InDoor TheInDoor12
0そうだね
プレイ済み
返信[5]
親投稿
InDoor TheInDoor12
このカメラから見ると、奥にあるポリゴンは裏向きです(反対側から見ると表になる)。 んで、立方体などの場合、裏向きのポリゴンは他のポリゴンに完全に隠れてしまいます。 ということで描画する必要なし、ということです。 …うーん、あやしい説明。 わからない場合、容赦なく指摘してくださいな。
0そうだね
プレイ済み
返信[6]
親投稿
カービィ★KIRBY Kirbystar_Nin751
1そうだね
プレイ済み
返信[7]
親投稿
InDoor TheInDoor12
>>カービィ★KIRBY さん そんなかんじです。うう、絵心がほしい >>うえこう さん >奥にある順番 完璧な方法がないので、いろいろ方法があります。 僕はポリゴンの頂点のZ座標を足し合わせた値でソートしていますが、これだけだとポリゴン欠けがひどいです。 だからといって複雑な方法を使うとプチコンの速度が持たないし… >隠れているのってどういう仕組みですか? なぜ裏のときは隠れていると断言できるのか、という質問でしょうか?それとも、どういう計算で裏か表かを調べているのかという質問でしょうか?
0そうだね
プレイ済み
返信[8]
親投稿
かたけ~ katakei05
要するに完全に隠れていて見えてないポリゴン(三角)は描画しない。ということでしょうか?
0そうだね
プレイ済み
返信[9]
親投稿
けい kei0baisoku
何となくちょっとだけ補足。 裏面を描画しないのは他のものに隠れるからではなく、現実世界の板のようなものとは違って、見せる必要が無い場合があるから、が近いです。 カービィさんのイラストのように部屋の壁の外側とか、人物のモデルの内側とか、世界の一番外側の背景の板の裏側とか。 ただ、場合によるので裏側も見せたいこともたくさんあります。 どちらの場合もあるなら常に裏面も描画しておいた方が確実なのですが、じゃあなんで裏面は描かない設定があるかというと、InDoorさんの説明のように計算負荷を大幅に減らせるからです。 単純に考えて裏は全部スキップできるから2倍の差!
1そうだね
プレイ済み
返信[10]
親投稿
InDoor TheInDoor12
>かたけ~ さん けい さんの仰るとおり、「見せる必要が無い場合があるから」描画しない、というのが正確なところだと思います。
0そうだね
プレイ済み
返信[11]
親投稿
InDoor TheInDoor12
>うえこう さん 例のバグが残っているので「これが正しい」と断言はできませんが、一応それっぽく動くので自分のやり方を書いてみます。 カメラから見て頂点が時計回りなら表、反時計周りなら裏とすることを考える。 まず、ポリゴンを2つのベクトルに分割して、 例:ポリゴン(頂点A,B,C)↓ ベクトルP(Bx-Ax,By-Ay,Bz-Az), ベクトルQ(Cx-Ax,Cy-Ay,Cz-Az) 外積P×Qを公式にかけて求める。 ※2つのベクトルA,Bがあるとき、それらを2辺とする平行四辺形に垂直で、180°以内の回転角で右ねじをAからBに回した時に進む向きをもち、大きさがこの平行四辺形の面積と等しいベクトルのことをA,Bの外積といい、A×Bと書く。 [続く]
0そうだね
プレイ済み
返信[12]
親投稿
InDoor TheInDoor12
[続き] 次に、カメラの位置と頂点の座標から視線ベクトルを求め、それと上の外積との内積を公式にかけて求める。 ※2つのベクトルがあるとき、(Aの長さ)*(Bの長さ)*cos(180°以内でAとBのなす角)をA,Bの内積という。 内積の正負によって、裏表を判定する。 …なんかとっても難しそうな説明になってしまいましたが、ベクトルの概念さえわかっていればたぶん理解できると思います。 内積と外積を求める公式や、これで裏表が判定できる理由は、もし知りたいのであれば説明します。
0そうだね
プレイ済み
返信[13]
親投稿
InDoor TheInDoor12
…やったぞ! 例のバグ、原因がわかったー! えーと、かなりしょーもないところで引っ掛かってました。 裏表の判定は、上の説明の方法で問題ないっす。
0そうだね
プレイ済み