首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用scanline算法绘制Bezier曲线可以用Vulkan吗?

用scanline算法绘制Bezier曲线可以用Vulkan吗?
EN

Computer Graphics用户
提问于 2022-01-01 17:11:49
回答 1查看 727关注 0票数 1

作为一种信息,Vulkan是一个通过现代GPU实现的底层抽象层.它允许程序员对GPU进行编程并组装绘制管线。在这条管道上,有一些叫做“着色器”的程序模块。作为一个程序员,我们只有控制可编程着色器,而不是固定着色器。为了简单起见,我们只使用两种类型的可编程着色器:

  1. 计算每个点的几何变换的程序。每3个点总是代表一个三角形,但可以配置为3条线或3个点。
  2. 分段着色--这是每像素计算三角形(或线)上每个像素的颜色的程序。

从这些着色器,我想实现贝塞尔曲线 (形状)和扫描线算法填充颜色,用GPU渲染。计划的结果会是这样的。

问题

  1. 若要绘制Bezier线,必须设置像素位置。而在片段着色器中,像素位置不能由程序员设置,因为GPU已经设置了位置。
  2. 据我所知,仅仅将控制点设置为顶点是不可能生成曲线的。有解决这个问题的办法吗?
  3. 即使bezier可以由GPU绘制,我如何实现scanline算法添加填充颜色的片段着色?

注:我已经通过互联网探索了学习资源。然而,没有人真正谈到bezier曲线+ scanline算法在Vulkan中的实现。也许我漏掉了什么?请让我知道

EN

回答 1

Computer Graphics用户

回答已采纳

发布于 2022-01-01 20:30:56

典型的解决方案是使用顶点着色器转换的三角形来计算边界结构。边界结构的计算足够大,以适应整个曲线,将画在里面。它可以是任何东西,从一个简单的四边形到一个紧密贴合的多边形。

然后,碎片着色器通过判断碎片是否位于曲线阴影下的区域来决定哪些碎片被着色。如果一个片段没有阴影,那么该片段将被丢弃,它被设置为某种背景色,或者它的alpha值根据程序的需要被设置为完全透明。当然,如果它是阴影,颜色被设置为曲线颜色。

通常,计算是在对象空间中进行的,以帮助简化片段着色器中的一些逻辑/计算。

对于Bezier曲线,可以使用多种方法来确定是否应该丢弃碎片。例如,计算每个曲线段的缠绕,并确定所述缠绕的哪一侧落在该碎片上。通常情况下,绕组被还原为有正反两面。如果一个碎片落在每条曲线的正边,那么它就会被丢弃。

顺便说一句,这是对字体如何直接从字体轮廓中提取的一个非常普遍的描述。

你在网络上找不到很多关于这方面的信息,因为它通常属于更先进的技术,也有人试图创造出一些广义的算法,这些算法有几个由数值不稳定引起的混叠问题。

票数 1
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/12436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档