playcanvas
Version:
PlayCanvas WebGL game engine
58 lines (56 loc) • 1.59 kB
JavaScript
var transformVS = `
uniform vec4 uScreenSize;
uniform float projectionFlipY;
vec4 evalWorldPosition(vec3 vertexPosition, mat4 modelMatrix) {
vec3 localPos = getLocalPosition(vertexPosition);
localPos.xz *= outerScale;
vec2 positiveUnitOffset = clamp(vertexPosition.xz, vec2(0.0), vec2(1.0));
vec2 negativeUnitOffset = clamp(-vertexPosition.xz, vec2(0.0), vec2(1.0));
localPos.xz += (-positiveUnitOffset * innerOffset.xy + negativeUnitOffset * innerOffset.zw) * vertex_texCoord0.xy;
vTiledUv = (localPos.xz - outerScale + innerOffset.xy) * -0.5 + 1.0;
localPos.xz *= -0.5;
localPos = localPos.xzy;
vec4 posW = modelMatrix * vec4(localPos, 1.0);
posW.zw = vec2(0.0, 1.0);
return posW;
}
vec4 getPosition() {
dModelMatrix = getModelMatrix();
vec4 posW = evalWorldPosition(vertex_position.xyz, dModelMatrix);
dPositionW = posW.xyz;
vec4 screenPos;
screenPos = vec4(vertex_texCoord1.xy * 2.0 - 1.0, 0.5, 1);
screenPos.y *= -1.0;
screenPos = posW;
screenPos.y *= projectionFlipY;
screenPos = matrix_viewProjection * posW;
screenPos.xy = (screenPos.xy * 0.5) + 0.5;
screenPos.xy *= uScreenSize.xy;
screenPos.xy = floor(screenPos.xy);
screenPos.xy *= uScreenSize.zw;
screenPos.xy = (screenPos.xy * 2.0) - 1.0;
return screenPos;
}
vec3 getWorldPosition() {
return dPositionW;
}
`;
export { transformVS as default };