Texture Map

r83 version

by Millieyan

HTML

<div id="info">Texture Mapping with TextureLoader
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/107/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js">
</script>
<script type="x-shader/x-fragment" id="fragmentShaderDepth">
    uniform sampler2D texture;
    varying vec2 vUv;

    vec4 pack_depth(const in float depth) {
        const vec4 bit_shift = vec4(256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0);
        const vec4 bit_mask = vec4(0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0);
        vec4 res = fract(depth * bit_shift);
        res -= res.xxyz * bit_mask;
        return res;
    }

    void main() {
        vec4 pixel = texture2D(texture, vUv);
        if (pixel.a < 0.5) discard;
        gl_FragData[0] = pack_depth (gl_FragCoord.z);
    }
</script>
<script type="x-shader/x-vertex" id="vertexShaderDepth">
    varying vec2 vUv;

    void main() {
        vUV = uv;
        gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
    }
</script>

CSS

#info {
  position: absolute;
  top: 1%;
  width: 100%;
  padding: 10px;
  text-align: center;
  color: #ffee12;
}

body {
  overflow: hidden;
}

JavaScript

var renderer, scene, camera;
var cube;
var angle = 0;

init();
animate();

function init() {
  renderer = new THREE.WebGLRenderer();
  renderer.setSize(window.innerWidth, window.innerHeight);
  renderer.setClearColor(0x888888);
  renderer.shadowMap.enabled = true;
	renderer.shadowMap.type = THREE.PCFSoftShadowMap;

  document.body.appendChild(renderer.domElement);

	scene = new THREE.Scene();
  camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 1000);
  camera.position.z = 200;
  let controls = new THREE.OrbitControls(camera, renderer.domElement);

  floor = new THREE.Mesh (new THREE.PlaneGeometry(300,300), new THREE.MeshPhongMaterial());
  floor.rotation.x = -Math.PI/2;
  floor.position.y = -55;
  scene.add (floor);
  
  /////////////////////////////////////////////////////////////////////
  let loader = new THREE.TextureLoader();
  loader.crossOrigin = '';
  texture = loader.load('https://i.imgur.com/J0RenHB.png');
	var texMat = new THREE.MeshBasicMaterial({
    map: texture,
    alphaTest: 0.5,
    side:THREE.DoubleSide
  });
   
  var hulk = new THREE.Mesh(new THREE.PlaneGeometry(40, 40), texMat);
	scene.add(hulk);

  var uniforms = {
        texture: {
            type: "t",
            value: texture
        }
      };
  var vertexShader = document.getElementById('vertexShaderDepth').textContent;
  var fragmentShader = document.getElementById('fragmentShaderDepth').textContent;
  hulk.customDepthMaterial = new THREE.ShaderMaterial({
        uniforms: uniforms,
        vertexShader: vertexShader,
        fragmentShader: fragmentShader
    });


  cube = new THREE.Mesh(new THREE.BoxGeometry(100, 100, 100), new THREE.MeshPhongMaterial())
  scene.add(cube);
  cube.position.z = -120

	floor.receiveShadow = true;
  hulk.castShadow = true;
  cube.castShadow = true;
  cube.receiveShadow = true;
   cube.traverse (
   function (mesh) {
     if (mesh instanceof THREE.Mesh) {
       mesh.castShadow = true;
        mesh.receiveShadow =...