我们希望使用线性插值(例如 OpenGL)在 pdf 等矢量图形文件中混合在三角形顶点指定的颜色。
这个例子混合了红色、蓝色和绿色:
这在PDF中可能吗?如果不是,那么 SVG 或其他一些支持良好的矢量图形文件格式?
似乎梯度网格很强大,但它们可以退化以精确再现线性插值吗?
我们希望使用线性插值(例如 OpenGL)在 pdf 等矢量图形文件中混合在三角形顶点指定的颜色。
这个例子混合了红色、蓝色和绿色:
这在PDF中可能吗?如果不是,那么 SVG 或其他一些支持良好的矢量图形文件格式?
似乎梯度网格很强大,但它们可以退化以精确再现线性插值吗?
你的问题的纯粹答案是“不”。您不能在 SVG 或 PDF 中进行三点渐变。
但是,您可以使用几个渐变和蒙版轻松再现该图像。
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%" viewBox="0 0 100 86.6">
<defs>
<linearGradient id="bluegreen" gradientUnits="objectBoundingBox" x1="0.5" x2="1" y2="1">
<stop offset="0%" stop-color="#0000ff"/>
<stop offset="100%" stop-color="#00ff00"/>
</linearGradient>
<linearGradient id="fader" gradientUnits="objectBoundingBox" x1="0" y1="1" x2="0.75" y2="0.5">
<stop offset="0%" stop-color="white" />
<stop offset="100%" stop-color="black" />
</linearGradient>
<mask id="redmask" maskUnits="objectBoundingBox" maskContentUnits="objectBoundingBox">
<path d="M 0.5,0 L 1,1 0,1 Z" fill="url(#fader)" />
</mask>
</defs>
<g>
<path d="M 50,0 L 100,86.6 0,86.6 Z" fill="url(#bluegreen)"/>
<path d="M 50,0 L 100,86.6 0,86.6 Z" fill="#ff0000" mask="url(#redmask)"/>
</g>
</svg>
更新:实际上,我在想什么?:/你不需要面具。你可以用两个线性渐变来做到这一点。
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100%" height="100%" viewBox="0 0 100 86.6">
<defs>
<linearGradient id="bluegreen" gradientUnits="objectBoundingBox" x1="0.5" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#0000ff"/>
<stop offset="100%" stop-color="#00ff00"/>
</linearGradient>
<linearGradient id="redfade" gradientUnits="objectBoundingBox" x1="0" y1="1" x2="0.75" y2="0.5">
<stop offset="0%" stop-color="#ff0000" />
<stop offset="100%" stop-color="#ff0000" stop-opacity="0" />
</linearGradient>
</defs>
<g>
<path d="M 50,0 L 100,86.6 0,86.6 Z" fill="url(#bluegreen)"/>
<path d="M 50,0 L 100,86.6 0,86.6 Z" fill="url(#redfade)"/>
</g>
</svg>