1

我想画一个像这样的立方体和圆圈(没有填充的球体)。我正在使用 OpenTK

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

我遇到了以下问题:我尝试在 Cube 的顶部画一个圆圈。但是当我们旋转立方体和圆时,圆变成了椭圆。

我尝试绘制球体而不是圆形。但不能像上图那样。有人有解决方案吗?提前致谢!

这是我的 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 部分。

所以:

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 回答