Opengl es 如何在OpenGL ES 2.0中创建适当的倒角效果片段着色器?

Opengl es 如何在OpenGL ES 2.0中创建适当的倒角效果片段着色器?,opengl-es,glsl,shader,emboss,bevelled,Opengl Es,Glsl,Shader,Emboss,Bevelled,我不熟悉在GLSL中为OpenGL ES2.0编写片段着色器,我正在尝试创建一个片段着色器,为给定图形创建斜角效果。这是我到目前为止所能做的 (忽略下壁和其他纹理,仅查看应用倒角效果的顶部): 以下是期望的结果: 请注意对角线上着色的差异,它们的着色比水平边轻。请注意从对角边到水平或垂直边的过渡。还要注意倒角的厚度。我希望尽可能接近这个期望的结果 现在我使用的片段着色器非常简单,下面是代码: #ifdef GL_ES precision mediump float; #endif vary

我不熟悉在GLSL中为OpenGL ES2.0编写片段着色器,我正在尝试创建一个片段着色器,为给定图形创建斜角效果。这是我到目前为止所能做的 (忽略下壁和其他纹理,仅查看应用倒角效果的顶部):

以下是期望的结果:

请注意对角线上着色的差异,它们的着色比水平边轻。请注意从对角边到水平或垂直边的过渡。还要注意倒角的厚度。我希望尽可能接近这个期望的结果

现在我使用的片段着色器非常简单,下面是代码:

#ifdef GL_ES
precision mediump float;
#endif

varying vec2 v_texCoord;
uniform sampler2D s_texture;
uniform float u_time;

void main()
{
    vec2 onePixel = vec2(0, 1.0 / 640.0);

    vec2 texCoord = v_texCoord;

    vec4 color;
    color.rgb = vec3(0.5);
    color += texture2D(s_texture, texCoord - onePixel) * 5.0;
    color -= texture2D(s_texture, texCoord + onePixel) * 5.0;

    color.rgb = vec3((color.r + color.g + color.b) / 3.0);
    gl_FragColor = vec4(color.rgb, 1);
}

我需要向着色器添加什么才能创建所需的效果?

我认为您所展示的示例并不完全使用片段着色器代码。这可能是通过对几何体进行倒角来完成的,这可以通过几何体着色器来完成,但ES中不存在的情况除外,因此,我要么使用创作工具(如Blender)对模型进行倒角,要么使用纹理进行凹凸贴图技术。

实现倒角效果的最佳方法是使用Blender或其他编辑器修改网格

如果确实希望使用着色器实现此目的,可以使用专门为隐藏边而准备的凹凸贴图

可能有一些多过程和渲染缓冲区解决方案,但对它们了解不多。可以从深度缓冲区中查找边。但就性能而言,这不是最好的方式


我最近发现了一种无需特殊纹理和改变几何体就能产生斜面效果的方法(这就是为什么我要回答这个问题:)。但它确实需要修改顶点数据:您需要向每个顶点添加其他法向量。因此,必须转换网格以专门使用该着色器

你可能是对的,不过最后我还是写了一个片段着色器,输出的效果足够接近预期效果。@EddyBorja你应该在这里分享你的最终解决方案:)我也遇到了类似的情况……嘿,Eddy,你是怎么解决的?