【问题标题】:silhouette rendering with webgl / opengl使用 webgl / opengl 渲染剪影
【发布时间】:2020-04-11 06:38:04
【问题描述】:

我一直在尝试使用 webgl 在 CAD 模型上渲染轮廓。我得到的最接近预期结果的是fwidth 和法线和眼睛矢量之间的一个点。我发现很难控制宽度。

我看到另一个基于 Web 的查看器,它能够执行以下操作:

我开始深入研究着色器,我能想到的最多的是这是分析性的——绘制了一个实际的线实体,并且通过渲染四边形而不是默认的 webgl 线来实现宽度。着色器中有一堆逻辑,我最好的猜测是顶点位置在每次渲染时都会简单地更新。 这是一个程序模型,所以我猜对于圆锥和圆柱,总是可以分配两条线,计算轮廓点并更新线。

如果是这样的话,尝试在着色器中做这样的事情是个好主意吗(也许它已经发生了,但我不明白)。我可以看到一个圆柱体被写入属性或制服并计算了点。

是否有这样的方法已经记录在某处?

编辑 8/15/17

我还没有找到任何关于此的论文或记录技术。但它得到了几票。

鉴于我确实有关于圆柱体和圆锥体的信息,我的想法是从顶点对该参数曲面的法线进行采样,将曲面推出某个因子以覆盖屏幕空间中的一些像素,然后对其进行模板制作,并绘制一条粗线,从而将其与表面的实际形状相剪裁。

【问题讨论】:

    标签: opengl-es glsl webgl cad


    【解决方案1】:

    传统的基于着色器的方法是 Gooch 着色。原论文在这里:

    http://artis.imag.fr/~Cyril.Soler/DEA/NonPhotoRealisticRendering/Papers/p447-gooch.pdf

    【讨论】:

    • 我遇到了这个,但找不到任何看起来像它的边缘它主要谈论颜色的代码?无论哪种方式,上图中的具体情况是计算出的线段应该是轮廓。这与论文中的屏幕截图相反,这不能应用于螺旋弹簧吗?进一步的意思是,如果这个查看器对任意形状使用类似的东西来表示promitives,它肯定会用线条来增加它。
    【解决方案2】:

    来自Jeff Lander的老式OpenGL技术

    【讨论】:

    • 我最终通过检测边缘来做到这一点,基本上我放置了另外几个属性来保存边缘所属的两个三角形的法线,并在着色器中检查它们中的一个是否背离相机,而另一个面向。
    猜你喜欢
    • 2015-11-03
    • 2018-02-15
    • 1970-01-01
    • 2012-02-10
    • 2016-12-22
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    相关资源
    最近更新 更多