2

中心から等距離の 3D 空間で、長方形/円/三角形などの形状を描画するプログラムがあります。

中心から等距離にある 2 点の例は次の(0,0,0)とおりです。

x1: 93, 313, 123
x2: -263, -135, -186

さらにポイントが付く場合もあります。

この2点で、次のような形を描いています

glRectangle(x1, width, height);

(x1 or x2)形状 (長方形/三角形など)は、中心から等距離にある開始頂点で非常にうまく表示されます。しかし、私が探しているものに関して、形状は空間内で間違った向きを持っています。

形状が存在する平面の中心が、中心から来る仮想線の前肢になるようにします。これはおそらく平面を回転させることで解決できますが、採用するアプローチについてはわかりません。現在の例では、形状の頂点があるとしましょうが、長方形が存在する平面をrotate that planeどのように把握し、それを (空間の中心から来る線に対して(0,0,0))前肢にするにはどうすればよいですか?

4

1 に答える 1

2

中心がベクトル C (coord-center と rect-center の間の線) に対して垂直である必要がある場合は、次のように動作する必要があります (疑似コード)。

A = C x UP_VECTOR (CROSS-PRODUCT to calculate helper vector pointing in "sideway" direction of "rectangle")
B = C x A (CROSS-PRODUCT to get the local "up/down" vector of the "rectangle")
A = normalize(A)
B = normalize(B)
P1 = width/2 * A + height/2 * B
P2 = -width/2 * A + height/2 * B
P3 = -width/2 * A + -height/2 * B
P4 = width/2 * A + -height/2 * B

うまくいけば、これは理解可能で正しいものです (試していないため、適切な語彙を見つけるのに苦労しました)

いくつかの追加情報: A と B はヘルパー ベクトルであり、長方形の局所的な上方向と左方向です。正規化した後、それらを使用して、それに応じて長方形の 4 つの点を計算できます。また、長方形が表示されない場合は注意してください。おそらく描画順序に関連しているため、前面と背面が間違っている場合は順序を逆にしてください...

于 2012-12-19T11:16:11.890 に答える