mirror of
https://github.com/curioustorvald/Terrarum.git
synced 2026-06-10 02:24:05 +09:00
clearing up interpolation functions
This commit is contained in:
@@ -231,6 +231,10 @@ final public class FastMath {
|
|||||||
return (float) (((c4 * u + c3) * u + c2) * u + c1);
|
return (float) (((c4 * u + c3) * u + c2) * u + c1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static float interpolateCatmullRom(float u, float p0, float p1, float p2, float p3) {
|
||||||
|
return interpolateCatmullRom(u, 0.5f, p0, p1, p2, p3);
|
||||||
|
}
|
||||||
|
|
||||||
/**Interpolate a spline between at least 4 control points following the Catmull-Rom equation.
|
/**Interpolate a spline between at least 4 control points following the Catmull-Rom equation.
|
||||||
* here is the interpolation matrix
|
* here is the interpolation matrix
|
||||||
* m = [ 0.0 1.0 0.0 0.0 ]
|
* m = [ 0.0 1.0 0.0 0.0 ]
|
||||||
@@ -316,24 +320,25 @@ final public class FastMath {
|
|||||||
|
|
||||||
|
|
||||||
public static float interpolateHermite(float scale, float p0, float p1, float p2, float p3) {
|
public static float interpolateHermite(float scale, float p0, float p1, float p2, float p3) {
|
||||||
return interpolateHermite(scale, p0, p1, p2, p3, 0f, 0f);
|
// return interpolateHermite(scale, p0, p1, p2, p3, 0f, 0f);
|
||||||
}
|
|
||||||
public static float interpolateHermite(float scale, float p0, float p1, float p2, float p3, float tension, float bias) {
|
|
||||||
float mu2 = scale * scale;
|
float mu2 = scale * scale;
|
||||||
float mu3 = mu2 * scale;
|
float mu3 = mu2 * scale;
|
||||||
|
float biasTensionTerms = 0.5f;//(1f + bias) * (1f - tension) / 2f;
|
||||||
|
|
||||||
float m0 = (p1 - p0) * (1f + bias) * (1f - tension) / 2f;
|
float m0 = (p1 - p0) * biasTensionTerms;
|
||||||
m0 += (p2 - p1) * (1f + bias) * (1f - tension) / 2f;
|
float mTemp = (p2 - p1) * biasTensionTerms;
|
||||||
float m1 = (p2 - p1) * (1f + bias) * (1f - tension) / 2f;
|
m0 += mTemp;
|
||||||
m1 += (p3 - p2) * (1f + bias) * (1f - tension) / 2f;
|
float m1 = mTemp;
|
||||||
|
m1 += (p3 - p2) * biasTensionTerms;
|
||||||
|
|
||||||
float a0 = 2 * mu3 - 3 * mu2 + 1;
|
float a0 = 2*mu3 - 3*mu2 + 1;
|
||||||
float a1 = mu3 - 2 * mu2 + scale;
|
float a1 = 1*mu3 - 2*mu2 + scale;
|
||||||
float a2 = mu3 - mu2;
|
float a2 = 1*mu3 - 1*mu2 + 0;
|
||||||
float a3 = -2 * mu3 + 3 * mu2;
|
float a3 = -2*mu3 + 3*mu2 + 0;
|
||||||
|
|
||||||
return a0 * p1 + a1 * m0 + a2 * m1 + a3 * p2;
|
return a0*p1 + a1*m0 + a2*m1 + a3*p2;
|
||||||
}
|
}
|
||||||
|
//public static float interpolateHermite(float scale, float p0, float p1, float p2, float p3, float tension, float bias) {}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ class TitleScreen(batch: FlippingSpriteBatch) : IngameInstance(batch) {
|
|||||||
val xperc: Double = (x - xwstart) / xw
|
val xperc: Double = (x - xwstart) / xw
|
||||||
|
|
||||||
// return FastMath.interpolateLinear(xperc.toFloat(), cameraNodes[indexThis fmod cameraNodes.size], cameraNodes[(indexThis + 1) fmod cameraNodes.size]).toDouble()
|
// return FastMath.interpolateLinear(xperc.toFloat(), cameraNodes[indexThis fmod cameraNodes.size], cameraNodes[(indexThis + 1) fmod cameraNodes.size]).toDouble()
|
||||||
return FastMath.interpolateHermite(xperc.toFloat(),
|
return FastMath.interpolateCatmullRom(xperc.toFloat(),
|
||||||
cameraNodes[(indexThis - 1) fmod cameraNodes.size],
|
cameraNodes[(indexThis - 1) fmod cameraNodes.size],
|
||||||
cameraNodes[(indexThis - 0) fmod cameraNodes.size],
|
cameraNodes[(indexThis - 0) fmod cameraNodes.size],
|
||||||
cameraNodes[(indexThis + 1) fmod cameraNodes.size],
|
cameraNodes[(indexThis + 1) fmod cameraNodes.size],
|
||||||
@@ -310,9 +310,9 @@ class TitleScreen(batch: FlippingSpriteBatch) : IngameInstance(batch) {
|
|||||||
drawLineOnWorld(x1.toFloat() + ww, y1.toFloat(), x2.toFloat() + ww, y2.toFloat())
|
drawLineOnWorld(x1.toFloat() + ww, y1.toFloat(), x2.toFloat() + ww, y2.toFloat())
|
||||||
}
|
}
|
||||||
|
|
||||||
private val baseSlopeCol = Color(0f, 1f, 1f, 1f)
|
private val baseSlopeCol = Color(0f, 0.9f, 0.85f, 1f)
|
||||||
private val firstOrderSlopeCol = Color(0f, 0.4f, 0f, 1f)
|
private val firstOrderSlopeCol = Color(0f, 0.4f, 0f, 1f)
|
||||||
private val secondOrderSlopeCol = Color(0.6f, 0.6f, 0.0f, 1f)
|
private val secondOrderSlopeCol = Color(1f, 0.3f, 0.6f, 1f)
|
||||||
|
|
||||||
private val renderScreen = { delta: Float ->
|
private val renderScreen = { delta: Float ->
|
||||||
Gdx.graphics.setTitle(TerrarumIngame.getCanonicalTitle())
|
Gdx.graphics.setTitle(TerrarumIngame.getCanonicalTitle())
|
||||||
@@ -361,15 +361,12 @@ class TitleScreen(batch: FlippingSpriteBatch) : IngameInstance(batch) {
|
|||||||
drawLineOnWorld(px1L, py1L, px1C, py1C)
|
drawLineOnWorld(px1L, py1L, px1C, py1C)
|
||||||
drawLineOnWorld(px1C, py1C, px1R, py1R)
|
drawLineOnWorld(px1C, py1C, px1R, py1R)
|
||||||
|
|
||||||
it.color = secondOrderSlopeCol
|
|
||||||
drawLineOnWorld(px2L, py2L, px2R, py2R)
|
|
||||||
|
|
||||||
it.color = baseSlopeCol
|
|
||||||
/*(1..cameraNodes.lastIndex + 16).forEach { index0 ->
|
/*(1..cameraNodes.lastIndex + 16).forEach { index0 ->
|
||||||
val x1 = (index0 - 1) * cameraNodeWidth * TILE_SIZEF; val x2 = (index0 - 0) * cameraNodeWidth * TILE_SIZEF
|
val x1 = (index0 - 1) * cameraNodeWidth * TILE_SIZEF; val x2 = (index0 - 0) * cameraNodeWidth * TILE_SIZEF
|
||||||
val y1 = cameraNodes[(index0 - 1) fmod cameraNodes.size]; val y2 = cameraNodes[index0 fmod cameraNodes.size]
|
val y1 = cameraNodes[(index0 - 1) fmod cameraNodes.size]; val y2 = cameraNodes[index0 fmod cameraNodes.size]
|
||||||
drawLineOnWorld(x1, y1, x2, y2)
|
drawLineOnWorld(x1, y1, x2, y2)
|
||||||
}*/
|
}*/
|
||||||
|
it.color = baseSlopeCol
|
||||||
val points = (0..App.scr.width).map { x ->
|
val points = (0..App.scr.width).map { x ->
|
||||||
val worldX = (WorldCamera.x + x).toDouble()
|
val worldX = (WorldCamera.x + x).toDouble()
|
||||||
worldX to getPointAt(worldX)
|
worldX to getPointAt(worldX)
|
||||||
@@ -380,6 +377,9 @@ class TitleScreen(batch: FlippingSpriteBatch) : IngameInstance(batch) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
it.color = secondOrderSlopeCol
|
||||||
|
drawLineOnWorld(px2L, py2L, px2R, py2R)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user