好吧,假设我有O的形状,我想渲染它。
现在,我的当前呈现代码如下:
public void fill(Shape shape, float xOffset, float yOffset) {
AffineTransform transform = new AffineTransform();
transform.translate(xOffset, yOffset);
PathIterator pi = shape.getPathIterator(transform, 1);
int winding = pi.getWindingRule();
ShapeRenderer r = getInstance();
float[] coords = new float[6];
boolean drawing = false;
while (!pi.isDone()) {
int segment = pi.currentSegment(coords);
switch (segment) {
case PathIterator.SEG_CLOSE:
if (drawing) {
r.endPoly();
}
break;
case PathIterator.SEG_LINETO:
r.lineTo(coords);
break;
case PathIterator.SEG_MOVETO:
if (drawing) {
r.endPoly();
}
drawing = true;
r.beginPoly(winding);
r.moveTo(coords);
break;
default:
throw new IllegalArgumentException("Unexpected value: " + segment);
}
pi.next();
}
}
ShapeRenderer:
private final Deque<Queue<Float>> vertices = new ConcurrentLinkedDeque<>();
@Override
public void beginPoly(int windingRule) {
}
@Override
public void endPoly() {
Queue<Float> q;
GL11.glBegin(GL11.GL_LINE_LOOP);
while ((q = vertices.poll()) != null) {
Float x, y;
while ((x = q.poll()) != null && (y = q.poll()) != null) {
GL11.glVertex2f(x, y);
}
}
GL11.glEnd();
}
@Override
public void moveTo(float[] vertex) {
Queue<Float> q = new ConcurrentLinkedQueue<>();
vertices.offer(q);
lineTo(vertex);
}
@Override
public void lineTo(float[] vertex) {
Queue<Float> q = vertices.peekLast();
q.offer(vertex[0]);
q.offer(vertex[1]);
}
就像java awt一样,我想成功地填充这个形状.我该怎么做?(已经尝试使用GL_POLYGON,但它只填充了整个O,我有一个填充的圆圈,没有一个O。也尝试使用部分慢跑glu,但它只是没有提供任何线索,不知道为什么)
发布于 2021-12-12 03:15:53
已经尝试过使用GL_POLYGON,但它只填充了整个O,而我有一个填充的循环,“
当然可以。GL_POLYGON
用于凸性形状,并填充由多边形包围的整个区域。
你有两个选择:
GL_POLYGON
两次绘制白色形状,然后在白色形状内绘制红色形状。GL_TRIANGLE_STRIP
并形成一个只绘制轮廓的形状。原语可以通过在外部轮廓和内部轮廓上交替指定一个点来形成。https://stackoverflow.com/questions/70322976
复制相似问题