linear interpolation for heightmaps
parent
e6e78928ed
commit
cea919a55d
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue