【问题标题】:OpenGL GLSL Cel Shading and Outline algorithmOpenGL GLSL Cel Shading and Outline 算法
【发布时间】:2012-06-26 15:33:29
【问题描述】:

我已经使用 glsl 成功实现了一个 cel 着色器。但是我的问题是关于概述所有内容,互联网上的每个 opengl 示例都非常陈旧,与当前技术不匹配,因此技术很慢等等......所以我无论如何都找不到在 glsl 中做这件事。我想过一些想法,比如将最不密集的区域着色为黑色,但关于 gl_Vertex、gl_Position 和眼睛位置的解释甚至不够。所以,由于每一项技术都太老了,我终于决定向某人询问这个大纲问题。

【问题讨论】:

    标签: opengl glsl outline


    【解决方案1】:

    你看过 glPolygonOffset 吗?

    我用它在填充的多边形上绘制轮廓。

    http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPolygonOffset.xml

    【讨论】:

    • 然而,你对你的方法没有说什么,这并不明显,这使得答案不是很有用。当你这样做时,我会回复你的观点:)
    【解决方案2】:

    我会在 zbuffer 上使用某种边缘检测过滤器(可能与颜色缓冲区上的边缘检测结合使用),然后用(反转的)结果调制帧缓冲区。最常见的边缘检测过滤器之一是 sobel 算子:

    http://en.wikipedia.org/wiki/Sobel_operator

    编辑: 另一种便宜的方法是在渲染普通网格之前绘制一个黑色的网格副本,剔除面反转,顶点在法线方向略微移动。这可能是他们在 XIII 中所做的,我也很确定这就是在 Jet Set Radio 中所做的。

    EDIT2:如果您希望轮廓的粗细保持不变,而不管与观察者的距离如何,您应该根据该距离缩放顶点的移动量。

    【讨论】:

    • 我觉得简单的大纲太贵了。
    • 您的目标是哪种硬件?
    • 像 x1650pro 等价物。 XIII 游戏以某种方式实现了对非常旧的硬件的要求。
    • 感谢您的精彩回答,我会尝试向您报告感谢
    • 额外+1的问题:可以通过几何着色器实现反向法线方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 2010-11-02
    相关资源
    最近更新 更多