我已经使用glsl成功实现了一个cel着色器。但我的问题是关于概述所有内容,互联网上每个opengl的例子都很旧,与现有技术不匹配,所以技术速度很慢......所以我无论如何都无法在glsl中找到它。我想到了一些想法,比如将最不密集的区域着色为黑色,但是对于gl_Vertex,gl_Position和眼睛位置甚至没有足够的解释。所以,由于每种技术都太老了,我终于决定向某人询问这个大纲问题。
答案 0 :(得分:9)
我会在zbuffer上使用某种边缘检测滤波器(可能与颜色缓冲区上的边缘检测结合使用),然后使用(反转)结果调制帧缓冲区。最常见的边缘检测滤波器之一是sobel算子:
http://en.wikipedia.org/wiki/Sobel_operator
编辑:这样做的另一种便宜的方法是在渲染普通网格之前绘制网格的黑色副本,其中剔除面朝上,顶点稍微向法线方向移动。这可能就是他们在XIII中所做的,我也很确定这就是它在Jet Set Radio中的表现。
EDIT2:如果您希望轮廓的粗细不变,无论距观察者的距离如何,您都应该缩放以此距离移动顶点的数量。
答案 1 :(得分:1)
你看过glPolygonOffset吗?
我用它在填充多边形上绘制轮廓。
http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPolygonOffset.xml