Exemplo n.º 1
0
        //绘制1坐标轴,含有箭头:
        private void DrawOLineInGL(double azimuth, double elevation, float length, float width, Color color, bool arrow)
        {
            float colorR, colorG, colorB;
            float x, y, z;

            colorR = color.R / 255.0f;
            colorG = color.G / 255.0f;
            colorB = color.B / 255.0f;

            x = length * (float)Math.Cos(elevation) * (float)Math.Cos(azimuth);
            y = length * (float)Math.Cos(elevation) * (float)Math.Sin(azimuth);
            z = length * (float)Math.Sin(elevation);

            GL.LineWidth(width);
            GL.Begin(BeginMode.Lines);
            GL.Color3(colorR, colorG, colorB);
            GL.Vertex3(0.0f, 0.0f, 0.0f);
            GL.Vertex3(x, y, z);     //三轴末端位置
            GL.End();

            if (arrow)
            {
                float vx, vy, vz;
                vx = xMul(y, z, 0, 1);
                vy = xMul(z, x, 1, 0);
                vz = xMul(x, y, 0, 0);

                GL.LineWidth(1.0f);
                GL.PushMatrix();       //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

                GL.Translate(x, y, z); //坐标轴箭头所在位置
                if (isInLimits(elevation, Math.PI / 2, Math.PI / 2 * 3))
                {
                    GL.Rotate((float)(90 - elevation / Math.PI * 180), vx, vy, vz);     //上半球?
                }
                else
                {
                    GL.Rotate(-(float)(90 - elevation / Math.PI * 180), vx, vy, vz); //下半球?
                }
                Glu.Cylinder(Glu.NewQuadric(), 0.03, 0.0, 0.2, 20, 5);               //圆锥形作箭头
                //Glu.Sphere(Glu.NewQuadric(), 0.05, 12, 12);//球体作箭头
                GL.PopMatrix();                                                      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
            }
        }
Exemplo n.º 2
0
        //画多个内置立体件:
        private void DrawModels() 
        {
            float width = 3;
            float height = 3;
            float length = 3;

            GL.LineWidth(4);
            GL.PointSize(8);   
            var obj = Glu.NewQuadric();
            //Glu.QuadricDrawStyle(obj, QuadricDrawStyle.Line);
            //Glu.QuadricDrawStyle(obj, QuadricDrawStyle.Silhouette);
            //Glu.QuadricDrawStyle(obj, QuadricDrawStyle.Point);
            //Glu.QuadricDrawStyle(obj, QuadricDrawStyle.Fill); 
            Glu.QuadricDrawStyle(obj, QuadricDrawStyle.Line);

            //画大正方形上可旋转各对象 Draw plane that the objects rest on
            GL.PushMatrix();
            GL.Color4(0.5f,0.3f, 0.5f, 0.5f); // Blue
            GL.Normal3(0.0f, 1.0f, 0.0f);
            GL.Begin(BeginMode.Quads);
            GL.Vertex3(-10.0f, -2.5f, -10.0f);
            GL.Vertex3(-10.0f, -2.5f, 10.0f);
            GL.Vertex3(10.0f, -2.5f, 10.0f);
            GL.Vertex3(10.0f, -2.5f, -10.0f);
            GL.End();
            GL.PopMatrix();

            //画网线空心球
            GL.PushMatrix();
            GL.Color3(0.6f, 0.6f, 0.8f);
            GL.Translate(0.0f, -3.0f, 0.0f);       
            Glu.Sphere(obj, 2, 6, 4);//球体-----------------    
            GL.PopMatrix();

            //画立方体(6个正方形) Draw red cube            
            GL.PushMatrix();
            GL.Color3(0.5f, 0.75f, 0.5f);
            GL.Translate(0.0f, 3.0f, 0.0f);
            GL.Begin(BeginMode.Quads);
            //
            GL.Normal3(0.0f, 0.0f, -1.0f);
            GL.Vertex3(-width, height, -length); //0
            GL.Vertex3(width, height, -length);  //1
            GL.Vertex3(width, -height, -length);//2
            GL.Vertex3(-width, -height, -length); //3
            //
            GL.Normal3(0.0f, 0.0f, 1.0f);
            GL.Vertex3(-width, height, length);  //4
            GL.Vertex3(-width, -height, length); //5
            GL.Vertex3(width, -height, length);   //6
            GL.Vertex3(width, height, length);  //7
            //
            GL.Normal3(0.0f, 1.0f, 0.0f);
            GL.Vertex3(-width, height, length);  //8 (4)
            GL.Vertex3(width, height, length);   //9 (6)
            GL.Vertex3(width, height, -length); //10 (0)
            GL.Vertex3(-width, height, -length);  //11 (1)
            //
            GL.Normal3(0.0f, -1.0f, 0.0f);
            GL.Vertex3(-width, -height, length); //12 (5)
            GL.Vertex3(-width, -height, -length);//13 (2)
            GL.Vertex3(width, -height, -length);  //14 (7)
            GL.Vertex3(width, -height, length); //15 (3)
            //
            GL.Normal3(1.0f, 0.0f, 0.0f);
            GL.Vertex3(width, height, -length);  //16 (1)
            GL.Vertex3(width, height, length);   //17 (6)
            GL.Vertex3(width, -height, length); //18 (3)
            GL.Vertex3(width, -height, -length);  //19 (7)
            //
            GL.Normal3(-1.0f, 0.0f, 0.0f);
            GL.Vertex3(-width, height, -length); //20 (0)
            GL.Vertex3(-width, -height, -length);//21 (2)
            GL.Vertex3(-width, -height, length);  //22 (4)
            GL.Vertex3(-width, height, length); //23 (5)
            //
            GL.End();
            GL.PopMatrix();

            //绿色球体 Draw green sphere            
            GL.PushMatrix();
            GL.Color3(0.0f, 1.0f, 0.0f);
            GL.Translate(-6.0f, 0.0f, 0.0f);
            Glu.Sphere(obj, 2.5f, 8, 12);
            GL.PopMatrix();

            //黄色锥体 Draw yellow cone            
            GL.PushMatrix();
            GL.Color3(1.0f, 1.0f, 0.0f);
            GL.Rotate(-90.0f, 1.0f, 0.0f, 0.0f);
            GL.Translate(6.0f, 0.0f, -2.4f);
            Glu.Cylinder(obj, 2.5f, 1.0f, 5.0f, 8, 12);
            GL.PopMatrix();

            //绘制实心圆环 Draw magenta torus            
            GL.PushMatrix();
            GL.Color3(1.0f, 0.0f, 1.0f);
            GL.Translate(0.0f, 0.0f, 2.0f);
            DrawTorus(5.0f, 1.0f, 20, 20);//绘制实心圆环
            GL.PopMatrix();

            //绘制八面体 Draw cyan octahedron            
            GL.PushMatrix();
            GL.Color3(0.0f, 1.0f, 1.0f);
            GL.Translate(0.0f, -2.0f, 0f);
            Glu.Sphere(obj, .5, 4, 2);//绘制八面体
            GL.PopMatrix();
        }