【问题标题】:Draw the outlines of a 3D model with OpenGL ES使用 OpenGL ES 绘制 3D 模型的轮廓
【发布时间】:2016-07-13 11:19:52
【问题描述】:

我需要添加这个经典的效果,它包括通过勾画轮廓来突出 3D 模型,就像这样(没有透明的渐变,只是一个实心的描边):

我找到了一种方法来做到这一点here,它看起来非常简单且易于实现。这家伙正在使用模板缓冲区来计算模型形状,然后他使用线框绘制模型,线条的粗细就可以完成这项工作。 这是我的问题,线框。我使用的是 OpenGL ES 2.0,这意味着我不能使用 glPolygonMode 将渲染模式更改为 GL_LINE

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

有什么想法/技巧可以绕过 OpenGL ES 缺少 glPolygonMode 吗?提前致谢。

【问题讨论】:

    标签: opengl-es rendering shader fragment-shader


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 感谢您提供的方法,我想我会尝试方法 1,这实际上非常好,因为它使用的过滤器就像抗锯齿一样(最后是同样的问题),这意味着您只需更改过滤器即可获得不同的结果。我看到的唯一问题是它会创建一个半内/半外边界,但就我而言,我不介意。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 2012-05-01
    • 2012-06-24
    • 2021-04-14
    • 2013-09-19
    相关资源
    最近更新 更多