【问题标题】:webgl shaders and texture filterswebgl 着色器和纹理过滤器
【发布时间】:2012-04-02 23:51:12
【问题描述】:

我对 WebGL 不太熟悉(猜想同样的问题会在 OpenGL 中翻译)。我正在使用顶点和片段着色器渲染我的对象。基本上所有着色器所做的就是获取顶点的输入颜色,然后将其原封不动地传递到片段,所以步骤:

In vertex shader, amongst other things:

attribute vec4 aVertexColor;
varying vec4 vColor;

.................
vColor = aVertexColor;
..................

In shader color:

varying vec4 vColor;

...........
gl_FragColor = vColor;

现在这工作正常。但是,从我可以看到片段的插值默认为线性,我想将其更改为最近的。现在我正在尝试做的是:

gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);

但这似乎没有任何效果,即使我用 gl.LINEAR 更改 gl.NEAREST ,据我所知,这并没有完全改变。着色器是否以某种方式覆盖了一些东西,这就是为什么我没有得到想要的效果?

现在我已经附上了我得到的结果。现在我的目标是让三角形位于 3 个不同颜色的区域(与顶点相同)。所以在我的情况下,我的目标是~1.3 蓝色,~1.3 绿色,~1.3 红色,没有任何中间颜色。有什么提示吗?

这是我想要得到的:

【问题讨论】:

    标签: opengl-es webgl


    【解决方案1】:

    我认为您误解了Nearest Filtering 主题。如果您使用纹理,您将拾取最近的纹理像素的颜色,而不是与相邻像素混合的颜色。但这并不能帮助您使用您的方法在顶点之间保持不变的、不混合的颜色。我猜你想要的是下面这样的东西。

    How to get a flat, non-interpolated color when using vertex shaders

    【讨论】:

    • 感谢您的意见。我猜我错了,但是我真的不认为您提供的链接会有所帮助。我不希望每条线都有不同的颜色。我已经通过可视化我想要实现的目标更新了我的答案。
    【解决方案2】:

    你想要的我不相信是可能的。始终会插入变化的值,您不能覆盖它以使用最近的值。为了达到您想要的结果,我认为您必须分别绘制 3 个多边形。

    在这种非常特殊的情况下,您还可以使用一些像素着色器技巧来找到 RGB 的最大分量,将其设置为 1,并将其他两个分量设置为零,但这不适用于任何其他颜色。

    【讨论】:

    • 好的,感谢您的意见。那我只需要为我的问题找到其他解决方案。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    相关资源
    最近更新 更多