我想画一个圈(大境圈)与shaperenderer。
我尝试了两种不同的解决方案:
解决方案:绘制正圆圈,每1米像素的宽度和比前一次更大的1个像素。 问题与该:它产生一个图形毛刺。 (也具有不同的多重采样抗混叠值)
解决方法:画一个大的实心圆,然后绘制一个较小的用的backgroundColor。 问题:无法实现重叠环形状。 其他一切工作正常。
我不能使用环的质感,因为我必须增大/减小环半径动态。 边框宽度应始终具有相同的值。
怎样绘制光滑环与shaperenderer?
编辑:增加线宽没有帮助:
MeshBuilder
具有创建使用一个环选项ellipse
方法。 它允许你指定环的内部和外部尺寸。 通常,这将导致网,您将需要渲染自己。 但由于最近的变化也可能与一起使用PolygonSpriteBatch
(的实现Batch
,允许更灵活的形状,而SpriteBatch
只允许四芯)。 您可以使用PolygonSpriteBatch
,而不是在那里你通常会使用一个SpriteBatch
(如您的Stage
或Sprite
类)。
下面是一个例子如何使用它: https://gist.github.com/xoppa/2978633678fa1c19cc47 ,但请记住,你需要最新的夜间(或至少释放1.6.4)这一点。
也许你可以尝试进行环一些其他的方式,比如使用三角形。 我不熟悉LibGDX,所以这里的一些伪代码。
// number of sectors in the ring, you may need
// to adapt this value based on the desired size of
// the ring
int sectors=32;
float outer=0.8; // distance to outer edge
float inner=1.2; // distance to inner edge
glBegin(GL_TRIANGLES)
glNormal3f(0,0,1)
for(int i=0;i<sectors;i++){
// define each section of the ring
float angle=(i/sectors)*Math.PI*2
float nextangle=((i+1)/sectors)*Math.PI*2
float s=Math.sin(angle)
float c=Math.cos(angle)
float sn=Math.sin(nextangle)
float cn=Math.cos(nextangle)
glVertex3f(inner*c,inner*s,0)
glVertex3f(outer*cn,outer*sn,0)
glVertex3f(outer*c,outer*s,0)
glVertex3f(inner*c,inner*s,0)
glVertex3f(inner*cn,inner*sn,0)
glVertex3f(outer*cn,outer*sn,0)
}
glEnd()
可替代地,分割环成四个多边形,其每一个由整个环的四分之一。 然后使用ShapeRenderer来填补这些多边形。
这里是你将如何划分环的说明:
如果我理解你的问题,也许,使用glLineWidth();
帮你。
示例伪代码:
size = 5;
Gdx.gl.glLineWidth(size);
mShapeRenderer.begin(....);
..//
mShapeRenderer.end();