Skip to content

Instantly share code, notes, and snippets.

@karimbeyrouti
Last active January 19, 2016 14:28
Show Gist options
  • Save karimbeyrouti/6c97dec164a11ca16bf3 to your computer and use it in GitHub Desktop.
Save karimbeyrouti/6c97dec164a11ca16bf3 to your computer and use it in GitHub Desktop.
import THREE from 'three';
export class MeshBasicMaterialCopy extends THREE.ShaderMaterial {
constructor(parameters) {
parameters = parameters || {};
var defines = {};
var uniforms = THREE.UniformsUtils.merge( [
THREE.UniformsLib[ "common" ],
THREE.UniformsLib[ "aomap" ],
THREE.UniformsLib[ "fog" ],
THREE.UniformsLib[ "shadowmap" ]
] );
var vertexShader = [
THREE.ShaderChunk[ "common" ],
THREE.ShaderChunk[ "uv_pars_vertex" ],
THREE.ShaderChunk[ "uv2_pars_vertex" ],
THREE.ShaderChunk[ "envmap_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[ "uv_vertex" ],
THREE.ShaderChunk[ "uv2_vertex" ],
THREE.ShaderChunk[ "color_vertex" ],
THREE.ShaderChunk[ "skinbase_vertex" ],
" #ifdef USE_ENVMAP",
THREE.ShaderChunk[ "beginnormal_vertex" ],
THREE.ShaderChunk[ "morphnormal_vertex" ],
THREE.ShaderChunk[ "skinnormal_vertex" ],
THREE.ShaderChunk[ "defaultnormal_vertex" ],
" #endif",
THREE.ShaderChunk[ "begin_vertex" ],
THREE.ShaderChunk[ "morphtarget_vertex" ],
THREE.ShaderChunk[ "skinning_vertex" ],
THREE.ShaderChunk[ "project_vertex" ],
THREE.ShaderChunk[ "logdepthbuf_vertex" ],
THREE.ShaderChunk[ "worldpos_vertex" ],
THREE.ShaderChunk[ "envmap_vertex" ],
THREE.ShaderChunk[ "shadowmap_vertex" ],
"}"
].join( "\n" );
var fragmentShader = [
"uniform vec3 diffuse;",
"uniform float opacity;",
THREE.ShaderChunk[ "common" ],
THREE.ShaderChunk[ "color_pars_fragment" ],
THREE.ShaderChunk[ "uv_pars_fragment" ],
THREE.ShaderChunk[ "uv2_pars_fragment" ],
THREE.ShaderChunk[ "map_pars_fragment" ],
THREE.ShaderChunk[ "alphamap_pars_fragment" ],
THREE.ShaderChunk[ "aomap_pars_fragment" ],
THREE.ShaderChunk[ "envmap_pars_fragment" ],
THREE.ShaderChunk[ "fog_pars_fragment" ],
THREE.ShaderChunk[ "shadowmap_pars_fragment" ],
THREE.ShaderChunk[ "specularmap_pars_fragment" ],
THREE.ShaderChunk[ "logdepthbuf_pars_fragment" ],
"void main() {",
" vec3 outgoingLight = vec3( 0.0 );",
" vec4 diffuseColor = vec4( diffuse, opacity );",
" vec3 totalAmbientLight = vec3( 1.0 );", // hardwired
" vec3 shadowMask = vec3( 1.0 );",
THREE.ShaderChunk[ "logdepthbuf_fragment" ],
THREE.ShaderChunk[ "map_fragment" ],
THREE.ShaderChunk[ "color_fragment" ],
THREE.ShaderChunk[ "alphamap_fragment" ],
THREE.ShaderChunk[ "alphatest_fragment" ],
THREE.ShaderChunk[ "specularmap_fragment" ],
THREE.ShaderChunk[ "aomap_fragment" ],
THREE.ShaderChunk[ "shadowmap_fragment" ],
" outgoingLight = diffuseColor.rgb * totalAmbientLight * shadowMask;",
THREE.ShaderChunk[ "envmap_fragment" ],
THREE.ShaderChunk[ "linear_to_gamma_fragment" ],
THREE.ShaderChunk[ "fog_fragment" ],
" gl_FragColor = vec4( outgoingLight, diffuseColor.a );",
"}"
].join( "\n" );
super({
vertexShader:vertexShader,
fragmentShader:fragmentShader,
uniforms:uniforms,
defines:defines
});
this.setValues( parameters );
}
set map( v ){
this.uniforms.offsetRepeat.value.set( v.offset.x, v.offset.y, v.repeat.x, v.repeat.y );
this.uniforms.map.value = v;//THREE.ImageUtils.loadTexture(texture)
}
get map(){
return this.uniforms.map.value;
}
set color( v ){
this.uniforms.diffuse.value = v;
}
get color( ){
return this.uniforms.diffuse.value;
}
set opacity( v ){
if ( this.uniforms ){
this.uniforms.opacity.value = v;
} else {
super.opacity = v;
}
}
get opacity( ){
return this.uniforms.opacity.value;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment