我想用shaperenderer绘制一个戒指(带有大边框的圆圈)。
我尝试了两种不同的解决方案:
解决方案:绘制n个圆圈,每个圆圈的宽度为1像素,比之前的像素宽1个像素。问题在于:它会产生图形故障。 (还有不同的多重采样抗锯齿值)
解决方案:绘制一个大的填充圆,然后用backgroundcolor绘制一个较小的圆。问题:我无法实现重叠的环形状。其他一切都很好。
我不能使用环形纹理,因为我必须增加/减少环形半径动态。边框宽度应始终具有相同的值。
如何使用shaperenderer绘制光滑的环?
编辑: 增加行宽并没有帮助:
答案 0 :(得分:1)
也许您可以尝试以其他方式制作戒指,例如使用三角形。我对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填充每个多边形。
以下是如何分割戒指的说明:
答案 1 :(得分:1)
MeshBuilder
可以选择使用ellipse
方法创建一个响铃。它允许您指定环的内部和外部大小。通常这会产生一个Mesh,您需要自己渲染。但是由于最近的更改,它也可以与PolygonSpriteBatch
(Batch
的实现一起使用,允许更灵活的形状,而SpriteBatch
只允许四边形)。您可以使用PolygonSpriteBatch
代替通常使用SpriteBatch
的地方(例如,您的Stage
或Sprite
类。)
以下是如何使用它的示例:https://gist.github.com/xoppa/2978633678fa1c19cc47,但请记住,您确实需要最新的每晚(或至少发布1.6.4)。
答案 2 :(得分:0)
如果我理解你的问题,
也许,使用glLineWidth();
帮助你。
示例伪代码:
size = 5;
Gdx.gl.glLineWidth(size);
mShapeRenderer.begin(....);
..//
mShapeRenderer.end();