projectedwatershader_refraction.vert

来自「java 3d game jme 工程开发源代码」· VERT 代码 · 共 44 行

VERT
44
字号
varying vec2 refrCoords;
varying vec2 normCoords;
varying vec2 foamCoords;
varying vec4 viewCoords;
varying vec3 viewTangetSpace;
varying vec2 vnormal;
varying vec4 vVertex;

uniform vec3 cameraPos;
uniform vec3 tangent;
uniform vec3 binormal;
uniform float normalTranslation, refractionTranslation;
uniform float waterHeight;
uniform float heightFalloffStart;
uniform float heightFalloffSpeed;

void main()
{
	viewCoords = gl_ModelViewProjectionMatrix * gl_Vertex;
	vVertex = gl_Vertex;
	float heightAdjust = 1.0 - clamp((viewCoords.z-heightFalloffStart)/heightFalloffSpeed,0.0,1.0);
	vVertex.y = mix(waterHeight,vVertex.y,heightAdjust);
	viewCoords = gl_ModelViewProjectionMatrix * vVertex;
	gl_Position = viewCoords;
	vVertex.w = waterHeight;

	// Because we have a flat plane for water we already know the vectors for tangent space
	vec3 normal = vec3(gl_Normal.x*heightAdjust,gl_Normal.y,gl_Normal.z*heightAdjust);
	vnormal = normal.xz * 0.15;

	// Calculate the vector coming from the vertex to the camera
	vec3 viewDir = cameraPos - gl_Vertex.xyz;

	// Compute tangent space for the view direction
	viewTangetSpace.x = dot(viewDir, tangent);
	viewTangetSpace.y = dot(viewDir, binormal);
	viewTangetSpace.z = dot(viewDir, normal);

	//todo test 0.8
	refrCoords = (gl_TextureMatrix[2] * gl_MultiTexCoord0).xy + vec2(0.0,refractionTranslation);
	normCoords = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy + vec2(0.0,normalTranslation);
	foamCoords = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy + vec2(0.0,normalTranslation*0.4);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?