没有填充3D图形的球体

时间:2011-08-30 16:02:22

标签: 3d c#-2.0 opentk

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

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

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

我尝试绘制球体而不是圆圈。但不能使它像上面的图像。 有人有解决方案吗?提前谢谢!

这是我的 http://farm7.static.flickr.com/6061/6096573967_22d56b2c2a_z.jpg

2 个答案:

答案 0 :(得分: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

到目前为止 比试图让它帮助你画一个球体,甚至是一个没有阴影的球体更快。

答案 1 :(得分:0)

绘制一个始终面向相机的圆圈,绘制圆圈很容易。只需创建一个顶点环并使用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);  
}

如果你知道基质如何运作,你应该能够弄清楚它是如何运作的;)。否则不要担心,你应该没有问题实现它。