mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2026-08-27 04:37:47 +00:00
height-bound samples
This commit is contained in:
@@ -426,6 +426,10 @@ public class IrisComplex implements DataProvider {
|
|||||||
double fz = (z - gz) / grid;
|
double fz = (z - gz) / grid;
|
||||||
|
|
||||||
long b00 = cornerBounds(cache, engine, interpolator, interpolatorIndex, generators, gx, gz);
|
long b00 = cornerBounds(cache, engine, interpolator, interpolatorIndex, generators, gx, gz);
|
||||||
|
if (fx == 0D && fz == 0D) {
|
||||||
|
return new NoiseBounds(boundsLow(b00), boundsHigh(b00));
|
||||||
|
}
|
||||||
|
|
||||||
long b10 = cornerBounds(cache, engine, interpolator, interpolatorIndex, generators, gx + grid, gz);
|
long b10 = cornerBounds(cache, engine, interpolator, interpolatorIndex, generators, gx + grid, gz);
|
||||||
long b01 = cornerBounds(cache, engine, interpolator, interpolatorIndex, generators, gx, gz + grid);
|
long b01 = cornerBounds(cache, engine, interpolator, interpolatorIndex, generators, gx, gz + grid);
|
||||||
long b11 = cornerBounds(cache, engine, interpolator, interpolatorIndex, generators, gx + grid, gz + grid);
|
long b11 = cornerBounds(cache, engine, interpolator, interpolatorIndex, generators, gx + grid, gz + grid);
|
||||||
|
|||||||
@@ -48,6 +48,19 @@ public class IrisComplexGridBoundsCacheTest {
|
|||||||
assertEquals(1, interpolator.getInvocations());
|
assertEquals(1, interpolator.getInvocations());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void alignedGridSampleUsesOnlyTheContributingCorner() throws Exception {
|
||||||
|
IrisComplex complex = createComplex();
|
||||||
|
Method gridSampleBounds = gridSampleBoundsMethod();
|
||||||
|
CountingInterpolator interpolator = new CountingInterpolator(3.5D, 7.25D);
|
||||||
|
|
||||||
|
NoiseBounds bounds = invokeGridSampleBounds(complex, gridSampleBounds, interpolator, 64D, -32D);
|
||||||
|
|
||||||
|
assertEquals(3.5F, bounds.min(), 0D);
|
||||||
|
assertEquals(7.25F, bounds.max(), 0D);
|
||||||
|
assertEquals(1, interpolator.getInvocations());
|
||||||
|
}
|
||||||
|
|
||||||
private IrisComplex createComplex() throws Exception {
|
private IrisComplex createComplex() throws Exception {
|
||||||
IrisComplex complex = mock(IrisComplex.class, CALLS_REAL_METHODS);
|
IrisComplex complex = mock(IrisComplex.class, CALLS_REAL_METHODS);
|
||||||
|
|
||||||
@@ -89,6 +102,20 @@ public class IrisComplexGridBoundsCacheTest {
|
|||||||
return method;
|
return method;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Method gridSampleBoundsMethod() throws Exception {
|
||||||
|
Method method = IrisComplex.class.getDeclaredMethod(
|
||||||
|
"gridSampleBounds",
|
||||||
|
Engine.class,
|
||||||
|
IrisInterpolator.class,
|
||||||
|
int.class,
|
||||||
|
IrisGenerator[].class,
|
||||||
|
double.class,
|
||||||
|
double.class
|
||||||
|
);
|
||||||
|
method.setAccessible(true);
|
||||||
|
return method;
|
||||||
|
}
|
||||||
|
|
||||||
private long invokeCornerBounds(IrisComplex complex, Method method, IrisInterpolator interpolator, int x, int z) throws Exception {
|
private long invokeCornerBounds(IrisComplex complex, Method method, IrisInterpolator interpolator, int x, int z) throws Exception {
|
||||||
Field gridBoundsCache = IrisComplex.class.getDeclaredField("gridBoundsCache");
|
Field gridBoundsCache = IrisComplex.class.getDeclaredField("gridBoundsCache");
|
||||||
gridBoundsCache.setAccessible(true);
|
gridBoundsCache.setAccessible(true);
|
||||||
@@ -96,6 +123,16 @@ public class IrisComplexGridBoundsCacheTest {
|
|||||||
return (long) method.invoke(complex, cache.get(), null, interpolator, 0, new IrisGenerator[0], x, z);
|
return (long) method.invoke(complex, cache.get(), null, interpolator, 0, new IrisGenerator[0], x, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private NoiseBounds invokeGridSampleBounds(
|
||||||
|
IrisComplex complex,
|
||||||
|
Method method,
|
||||||
|
IrisInterpolator interpolator,
|
||||||
|
double x,
|
||||||
|
double z
|
||||||
|
) throws Exception {
|
||||||
|
return (NoiseBounds) method.invoke(complex, null, interpolator, 0, new IrisGenerator[0], x, z);
|
||||||
|
}
|
||||||
|
|
||||||
private float unpackLow(long packed) {
|
private float unpackLow(long packed) {
|
||||||
return Float.intBitsToFloat((int) (packed >>> 32));
|
return Float.intBitsToFloat((int) (packed >>> 32));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user