2011-08-30 105 views
1

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

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

我一直有问题如下: 我尝试立方的顶部画一个圆。但是当我们旋转立方体和圆时,这个圆就变成了椭圆。

我试着画圈而不是圈。但不能使它像上面的图像。 有人有解决办法吗?提前致谢!

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

回答

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); 
} 

如果你知道matricies是如何工作的,你应该能够知道它是如何工作的)。否则,不要担心,你不应该有执行它的问题。

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

这将是远远不是试图让它帮你画一个球体,甚至无阴影的速度更快。