拉环与shapeRenderer在LibGDX(Draw Ring with shapeRender

2019-10-23 15:02发布

我想画一个圈(大境圈)与shaperenderer。

我尝试了两种不同的解决方案:

  1. 解决方案:绘制正圆圈,每1米像素的宽度和比前一次更大的1个像素。 问题与该:它产生一个图形毛刺。 (也具有不同的多重采样抗混叠值)

  2. 解决方法:画一个大的实心圆,然后绘制一个较小的用的backgroundColor。 问题:无法实现重叠环形状。 其他一切工作正常。

我不能使用环的质感,因为我必须增大/减小环半径动态。 边框宽度应始终具有相同的值。

怎样绘制光滑环与shaperenderer?

编辑:增加线宽没有帮助:

Answer 1:

MeshBuilder具有创建使用一个环选项ellipse方法。 它允许你指定环的内部和外部尺寸。 通常,这将导致网,您将需要渲染自己。 但由于最近的变化也可能与一起使用PolygonSpriteBatch (的实现Batch ,允许更灵活的形状,而SpriteBatch只允许四芯)。 您可以使用PolygonSpriteBatch ,而不是在那里你通常会使用一个SpriteBatch (如您的StageSprite类)。

下面是一个例子如何使用它: https://gist.github.com/xoppa/2978633678fa1c19cc47 ,但请记住,你需要最新的夜间(或至少释放1.6.4)这一点。



Answer 2:

也许你可以尝试进行环一些其他的方式,比如使用三角形。 我不熟悉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来填补这些多边形。

这里是你将如何划分环的说明:



Answer 3:

如果我理解你的问题,也许,使用glLineWidth(); 帮你。

示例伪代码:

size = 5;

Gdx.gl.glLineWidth(size);

mShapeRenderer.begin(....);
..//
mShapeRenderer.end();


文章来源: Draw Ring with shapeRenderer in LibGDX