首页 > 解决方案 > 如何使用片段和顶点着色器使 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. 我需要能够使纹理的任何一侧使其粗糙/凹凸不平(随机或不随机)。

标签: javalibgdxglslfragment-shadervertex-shader

解决方案


推荐阅读