Java 2D glsl着色器变换
我想创建一个着色器,在使用libgdx构建的2D场景中模拟一个伪3D水面。我们的想法是重现以下效果: 但我一直在创建梯形形状,我想我不明白如何在opengl着色器上计算纹理坐标。我可以在顶点着色器中修改顶点,还是可以置换片段着色器上的纹理 我做了一个测试,但没有达到预期效果 顶点着色器:Java 2D glsl着色器变换,java,opengl,libgdx,glsl,shader,Java,Opengl,Libgdx,Glsl,Shader,我想创建一个着色器,在使用libgdx构建的2D场景中模拟一个伪3D水面。我们的想法是重现以下效果: 但我一直在创建梯形形状,我想我不明白如何在opengl着色器上计算纹理坐标。我可以在顶点着色器中修改顶点,还是可以置换片段着色器上的纹理 我做了一个测试,但没有达到预期效果 顶点着色器: attribute vec4 a_position; attribute vec4 a_color; attribute vec2 a_texCoord0; uniform mat4 u_projTrans
attribute vec4 a_position;
attribute vec4 a_color;
attribute vec2 a_texCoord0;
uniform mat4 u_projTrans;
varying vec4 v_color;
varying vec2 v_texCoord0;
void main()
{
v_color = a_color;
float factor = (a_texCoord0.x - 0.5) * (a_texCoord0.y);
v_texCoord0 = a_texCoord0;
v_texCoord0.x += factor;
gl_Position = u_projTrans * a_position;
}
片段着色器只是一个传递
varying vec4 v_color;
varying vec2 v_texCoord0;
uniform sampler2D u_texture;
void main()
{
gl_FragColor = v_color * texture2D(u_texture, v_texCoord0);
}
以及结果图像
我确信我的方法太天真了。最后,我决定只使用片段着色器来实现效果。 通过应用Y轴上的X位移进行假深度计算 这是鹬:
// simulate 3D surface
vec2 new_coord = v_texCoord0;
// calculate the stretching factor
float factor = ((0.5 - new_coord.x) * new_coord.y);
// apply the factor and stretch the image
new_coord.x += factor;
gl_FragColor = texture2D(u_texture, new_coord);