我想知道java现在如何填充他的多边形,我一直在尝试使用扫描线算法等等,现在已经结束了相当失真,所以我自己想知道Java是如何做到的?因为这看起来很清楚,它是否也使用扫描线或者它是一种完全不同的算法? (我试过在源头搜索但是地狱,这是一个迷宫。)
此致
答案 0 :(得分:1)
Open JDK源是available online。因此,您可以自己查看代码,但是您应该记住,通过查看代码,使用您所看到的自己代码的“灵感”,您可能会受到OpenJDK许可条件的约束,因此除非您愿意为代码使用兼容的许可证,否则不要太近视。
share/classes/java/awt/Graphics.java
开始,这是包含您可能会使用的fillPolygon
代码的界面。这是一个抽象方法,所以你必须查看实现该接口的类。share/classes/sun/java2d/SunGraphics2D.java
就是其中之一。它只是将fillPolygon
调用委托给sun.java2d.pipe.PixelFillPipe
对象上的匹配调用。但由于这只是一个界面,你将再次寻找实现。share/classes/sun/java2d/pipe/BufferedRenderPipe.java
是一种可能的实现方式。其fill
实现使用fillSpans
方法,其核心是在本机代码中实现的。share/native/sun/java2d/pipe/BufferedRenderPipe.c
具有相应的实现。所以,一旦你有了,从查看代码,了解跨度是什么以及如何将多边形转换为跨度,那么可能会告诉你如何渲染跨度。以上所有内容只是一个可能的代码路径。这在很大程度上取决于您使用的平台以及您要绘制的平台。打印有不同的原语,大多数平台有不同的原语。例如,在(非加速)X11连接上,solaris/native/sun/java2d/x11/X11Renderer.c
将简单地委托给XFillPolygon
。还有custom code for OpenGL-based graphics,但我刚才看不到填充优化。但仔细观察可能会很好。