在openGL中用Android绘制圆圈
问题描述:
我正在寻找一种方法来绘制基本上充当地平线的圆的OUTLINE。我不想填满这个圆圈,但是只要有一条白线可以看到,即使当你从侧面看它时,它也能看到它。这是可能的吗?有人可以给我看一个教程或告诉我如何?在openGL中用Android绘制圆圈
答
有比SteveL发布的更有效的方法。
您可以根据当前点,切线向量和余弦向量找到圆上下一个点,而不是计算每个点的trig函数(一种计算量大的方法)。 trig函数计算一次,然后每个后续点是一系列乘法,速度要快得多。
该页面提供对OpenGL的过程中一个非常明确的步进式,但是你可以很容易地申请史蒂夫的答案,使其在OpenGL ES工作:
答
我认为,如果你使用gl.glLineWidth(20);(或者其他大小)的线THIK将incease太(propably我错了,但值得一试)
为了得到一个圆的verices :
float[] verts=MakeCircle2d(1,100,0,0)
public static float[] MakeCircle2d(float rad,int points,float x,float y)//x,y ofsets
{
float[] verts=new float[points*2+2];
boolean first=true;
float fx=0;
float fy=0;
int c=0;
for (int i = 0; i < points; i++)
{
float fi = 2*Trig.PI*i/points;
float xa = rad*Trig.sin(fi + Trig.PI)+x ;
float ya = rad*Trig.cos(fi + Trig.PI)+y ;
if(first)
{
first=false;
fx=xa;
fy=ya;
}
verts[c]=xa;
verts[c+1]=ya;
c+=2;
}
verts[c]=fx;
verts[c+1]=fy;
return verts;
}
它画成GL10.GL_LINES如果你想有一个空的圆形
gl.glDrawArrays(GL10.GL_LINES, 0, verts.length/2);
或者,如果你想要一个充满绘制成GL10.GL_TRIANGLE_FAN一个
gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, verts.length/2);
+0
真棒感谢..如果我现在想从空心圆每隔5度垂直画一条线我会同时做还是再次穿过阵列? – erik 2012-02-21 05:37:38
我喜欢他已经解释过如何绘制而不反复使用三角函数的方式。虽然我很想问,他是如何计算tx,ty值的。 – 2012-06-09 13:27:47
另外一个绘制弧的解释,以便考虑方向(CW或CCW)将是有用的。如果你有例如。我们使用slabode代码绘制圆形连接的偏移多边形,则开始和结束角度可以按任何顺序排列。另外一个多边形本身可以是CW或CCW,所以缠绕顺序非常重要。但是,如果弧角(结束角度)大于起始角度,代码工作得很好。 – 2013-02-08 20:58:55
链接无法正常工作 – Confuse 2017-09-08 05:23:07