From cea919a55d61b14b4b408e2886dbfe7a0c2b618b Mon Sep 17 00:00:00 2001 From: -=yb4f310 Date: Fri, 1 Sep 2017 17:05:29 +0200 Subject: [PATCH] linear interpolation for heightmaps --- src/game-lib-a-2-utils.js | 25 +++++++++++++++++++++++++ src/game-lib-d3-mesh-plane.js | 13 +++++++------ 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/game-lib-a-2-utils.js b/src/game-lib-a-2-utils.js index f77c3c4..6876cf4 100644 --- a/src/game-lib-a-2-utils.js +++ b/src/game-lib-a-2-utils.js @@ -123,6 +123,31 @@ GameLib.Utils.LoadIdsFromObjectToIdObject = function(object, idToObject) { return idToObject; }; +GameLib.Utils.InterpolateArray = function(data, fitCount) { + + var linearInterpolate = function (before, after, atPoint) { + return before + (after - before) * atPoint; + }; + + var newData = []; + + var springFactor = Number((data.length - 1) / (fitCount - 1)); + + newData[0] = data[0]; // for new allocation + + for ( var i = 1; i < fitCount - 1; i++) { + var tmp = i * springFactor; + var before = Number(Math.floor(tmp)).toFixed(); + var after = Number(Math.ceil(tmp)).toFixed(); + var atPoint = tmp - before; + newData[i] = linearInterpolate(data[before], data[after], atPoint); + } + + newData[fitCount - 1] = data[data.length - 1]; // for new allocation + + return newData; +}; + /** * Undefined or null check * @param variable diff --git a/src/game-lib-d3-mesh-plane.js b/src/game-lib-d3-mesh-plane.js index 95e6bee..5ad6e2d 100644 --- a/src/game-lib-d3-mesh-plane.js +++ b/src/game-lib-d3-mesh-plane.js @@ -226,20 +226,20 @@ GameLib.D3.Mesh.Plane.prototype.getHeightData = function() { } var canvas = document.createElement( 'canvas' ); - canvas.width = img.width; - canvas.height = img.height; + canvas.width = this.widthSegments + 1;//img.width; + canvas.height = this.heightSegments + 1;//img.height; var context = canvas.getContext( '2d' ); - var size = img.width * img.height; + var size = (this.widthSegments + 1) * (this.heightSegments + 1); var data = new Float32Array( size ); - context.drawImage(img,0,0); + context.drawImage(img,0,0, canvas.width, canvas.height); for (i = 0; i < size; i ++ ) { data[i] = 0 } - var imgd = context.getImageData(0, 0, img.width, img.height); + var imgd = context.getImageData(0, 0, (this.widthSegments + 1), (this.heightSegments + 1)); var pix = imgd.data; var j=0; @@ -248,8 +248,9 @@ GameLib.D3.Mesh.Plane.prototype.getHeightData = function() { data[j++] = all/(12*this.heightMapScale); } - return data; + // data = GameLib.Utils.InterpolateArray(data, (this.widthSegments + 1) * (this.heightSegments + 1)); + return data; }; /**