如何使用片段和顶点着色器使 2D 纹理表面不均匀?从纹理中删除某些像素?

问题描述

我对着色器完全陌生,正在尝试为我目前正在开发的游戏做点什么。我正在努力实现这样的目标:

IMG

我有一个简单的直通着色器设置,但我不知道如何删除纹理顶部的确切像素。我假设在片段着色器中我需要将 alpha 值更改为 0.0,但是如何检查像素是否位于顶部?我也使用 libGDX 作为我的游戏引擎,它认使用 OpenGL ES 2.0。

这是我的简单直通(顶点)着色器:

attribute vec4 a_position;
attribute vec4 a_color;
attribute vec2 a_texCoord0;

uniform mat4 u_projTrans;

varying vec4 v_color;
varying vec2 v_texCoords;


void main() {
    v_color = a_color;
    v_texCoords = a_texCoord0;
    gl_Position = u_projTrans * a_position;
}

片段着色器:

#ifdef GL_ES
#define PRECISION mediump
precision PRECISION float;
precision PRECISION int;
#else
#define PRECISION
#endif

varying vec4 v_color;
varying vec2 v_texCoords;

uniform sampler2D u_texture;
uniform sampler2D u_other;

void main() {
    vec4 color = texture2D(u_texture,v_texCoords);
    vec4 other_colors = texture2D(u_other,v_texCoords);

    gl_FragColor = other_colors;
}

谢谢你的帮助:)。被困在这个问题上很长一段时间了。

附加信息:

  1. 我的像素渲染并不完美。
  2. 我需要能够使纹理的任何一侧变得粗糙/凹凸不平(随机或不随机)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)