uniform vec3 uWobbleAngle; uniform float uGlassWidth; out Vert { vec3 objectPoint; vec3 normalForCam; } oVert; mat3 rotateZ(float _angle) { return mat3(cos(_angle),-sin(_angle), 0.0, sin(_angle),cos(_angle), 0.0, 0.0, 0.0, 1.0); } mat3 rotateX(float _angle) { return mat3(1.0, 0.0, 0.0, 0.0, cos(_angle), -sin(_angle), 0.0, sin(_angle), cos(_angle)); } void main() { vec3 scaledPoint = P - (N * uGlassWidth); oVert.objectPoint = scaledPoint; oVert.objectPoint = rotateZ(uWobbleAngle.z) * oVert.objectPoint; oVert.objectPoint = rotateX(uWobbleAngle.x) * oVert.objectPoint; oVert.normalForCam = uTDMats[TDCameraIndex()].camForNormals * N; vec4 worldSpacePos = TDDeform(scaledPoint); gl_Position = TDWorldToProj(worldSpacePos); }