使用OpenGL ES绘制3D模型的轮廓

时间:2016-07-13 11:19:52

标签: opengl-es rendering shader fragment-shader

我需要添加这个经典效果,其中包括通过抚摸轮廓来突出显示3D模型,例如这样(没有透明的渐变,只是一个实线):

enter image description here

我找到了一种方法here这看起来非常简单易行。这家伙正在玩模板缓冲区来计算模型形状,然后他使用线框绘制模型,线条的厚度正在完成。 这是我的问题,线框。我正在使用OpenGL ES 2.0,这意味着我无法使用glPolygonMode将渲染模式更改为 GL_LINE

我被困在这里,我找不到任何简单的替代方法,我目前发现的最相关的解决方案是自己实现线框渲染,这显然不是最简单的解决方案。要绘制我的对象,我使用glDrawElements并将 GL_TRIANGLES 作为原语,我尝试使用 GL_TRIANGLE_STRIP 作为原语,但结果肯定不是正确的。< / p>

有任何想法/技巧可以绕过缺少glPolygonMode的OpenGL ES吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

在OpenGL ES 2中绘制模型的轮廓或边框并不像您提到的示例那样直截了当。

方法1: 最简单的方法是多次通过。

步骤1(形状通过):仅渲染对象并使用相同的相机设置将其绘制为黑色。并绘制不同颜色的所有其他像素。

Cube looks like this

步骤2(渲染过程):这是通常的渲染过程,您实际上以真实颜色绘制对象。这是每次片段时,您必须在ShapePass图像上的相同像素处测试颜色,以查看附近的8个像素中是否有任何颜色不同。如果所有附近的像素都是相同的颜色,那么片段不代表边框,否则添加一些颜色来绘制边框。

Cube Rendered with Border

方法2:还有其他技术可以在一次通过中为您提供类似的效果。您可以绘制两次相同的对象,第一次使用单一颜色稍微放大,然后使用真实颜色。