0

My question is next: How to get height value from displacement map? This is my code for creating visual surface.

        var myTexture = new THREE.ImageUtils.loadTexture("assets/surface.png");
        var surfaceTexture = new THREE.ImageUtils.loadTexture("assets/rock.png");

        var shader = THREE.ShaderLib[ "normalmap" ];
        var uniforms = THREE.UniformsUtils.clone( shader.uniforms );

        uniforms[ "tDisplacement" ].value = myTexture;
        uniforms[ "tDiffuse" ].value = surfaceTexture;
        uniforms[ "enableDisplacement" ].value = true;
        uniforms[ "enableDiffuse" ].value = true;
        uniforms[ "uDisplacementScale" ].value = 50;

        var parameters = { fragmentShader: shader.fragmentShader, vertexShader: shader.vertexShader, uniforms: uniforms, lights: true, wireframe: false };
        var planeMaterial = new THREE.ShaderMaterial( parameters );

This is a part of code for Tower Defense and I need height value so that I can place tower on that surface. Is there a way to get height values from uniforms?

1 Answers1

0

You can get the height values right from your displacement map image with some javascript, see this answer https://stackoverflow.com/a/10514950/4977165

function getHeightData(img) {
    var canvas = document.createElement( 'canvas' );
    canvas.width = 128;
    canvas.height = 128;
    var context = canvas.getContext( '2d' );

    var size = 128 * 128, data = new Float32Array( size );

    context.drawImage(img,0,0);

    for ( var i = 0; i < size; i ++ ) {
        data[i] = 0
    }

    var imgd = context.getImageData(0, 0, 128, 128);
    var pix = imgd.data;

    var j=0;
    for (var i = 0, n = pix.length; i < n; i += (4)) {
        var all = pix[i]+pix[i+1]+pix[i+2];
        data[j++] = all/30;
    }

    return data;
}
Community
  • 1
  • 1
Falk Thiele
  • 4,424
  • 2
  • 17
  • 44