我想绘制一个像这样的立方体和圆圈(没有填充的球体)。我正在使用OpenTK
http://farm7.static.flickr.com/6074/6097051938_cb0b798ce0_z.jpg
我一直遇到如下问题: 我试着在Cube的顶部画一个圆圈。但是当我们旋转Oy立方体和圆形时,圆形变成椭圆形。
我尝试绘制球体而不是圆圈。但不能使它像上面的图像。 有人有解决方案吗?提前谢谢!
这是我的 http://farm7.static.flickr.com/6061/6096573967_22d56b2c2a_z.jpg
答案 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);
}
如果你知道基质如何运作,你应该能够弄清楚它是如何运作的;)。否则不要担心,你应该没有问题实现它。