Skip to content

Instantly share code, notes, and snippets.

@mattdesl
Created May 9, 2014 16:56
Show Gist options
  • Select an option

  • Save mattdesl/97d7f10d4e88dc31bc4c to your computer and use it in GitHub Desktop.

Select an option

Save mattdesl/97d7f10d4e88dc31bc4c to your computer and use it in GitHub Desktop.
custom lambert material
var rotX = [
"mat3 rotMat = mat3( vec3( 1.0, 0.0, 0.0 ), ",
" vec3( 0.0, cos(theta), -sin(theta) ), ",
" vec3( 0.0, sin(theta), cos(theta) ) );"
].join("\n");
var rotY = [
"mat3 rotMat = mat3( vec3( cos(theta), 0.0, sin(theta) ), ",
" vec3( 0.0, 1.0, 0.0 ), ",
" vec3( -sin(theta), 0.0, cos(theta) ) );"
].join("\n");
var rotZ = [
"mat3 rotMat = mat3( vec3( cos(theta), -sin(theta), 0.0 ), ",
" vec3( sin(theta), cos(theta), 0.0 ), ",
" vec3( 0.0, 0.0, 1.0 ) );"
].join("\n");
var ROTATION_MAT = rotY;
var vertChunk = [
"vec4 mvPosition;",
"float centerMorphMod = mod(abs(tangent.x), 1.0) * centerMorph;",
"float theta = centerMorphMod * tangent.w * 6.28;",
ROTATION_MAT,
"vec3 center = tangent.xyz * rotMat;",
"#ifdef USE_SKINNING",
" mvPosition = modelViewMatrix * vec4( mix(skinned.xyz, center.xyz, centerMorph), skinned.w );",
"#endif",
"#if !defined( USE_SKINNING ) && defined( USE_MORPHTARGETS )",
" mvPosition = modelViewMatrix * vec4( mix(morphed, center.xyz, centerMorph), 1.0 );",
"#endif",
"#if !defined( USE_SKINNING ) && ! defined( USE_MORPHTARGETS )",
" mvPosition = modelViewMatrix * vec4( mix(position, center.xyz, centerMorph), 1.0 );",
"#endif",
"gl_Position = projectionMatrix * mvPosition;"
].join("\n");
var lambertVert = [
"#define LAMBERT",
"attribute vec4 tangent;",
"uniform float centerMorph;",
"varying vec3 vLightFront;",
"#ifdef DOUBLE_SIDED",
" varying vec3 vLightBack;",
"#endif",
THREE.ShaderChunk[ "map_pars_vertex" ],
THREE.ShaderChunk[ "lightmap_pars_vertex" ],
THREE.ShaderChunk[ "envmap_pars_vertex" ],
THREE.ShaderChunk[ "lights_lambert_pars_vertex" ],
THREE.ShaderChunk[ "color_pars_vertex" ],
THREE.ShaderChunk[ "morphtarget_pars_vertex" ],
THREE.ShaderChunk[ "skinning_pars_vertex" ],
THREE.ShaderChunk[ "shadowmap_pars_vertex" ],
THREE.ShaderChunk[ "logdepthbuf_pars_vertex" ],
"void main() {",
THREE.ShaderChunk[ "map_vertex" ],
THREE.ShaderChunk[ "lightmap_vertex" ],
THREE.ShaderChunk[ "color_vertex" ],
THREE.ShaderChunk[ "morphnormal_vertex" ],
THREE.ShaderChunk[ "skinbase_vertex" ],
THREE.ShaderChunk[ "skinnormal_vertex" ],
THREE.ShaderChunk[ "defaultnormal_vertex" ],
THREE.ShaderChunk[ "morphtarget_vertex" ],
THREE.ShaderChunk[ "skinning_vertex" ],
//Here's where we insert the centroid stuff
vertChunk,
// THREE.ShaderChunk[ "default_vertex" ],
THREE.ShaderChunk[ "logdepthbuf_vertex" ],
THREE.ShaderChunk[ "worldpos_vertex" ],
THREE.ShaderChunk[ "envmap_vertex" ],
THREE.ShaderChunk[ "lights_lambert_vertex" ],
THREE.ShaderChunk[ "shadowmap_vertex" ],
"}"
].join("\n");
var attributes = {
};
var uniforms = THREE.UniformsUtils.clone( THREE.ShaderLib.lambert.uniforms );
uniforms.centerMorph = { type: 'f', value: 0 };
// uniforms.opacity = { type: 'f', value: 0.2, };
var material = new THREE.ShaderMaterial({
// attributes: attributes,
uniforms: uniforms,
vertexShader: lambertVert,
fragmentShader: THREE.ShaderLib.lambert.fragmentShader,
morphTargets: true,
shading: THREE.FlatShading,
vertexColors: THREE.FaceColors,
defines: {"LAMBERT":""},
lights: true,
// transparent: true,
// opacity: 0.2,
});
material.index0AttributeName = "position";
module.exports = material;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment