在OpenGL中概述效果

dup*_*per 19 opengl 3d graphics glsl

在OpenGL中,我可以通过正常绘制对象来绘制对象,然后使用模板缓冲区再次将其绘制为线框,这样就不会绘制原始对象.但是,这会产生一种纯色的轮廓.

在此输入图像描述

在此图像中,生物轮廓的像素似乎比它们勾勒出的生物更加透明.如何使用OpenGL实现类似的效果?

wel*_*urm 7

他们没有使用线框.我想它与着色器很相关,需要这样:

  1. 将对象渲染到模板缓冲区
  2. 应用模糊时,使用选择颜色渲染模板缓冲区
  3. 渲染模型在它上面

  • 为什么不通过顶点着色器按正常方向将顶点推动偏移,并将其用作轮廓(平面渲染),然后渲染顶部颜色 (3认同)
  • 从本质上讲,这就是我编写的书名的处理方式,尽管这对我们来说是缓慢的问题。在采用这种方法之前,请考虑屏幕的多少将包含您的轮廓-有更便宜的效果可用来传达“此模型被突出显示”。对于现代标题,您可能没有多余的填充率。 (2认同)

Eme*_*ays 7

我迟到了答案,但我试图达到同样的目的,并认为我会分享我正在使用的解决方案.

在具有不那么复杂的着色器的单个绘制操作中可以实现类似的效果.

在片段着色器中,您将根据闪电和纹理计算片段的颜色,为您提供未突出显示的颜色'colorA'.

你的第二种颜色是轮廓颜色'colorB'.

您应该获取相机矢量的片段,对其进行标准化,然后使用片段的法线获得此矢量的点积.

片段到相机矢量只是片段在眼睛空间中的位置的倒数.

然后片段的颜色是:

float CameraFacingPercentage = dot(v_fragmentToCamera, v_Normal);
gl_FragColor = ColorA * CameraFacingPercentage + ColorB * (1 - FacingCameraPercentage);
Run Code Online (Sandbox Code Playgroud)

这是基本的想法,但你必须玩得更多或更少的轮廓颜色.此外,模型的凹陷部分也将突出显示,但问题中发布的图像也是如此.