zoukankan      html  css  js  c++  java
  • 使用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;
    
        }
    
    
    }
  • 相关阅读:
    oracle索引
    linux命令
    struts2的配置文件struts.xml详解
    oracle删除一个表中的重复数据,且只保留一条
    初步研究java类的加载机制
    java读取Properties配置文件
    利用oracle闪回来找回被drop的表
    快速排序Quicksort
    树与树的概念
    递归
  • 原文地址:https://www.cnblogs.com/xpvincent/p/2913544.html
Copyright © 2011-2022 走看看