使用OpenGl创建2D圆

时间:2016-10-04 07:23:56

标签: arrays opengl math

我使用Arrays在OpenGl中创建了一个rectangel。 这是阵列:

  float[] vertices = { 
                -0.5f, 0.5f, 0f,
                -0.5f, -0.5f, 0f, 
                0.5f, -0.5f, 0f, 
                0.5f, 0.5f, 0f, 
        };

        int[] indcies = {
            0,1,3,
            3,1,2

        };

        float[] texture_Coord ={

                0,0,
                0,1,
                1,1,
                1,0

        };

我应该如何修改我的阵列以创建一个简单的圆圈,你可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

这更难,因为虽然在Open GL中只有一种明智的方式来表示矩形,但是有很多种方法可以表示圆形。更高级别的代码使用Bezier表示,然后仅在最后一步光栅化Bezier,这是正常的高端方式。或者,您可以创建N个边的多边形,其中N被选择为在视觉上与圆不可区分。然而,这对缩放来说并不健壮。或者,您可以调用圆绘制算法并将像素转换为点链。这将为你提供一个像素完美的圆圈,但如果你改造它也不会是像素完美的。

答案 1 :(得分:0)

你可以使用圆的参数方程:(x,y,z)=(r cos(t)+ x0,r sin(t)+ y0,0)其中t个样本形式0到2Pi,r是半径,x0和y0指定圆的中心。如果您对圆圈加中心进行n次采样,则会有n + 1个顶点。如果要对圆进行三角测量,可以按0,i,i + 1等顺序将所有顶点连接到中心。如果您只想使用线条渲染边界,则不需要中心,您可以将顶点放到第(i + 1)个顶点。下面是一个代码,您可能会发现对圆形和顶点进行采样非常有用,因为索引取决于您可能想要创建不同数组的渲染类型:

for(float t=0;t<2*Math.Pi;i+=0.1)
{
   vertices[i]=r*Math.Cos(t)+x0;
   vertices[i+1]=r*Math.Sin(t)+y0;
   vertices[i+2]=0; 
}