作为一种信息,Vulkan是一个通过现代GPU实现的底层抽象层.它允许程序员对GPU进行编程并组装绘制管线。在这条管道上,有一些叫做“着色器”的程序模块。作为一个程序员,我们只有控制可编程着色器,而不是固定着色器。为了简单起见,我们只使用两种类型的可编程着色器:
从这些着色器,我想实现贝塞尔曲线 (形状)和扫描线算法填充颜色,用GPU渲染。计划的结果会是这样的。

注:我已经通过互联网探索了学习资源。然而,没有人真正谈到bezier曲线+ scanline算法在Vulkan中的实现。也许我漏掉了什么?请让我知道
发布于 2022-01-01 20:30:56
典型的解决方案是使用顶点着色器转换的三角形来计算边界结构。边界结构的计算足够大,以适应整个曲线,将画在里面。它可以是任何东西,从一个简单的四边形到一个紧密贴合的多边形。
然后,碎片着色器通过判断碎片是否位于曲线阴影下的区域来决定哪些碎片被着色。如果一个片段没有阴影,那么该片段将被丢弃,它被设置为某种背景色,或者它的alpha值根据程序的需要被设置为完全透明。当然,如果它是阴影,颜色被设置为曲线颜色。
通常,计算是在对象空间中进行的,以帮助简化片段着色器中的一些逻辑/计算。
对于Bezier曲线,可以使用多种方法来确定是否应该丢弃碎片。例如,计算每个曲线段的缠绕,并确定所述缠绕的哪一侧落在该碎片上。通常情况下,绕组被还原为有正反两面。如果一个碎片落在每条曲线的正边,那么它就会被丢弃。
顺便说一句,这是对字体如何直接从字体轮廓中提取的一个非常普遍的描述。
你在网络上找不到很多关于这方面的信息,因为它通常属于更先进的技术,也有人试图创造出一些广义的算法,这些算法有几个由数值不稳定引起的混叠问题。
https://computergraphics.stackexchange.com/questions/12436
复制相似问题