1

このような立方体と円(塗りつぶしのない球)を描きたいです。OpenTKを使用しています

http://farm7.static.flickr.com/6074/6097051938_cb0b798ce0_z.jpg

私は以下のような問題を抱えています:私はキューブの上部に円を描くことを試みました。しかし、立方体と円を回転させると、円は楕円になります。

円の代わりに球を描いてみました。ただし、上の画像のようにすることはできません。誰かが解決策を持っていますか?前もって感謝します!

そしてこれは私のものです http://farm7.static.flickr.com/6061/6096573967_22d56b2c2a_z.jpg

4

2 に答える 2

1

常にカメラに面する円を描きます。円を描くのは簡単です。頂点のリングを作成し、GL_LINE_STRIPを使用して描画するだけです。常にカメラを見る変換行列の作成は少し複雑です。これを行うコードは次のとおりです。これをワールドマトリックスとして設定するだけです。

Matrix4 createBillbordMatrix(Vector3 position, Vector3 cameraPosition, vector3 up)
{
   Vector3 Z = Vector3.Normalize(direction - cameraPosition);
   Vector3 X = Vector3.Normalize(Vector3.Cross(up, Zaxis));
   Vector3 Y = Vector3.Cross(ZAxis, XAxis);
   Vector3 T = cameraPosition;

   return new Matrix4(X.X, X.Y, X.Z, 0,
                      Y.X, Y.Y, Y.Z, 0,
                      Z.X, Z.Y, Z.Z, 0, 
                      T.X, T.Y, T.Z, 1);  
}

行列がどのように機能するかを知っている場合は、それがどのように機能するかを理解できるはずです;)。それ以外の場合は心配しないでください。問題なく実装できます。

于 2011-10-02T13:59:47.847 に答える
0

2D平面上に円を描きます。

特別な2D変換を使用します。これらは単なるワイヤーメッシュのようなレンダリングであり、すべて同じ色であるため、2Dパーツを最後に描画できます。

それで:

1. Draw the 3D part

2. Transform the corners to the 2D coords

3. Draw the circles.

立方体の回転に関係なく、円を一定の形状とサイズにする必要があると仮定します。

これはあなたが始めるのを助けるかもしれません: http ://www.opentk.com/node/2478

これは、影のない球体であっても、球体を描画するのに役立つようにするよりもはるかに高速です。

于 2011-08-31T22:59:31.350 に答える