【发布时间】:2020-11-29 05:40:10
【问题描述】:
在将 GDI 代码迁移到 Direct2D 之前,我正在阅读 Direct2D,并且试图弄清楚路径是如何工作的。我了解与几何和几何接收器有关的大部分工作,但有一点我不明白:D2D1_FIGURE_BEGIN 类型及其参数为BeginFigure()。
首先,为什么需要这个值?为什么几何需要提前知道它是填充的还是空心的?我不知道还有其他绘图 API 关心路径对象是否被提前填充;您只需定义形状的端点并然后调用fill() 或stroke() 来绘制您的路径,那么几何形状有何不同?
如果这个参数是必要的,选择一个值而不是另一个值会如何影响我绘制的形状?
最后,如果我正确理解了这个枚举的用法,你应该只使用带有FillGeometry() 的填充路径和带有DrawGeometry() 的空心路径。但是,the hourglass example here 并被多个方法文档页面(如BeginFigure() one)引用创建一个填充图形并使用DrawGeometry() 和FillGeometry() 绘制它!这是未定义的行为吗?它与示例图片中渐变周围的蓝色边框有什么关系,我在代码中的任何地方都看不到?
谢谢。
编辑好的,我想我理解渐变的怪异轮廓是怎么回事:渐变也在转换 alpha 值,并且填充与描边重叠,因为描边位于线条的中心,并且填充是在描边之后绘制的。这仍然不能解释为什么我可以用填充几何体填充和描边,或者空心几何体和填充几何体之间的区别是什么......
我也刚刚意识到空心几何被记录为没有边界。这是否意味着空心几何体纯粹是针对仅笔划几何体的优化,并且在其他方面与填充几何体的行为相同?
【问题讨论】: