使用OpenGL绘制圆环体(Torus)

本篇介绍一下使用OpenGL绘制圆环体的方法。程序是在C#和OpenTK环境下编译的。

代码:

/// <summary>
/// 绘制圆环体
/// </summary>
/// <param name="Radius">圆环体半径</param>
/// <param name="TubeRadius">圆环体段半径</param>
/// <param name="Sides">圆环体段的侧面数</param>
/// <param name="Rings">圆环体段数</param>
void DrawTorus(double Radius = 50, double TubeRadius= 10, int Sides = 20, int Rings = 30)
{
    double sideDelta = 2.0 * Math.PI / Sides;
    double ringDelta = 2.0 * Math.PI / Rings;
    double theta = 0;
    double cosTheta = 1.0;
    double sinTheta = 0.0;

    double phi, sinPhi, cosPhi;
    double dist;

    GL.Color3(1.00f, 0.0f, 0.0f);

    for (int i = 0; i < Rings; i++)
    {
        double theta1 = theta + ringDelta;
        double cosTheta1 = Math.Cos(theta1);
        double sinTheta1 = Math.Sin(theta1);
        
        GL.Begin(BeginMode.QuadStrip);
        phi = 0;
        for (int j = 0; j <= Sides; j++)
        {
            phi = phi + sideDelta;
            cosPhi = Math.Cos(phi);
            sinPhi = Math.Sin(phi);
            dist = Radius + (TubeRadius * cosPhi);

            GL.Normal3(cosTheta * cosPhi, sinTheta * cosPhi, sinPhi);
            GL.Vertex3(cosTheta * dist, sinTheta * dist, TubeRadius * sinPhi);

            GL.Normal3(cosTheta1 * cosPhi, sinTheta1 * cosPhi, sinPhi);
            GL.Vertex3(cosTheta1 * dist, sinTheta1 * dist, TubeRadius * sinPhi);
        }
        GL.End();
        theta = theta1;
        cosTheta = cosTheta1;
        sinTheta = sinTheta1;

    }


}

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值