Skip to content

Commit

Permalink
fixed #6 (kinda scuffed but it more or less works)
Browse files Browse the repository at this point in the history
  • Loading branch information
AdityaGupta1 committed Sep 11, 2021
1 parent 2177166 commit 5de111f
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 4 deletions.
27 changes: 25 additions & 2 deletions src/main/java/org/sdoaj/jimgus/util/math/SplineHelper.java
Expand Up @@ -118,13 +118,36 @@ public static SplineSDFBuilder from(List<Vec3f> spline) {
}

public SDFAbstractShape build() {
return this.build(0f);
}

public SDFAbstractShape build(float padding) {
SDF sdf = null;

int points = spline.size();
final int count = points - 1;
for (int i = 0; i < count; i++) {
SDFLine line = new SDFLine(spline.get(i), spline.get(i + 1))
.radius(this.radius, ((float) i) / count, ((float) (i + 1)) / count)
Vec3f point1 = spline.get(i);
Vec3f point2 = spline.get(i + 1);
float radiusMinT = ((float) i) / count;
float radiusMaxT = ((float) (i + 1)) / count;

if (i != 0 && i != count - 1) {
Vec3f vecLine = point2.subtract(point1);

if (padding != 0f) {
Vec3f direction = vecLine.normalize();
point1 = point1.add(direction.multiply(-padding));
point2 = point2.add(direction.multiply(padding));
}

// float length = vecLine.length();
// float paddingRadius = padding / length;
// radiusMinT -= paddingRadius;
// radiusMaxT += paddingRadius;
}

SDFLine line = new SDFLine(point1, point2).radius(this.radius, radiusMinT, radiusMaxT)
.radiusMultiplier(radiusMultiplier);

if (i == 0 && !capStart) {
Expand Down
Expand Up @@ -39,12 +39,12 @@ protected void fillStructureWorld(StructureWorld world, BlockPos pos, Random ran
List<Vec3f> stemSpline = SplineHelper.makeSpline(0, 0, 0,
0, height, 0, 6);
SplineHelper.offsetPoints(stemSpline, () -> MathHelper.nextFloatOne(random), 10, 0, 10, false, true);
stemSpline = SplineHelper.bezier(stemSpline, 32);
stemSpline = SplineHelper.bezier(stemSpline, 14);
SDF stem = SplineHelper.SplineSDFBuilder.from(stemSpline)
.radius(delta -> {
float x = delta - 0.5f;
return 4 * x * x + 1.5f;
}).radiusMultiplier(4.5f).build().setBlock(BlockInit.TEST_BLOCK.get());
}).radiusMultiplier(4.5f).build(1.5f).setBlock(BlockInit.TEST_BLOCK.get());

float capRadius = MathHelper.nextFloat(random, 36, 48);
capRadius *= MathHelper.mapRange(height, heightMin, heightMax, 0.8f, 1.2f);
Expand Down

0 comments on commit 5de111f

Please sign in to comment.