diff options
Diffstat (limited to 'src/main/java/dev/figboot/cuberender/state')
3 files changed, 27 insertions, 30 deletions
diff --git a/src/main/java/dev/figboot/cuberender/state/Framebuffer.java b/src/main/java/dev/figboot/cuberender/state/Framebuffer.java index 56e218e..3c2a1ad 100644 --- a/src/main/java/dev/figboot/cuberender/state/Framebuffer.java +++ b/src/main/java/dev/figboot/cuberender/state/Framebuffer.java @@ -1,6 +1,7 @@ package dev.figboot.cuberender.state; import dev.figboot.cuberender.math.Matrix3f; +import dev.figboot.cuberender.math.Matrix4f; import dev.figboot.cuberender.math.Vector3f; import dev.figboot.cuberender.math.Vector4f; import lombok.Getter; @@ -23,9 +24,9 @@ public class Framebuffer { @Getter private final BufferedImage color; private final float[] depth; - private int depthMode = FB_DEPTH_USE | FB_DEPTH_COMMIT; + @Setter private int depthMode = FB_DEPTH_USE | FB_DEPTH_COMMIT; - @Setter private Matrix3f transform; + @Setter private Matrix4f transform; @Setter private BlendMode blendMode = BlendMode.DISABLE; @@ -37,10 +38,6 @@ public class Framebuffer { depth = new float[width * height]; } - public void setDepthMode(int mode) { - this.depthMode = mode; - } - public void clear(int bits, int color) { if ((bits & FB_CLEAR_COLOR) != 0) { Graphics gfx = this.color.getGraphics(); @@ -74,9 +71,9 @@ public class Framebuffer { i1 = mesh.indices[tri * 3 + 1]; i2 = mesh.indices[tri * 3 + 2]; - Vector3f vert0 = mesh.vertices[i0]; - Vector3f vert1 = mesh.vertices[i1]; - Vector3f vert2 = mesh.vertices[i2]; + Vector4f vert0 = mesh.vertices[i0]; + Vector4f vert1 = mesh.vertices[i1]; + Vector4f vert2 = mesh.vertices[i2]; drawTriangle(vert0, vert1, vert2, mesh.normals[tri], s, i0, i1, i2); } @@ -94,9 +91,9 @@ public class Framebuffer { i1 = tri * 3 + 1; i2 = tri * 3 + 2; - Vector3f vert0 = mesh.vertices[i0]; - Vector3f vert1 = mesh.vertices[i1]; - Vector3f vert2 = mesh.vertices[i2]; + Vector4f vert0 = mesh.vertices[i0]; + Vector4f vert1 = mesh.vertices[i1]; + Vector4f vert2 = mesh.vertices[i2]; drawTriangle(vert0, vert1, vert2, mesh.normals[tri], s, i0, i1, i2); } @@ -111,7 +108,7 @@ public class Framebuffer { } // triangles have flat normals (we don't need anything more than that in this renderer and it saves us the trouble of interpolating between 3 normal vectors) - private void drawTriangle(Vector3f vert0, Vector3f vert1, Vector3f vert2, Vector3f normal, Sampleable<Object> sampleable, int i0, int i1, int i2) { + private void drawTriangle(Vector4f vert0, Vector4f vert1, Vector4f vert2, Vector4f normal, Sampleable<Object> sampleable, int i0, int i1, int i2) { Vector4f outColor = new Vector4f(), prevColor = new Vector4f(); vert0 = transform.transform(vert0); diff --git a/src/main/java/dev/figboot/cuberender/state/Mesh.java b/src/main/java/dev/figboot/cuberender/state/Mesh.java index 2f28c16..c18fe04 100644 --- a/src/main/java/dev/figboot/cuberender/state/Mesh.java +++ b/src/main/java/dev/figboot/cuberender/state/Mesh.java @@ -2,7 +2,7 @@ package dev.figboot.cuberender.state; import dev.figboot.cuberender.math.MathUtil; import dev.figboot.cuberender.math.Vector2f; -import dev.figboot.cuberender.math.Vector3f; +import dev.figboot.cuberender.math.Vector4f; import dev.figboot.cuberender.math.Vector4f; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; @@ -11,20 +11,20 @@ import java.util.*; @RequiredArgsConstructor(access = AccessLevel.PACKAGE) public abstract class Mesh<T> implements Sampleable<T> { - final Vector3f[] vertices; - final Vector3f[] normals; + final Vector4f[] vertices; + final Vector4f[] normals; final int[] indices; final Map<AttachmentType, Object> attachments; - protected void applyLighting(Vector4f color, Vector3f normal) { + protected void applyLighting(Vector4f color, Vector4f normal) { Float lightFact = (Float)attachments.get(AttachmentType.LIGHT_FACTOR); if (lightFact == null) { return; } - float fact = 1 - (normal.dot((Vector3f)attachments.get(AttachmentType.LIGHT_VECTOR)) + 1) / 2; + float fact = 1 - (normal.dot((Vector4f)attachments.get(AttachmentType.LIGHT_VECTOR)) + 1) / 2; fact *= lightFact; // lightFact should kinda set the "black level" fact = 1 - fact; @@ -36,8 +36,8 @@ public abstract class Mesh<T> implements Sampleable<T> { } public static class Builder { - private final List<Vector3f> vertices = new ArrayList<>(); - private final List<Vector3f> normals = new ArrayList<>(); + private final List<Vector4f> vertices = new ArrayList<>(); + private final List<Vector4f> normals = new ArrayList<>(); private final List<Integer> indices = new ArrayList<>(); private final List<Vector2f> texCoords = new ArrayList<>(); private int color; @@ -65,12 +65,12 @@ public abstract class Mesh<T> implements Sampleable<T> { return this; } - public Builder vertex(Vector3f... vert) { + public Builder vertex(Vector4f... vert) { vertices.addAll(Arrays.asList(vert)); return this; } - public Builder normals(Vector3f... norm) { + public Builder normals(Vector4f... norm) { normals.addAll(Arrays.asList(norm)); return this; } @@ -99,9 +99,9 @@ public abstract class Mesh<T> implements Sampleable<T> { } if (texture == null) { - return new ColorMesh(vertices.toArray(new Vector3f[0]), normals.toArray(new Vector3f[0]), idxArr, attachments, color); + return new ColorMesh(vertices.toArray(new Vector4f[0]), normals.toArray(new Vector4f[0]), idxArr, attachments, color); } else { - return new TextureMesh(vertices.toArray(new Vector3f[0]), normals.toArray(new Vector3f[0]), idxArr, attachments, texture, texCoords.toArray(new Vector2f[0])); + return new TextureMesh(vertices.toArray(new Vector4f[0]), normals.toArray(new Vector4f[0]), idxArr, attachments, texture, texCoords.toArray(new Vector2f[0])); } } } @@ -109,7 +109,7 @@ public abstract class Mesh<T> implements Sampleable<T> { private static class ColorMesh extends Mesh<Void> { int color; - ColorMesh(Vector3f[] vertices, Vector3f[] normals, int[] indices, Map<AttachmentType, Object> attachments, int color) { + ColorMesh(Vector4f[] vertices, Vector4f[] normals, int[] indices, Map<AttachmentType, Object> attachments, int color) { super(vertices, normals, indices, attachments); this.color = color; } @@ -120,7 +120,7 @@ public abstract class Mesh<T> implements Sampleable<T> { } @Override - public void sample(float b0, float b1, float b2, Vector3f normal, Void u1, Void u2, Void u3, Vector4f outColor) { + public void sample(float b0, float b1, float b2, Vector4f normal, Void u1, Void u2, Void u3, Vector4f outColor) { applyLighting(outColor.fromARGB(color), normal); } } @@ -129,7 +129,7 @@ public abstract class Mesh<T> implements Sampleable<T> { Texture texture; Vector2f[] texCoords; - TextureMesh(Vector3f[] vertices, Vector3f[] normals, int[] indices, Map<AttachmentType, Object> attachments, Texture tex, Vector2f[] texCoords) { + TextureMesh(Vector4f[] vertices, Vector4f[] normals, int[] indices, Map<AttachmentType, Object> attachments, Texture tex, Vector2f[] texCoords) { super(vertices, normals, indices, attachments); this.texture = tex; this.texCoords = texCoords; @@ -141,7 +141,7 @@ public abstract class Mesh<T> implements Sampleable<T> { } @Override - public void sample(float b0, float b1, float b2, Vector3f normal, Vector2f tc1, Vector2f tc2, Vector2f tc3, Vector4f color) { + public void sample(float b0, float b1, float b2, Vector4f normal, Vector2f tc1, Vector2f tc2, Vector2f tc3, Vector4f color) { float texX = b0 * tc1.x + b1 * tc2.x + b2 * tc3.x; float texY = b0 * tc1.y + b1 * tc2.y + b2 * tc3.y; @@ -154,6 +154,6 @@ public abstract class Mesh<T> implements Sampleable<T> { public enum AttachmentType { LIGHT_FACTOR, // float - LIGHT_VECTOR // Vector3f + LIGHT_VECTOR // Vector4f } } diff --git a/src/main/java/dev/figboot/cuberender/state/Sampleable.java b/src/main/java/dev/figboot/cuberender/state/Sampleable.java index 876a248..7b7ad7d 100644 --- a/src/main/java/dev/figboot/cuberender/state/Sampleable.java +++ b/src/main/java/dev/figboot/cuberender/state/Sampleable.java @@ -6,5 +6,5 @@ import dev.figboot.cuberender.math.Vector4f; public interface Sampleable<T> { T extra(int idx); - void sample(float b0, float b1, float b2, Vector3f normal, T e1, T e2, T e3, Vector4f target); + void sample(float b0, float b1, float b2, Vector4f normal, T e1, T e2, T e3, Vector4f outColor); } |
