[英]How does java fill a polygon
我一直想知道Java如何填充他的多边形,我一直在自己尝试使用scanline算法等。这些方法现在已经完全扭曲了,所以我想知道Java是如何做到的? 因为这似乎很清楚,所以它是否也使用扫描线,还是一种完全不同的算法? (我尝试过在源代码中搜索它,但是,这真是一个迷宫。)
问候
Open JDK源可在线获得 。 因此,您可以自己查看代码,尽管您应该记住,通过查看该代码(使用您认为对自己的代码的“灵感”),您很可能要遵守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
。 对于基于OpenGL的图形 ,也有自定义代码 ,但是我现在看不到填充优化。 但是仔细看看可能会很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.