UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

2 lines (1 loc) 1.71 kB
export default "precision highp float;\nprecision highp sampler2D;\n\nuniform vec2 tSize;\n\nuniform sampler2D tPosition0;\nuniform sampler2D tPosition1;\n\nuniform sampler2D tAdjacentsA;\nuniform sampler2D tAdjacentsB;\n\n// *** ADD COMMON ***\n\nvec2 getUV( float id ) { \n return getClothSolverUV( id, tSize );\n}\n\nvoid main () {\n\n vec3 normal;\n vec2 uv = gl_FragCoord.xy / tSize.xy;\n\n // indices of adjacent vertices\n vec4 adjacentA = texture2D( tAdjacentsA, uv );\n vec4 adjacentB = texture2D( tAdjacentsB, uv );\n\n // vertex position\n vec3 p0 = ( texture2D( tPosition0, uv ).xyz + texture2D( tPosition1, uv ).xyz ) / 1024.0;\n\n // adjacent vertices positions\n vec3 p1 = packPosition( getUV( adjacentA.x ) );\n vec3 p2 = packPosition( getUV( adjacentA.y ) );\n vec3 p3 = packPosition( getUV( adjacentA.z ) );\n vec3 p4 = packPosition( getUV( adjacentA.w ) );\n\n // compute vertex normal contribution\n normal += cross( p1 - p0, p2 - p0 );\n normal += cross( p2 - p0, p3 - p0 );\n normal += cross( p3 - p0, p4 - p0 );\n\n float Bx = adjacentB.x;\n vec3 p5 = Bx >= 0.0 ? packPosition( getUV( Bx ) ) : vec3(0.0);\n if( Bx >= 0.0 ){\n normal += cross( p4 - p0, p5 - p0 );\n }\n float By = adjacentB.y;\n vec3 p6 = By >= 0.0 ? packPosition( getUV( By ) ) : vec3(0.0);\n if( By >= 0.0 ){\n normal += cross( p5 - p0, p6 - p0 );\n }\n float Bz = adjacentB.z;\n vec3 p7 = Bz >= 0.0 ? packPosition( getUV( Bz ) ) : vec3(0.0);\n if( Bz >= 0.0 ){\n normal += cross( p6 - p0, p7 - p0 );\n }\n float Bw = adjacentB.w;\n vec3 p8 = Bw >= 0.0 ? packPosition( getUV( Bw ) ) : vec3(0.0);\n if( Bw >= 0.0 ){\n normal += cross( p7 - p0, p8 - p0 );\n }\n\n gl_FragColor = vec4( normalize( normal ), 1.0 );\n}";