📝 ~ 

GLSL|matcap

2024.03.17
RELATED CATEGORY
TABLE OF CONTENTS

GLSLのmatcapについてメモしています。

vec2 matcap(vec3 eye, vec3 normal) {
  vec3 reflected = reflect(eye, normal);
  float m = 2.8284271247461903 * sqrt( reflected.z+1.0 );
  return reflected.xy / m + 0.5;
}

// vs
varying vec3 vNormal;
varying vec3 vPosition;
void main(){
  vPosition = (modelMatrix * vec4(position, 1.0)).xyz;
}

// fs
varying vec3 vNormal;
varying vec3 vPosition;
uniform sampler2D uMatcap;
uniform vec3 uCameraPosition;

void main() {
  vec3 eyeDirection = normalize(vPosition - uCameraPosition);
  vec2 matcapUv = matcap(eyeDirection, vNormal);
  vec4 matcapTexture = texture2D(uMatcap, matcapUv);
  gl_FragColor = matcapTexture;
}

PICKUP ARTWORK