如何在OpenTK Xamarin.Forms中绘制圆

时间:2015-09-28 12:46:09

标签: c# opengl xamarin.forms opentk

我需要知道如何在Xamarin.Forms中使用OpenTK绘制透明圆/椭圆。

我尝试使用以下链接创建顶点和片段着色器:How to draw circle on OpenGL ES 2.0 cross platform?但是屏幕上没有任何内容,它在屏幕上显示为空白。

以下是用于在Xamarin.Forms中使用OpenTK绘制圆圈的示例代码。

        GL.ClearColor(0.0f, 0.0f, 0.0f, 1.0f);
        GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
        GL.Enable(EnableCap.DepthTest);


        GL.UseProgram(programID);
        // The locations where we pass in our color and vertex data
        positionInput = GL.GetAttribLocation(programID, "Position");
        colorInput = GL.GetAttribLocation(programID, "SourceColor");
        // The locations where we pass in unchanging data
        projectionInput = GL.GetUniformLocation(programID, "Projection");
        modelviewInput = GL.GetUniformLocation(programID, "Modelview");

        Matrix4 modelview = Matrix4.CreateRotationX(rotation) * Matrix4.CreateRotationY(rotation) * Matrix4.CreateRotationZ(rotation) * Matrix4.CreateTranslation(xTranslation, yTranslation, -7f);
        GL.UniformMatrix4(modelviewInput, false, ref modelview);

        float h = 4.0f * (height / width);
        Matrix4 projection = Matrix4.CreatePerspectiveOffCenter(-2, 2, -h / 2f, h / 2f, 4, 10);
        GL.Viewport(0, 0, (int)width, (int)height);
        GL.UniformMatrix4(projectionInput, false, ref projection);



        GL.BindBuffer(BufferTarget.ArrayBuffer, colorDataBuffer);
        GL.EnableVertexAttribArray(colorInput);
        GL.VertexAttribPointer(colorInput, 4, VertexAttribPointerType.Float, false, 0, 0);


       float DEGREE_TO_RAD = (float)( 3.14 / 180);
        int M_IN_DEGREE = 370;
        int N_IN_DEGREE = 100;
        int nCount = 1;
        int index = 0;
        int size = 2;
        float[] stVertexArray = new float[2*360];

        stVertexArray[0] = 0;
        stVertexArray[1] = 0;

        for( int nR =N_IN_DEGREE; nR < M_IN_DEGREE; nR++ )
        {
            float fX = (float) System.Math.Sin((float)nR * DEGREE_TO_RAD ) ;
            float fY = (float) System.Math.Cos((float)nR * DEGREE_TO_RAD );
            stVertexArray[nCount*2] = fX;
            stVertexArray[nCount*2 + 1] = fY;
            nCount++;
        }
        GL.BindBuffer(BufferTarget.ArrayBuffer, stVertexArray.Length);
        GL.EnableVertexAttribArray(0);


        GL.VertexAttribPointer (index,size, VertexAttribPointerType.Float, false, stVertexArray.Length, IntPtr.Zero);

        GL.DrawElements(BeginMode.LineLoop, stVertexArray.Length, DrawElementsType.UnsignedByte,stVertexArray);

        GL.Finish();

0 个答案:

没有答案