3D GRAPHICS · CHAPTER 02 · FACES & VISIBILITY

見えない線を消すには?

8頂点・12辺の立方体に6枚の面を追加。外積で法線を求め、内積で表裏を判定し、隠れている線がなぜ残るかを実験します。

LIVE · CANVAS 2D

手前の立方体Bが奥のAを隠す場面を作っています。2つ目の立方体を有効にして、3方式を切り替えてください。

面の法線・視線との内積
01 / 頂点 → 面

面は頂点の順序で決まる

4頂点を [0,3,2,1] と結ぶと、立方体のカメラ側(−Z側)の面を定義できます。頂点順序を逆にすると表裏が逆になります。

02 / 外積

面の法線ベクトル

a = B − A,  b = C − A
n = a × b
n = (ay·bz − az·by,
     az·bx − ax·bz,
     ax·by − ay·bx)

外積は2つの辺に垂直な方向を与えます。符号は頂点の並びで決まります。

03 / 内積

表を向いているか

v = camera − faceCenter
d = n · v
d > 0 → 正面(この教材の規約)

「②」では正面を向く面に属する辺だけ描きます。ただし立体Bの手前に隠れた立体Aの線は消えません。

04 / 隠面

背面判定だけでは足りない

「③」は面を奥から順に不透明で塗って隠れを表現します。交差する面・循環的に重なる面では単純な中心Zソートは破綻します。次章は画素単位の Z-buffer です。