linear interpolation for heightmaps

beta.r3js.org
-=yb4f310 2017-09-01 17:05:29 +02:00
parent e6e78928ed
commit cea919a55d
2 changed files with 32 additions and 6 deletions

View File

@ -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

View File

@ -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;
};
/**