首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在OpenGL中填充java形状

如何在OpenGL中填充java形状
EN

Stack Overflow用户
提问于 2021-12-12 11:05:20
回答 1查看 64关注 0票数 1

好吧,假设我有O的形状,我想渲染它。

现在,我的当前呈现代码如下:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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,但它只是没有提供任何线索,不知道为什么)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-12 11:15:53

已经尝试过使用GL_POLYGON,但它只填充了整个O,而我有一个填充的循环,“

当然可以。GL_POLYGON用于凸性形状,并填充由多边形包围的整个区域。

你有两个选择:

  1. 使用GL_POLYGON两次绘制白色形状,然后在白色形状内绘制红色形状。
  2. 使用GL_TRIANGLE_STRIP并形成一个只绘制轮廓的形状。原语可以通过在外部轮廓和内部轮廓上交替指定一个点来形成。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70322976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档