C#OpenGL(SharpGL)程序生成墨卡托球(极坐标)

时间:2014-03-18 06:03:32

标签: c# opengl geometry procedural-generation sharpgl

我想知道在开始结束批处理中使用for循环写入点是否有效,所以我读了一个球体算法并根据我的阅读产生了这个。它有一些问题,如下面的输出屏幕截图所示。我的目标是在程序上生成一个球体,然后在运行时修改它。

但是我想在短期内确定目标并找出面部不正确的原因。有人有什么想法吗?

我有这段代码:

private void openGLControl_OpenGLDraw(object sender, RenderEventArgs e)
    {
        //  Get the OpenGL object.
        OpenGL gl = openGLControl.OpenGL;

        //  Clear the color and depth buffer.
        gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

        //  Load the identity matrix.
        gl.LoadIdentity();

        //  Rotate around the Y axis.
        gl.Rotate(rotation, 0.0f, 1.0f, 0.0f);

        //Draw a ball
        //Drawing Mode
        gl.PolygonMode(SharpGL.Enumerations.FaceMode.FrontAndBack, SharpGL.Enumerations.PolygonMode.Lines);
        //ball fields
        double radius = 4.0d;
        const double DEGREE = Math.PI/11.25;
        double x = 0;
        double y = 0;
        double z = 0;
        // ball batch
        gl.Begin(OpenGL.GL_TRIANGLE_STRIP_ADJACENCY);
        for (double j = 0.0d; j < Math.PI; j = j +DEGREE)
        {

            for (double i = 0; i < 2 * Math.PI; i = i + DEGREE)
            {

                x = radius * Math.Cos(i) * Math.Sin(j);
                y = radius * Math.Sin(j) * Math.Sin(i);
                z = radius * Math.Cos(j);
                gl.Color(Math.Abs(x + y), Math.Abs(y + z), Math.Abs(z + x));
                gl.Vertex(x, y, z);
            }

        }
        gl.End();

        //  Nudge the rotation.
        rotation += 3.0f;
    }

A screen-cap of my output

0 个答案:

没有答案