Skip to content

Commit be91f89

Browse files
committed
Fixed 0 height cylinders rendering
1 parent 058cc6a commit be91f89

File tree

5 files changed

+86
-63
lines changed

5 files changed

+86
-63
lines changed

src/main/java/dev/latvian/mods/klib/shape/CircleShape.java

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,25 +58,44 @@ public static void buildLines(float x, float y, float z, VertexCallback callback
5858

5959
@Override
6060
public void buildQuads(float x, float y, float z, VertexCallback callback) {
61-
buildQuads(x, y, z, callback, radius, 96);
61+
buildTopQuads(x, y, z, callback, radius, 96);
6262
}
6363

64-
public static void buildQuads(float x, float y, float z, VertexCallback callback, float radius, int detail) {
64+
public static void buildTopQuads(float x, float y, float z, VertexCallback callback, float radius, int detail) {
6565
float r = Math.max(radius, 0F);
6666
double rs = Math.PI * 2D / (double) detail;
6767

6868
for (int i = 0; i < detail; i += 2) {
69-
float cx = (float) (Math.cos(i * rs) * r);
70-
float cz = (float) (Math.sin(i * rs) * r);
71-
float nx = (float) (Math.cos((i + 1D) * rs) * r);
72-
float nz = (float) (Math.sin((i + 1D) * rs) * r);
73-
float nnx = (float) (Math.cos((i + 2D) * rs) * r);
74-
float nnz = (float) (Math.sin((i + 2D) * rs) * r);
69+
float cx = (float) Math.cos(i * rs);
70+
float cz = (float) Math.sin(i * rs);
71+
float nx = (float) Math.cos((i + 1D) * rs);
72+
float nz = (float) Math.sin((i + 1D) * rs);
73+
float nnx = (float) Math.cos((i + 2D) * rs);
74+
float nnz = (float) Math.sin((i + 2D) * rs);
75+
76+
callback.quad(x, y, z, 0.5F, 0.5F, 0F, 1F, 0F);
77+
callback.quad(x + nnx * r, y, z + nnz * r, 0.5F + nnx / r / 2F, 0.5F + nnz / 2F, 0F, 1F, 0F);
78+
callback.quad(x + nx * r, y, z + nz * r, 0.5F + nx / 2F, 0.5F + nz / 2F, 0F, 1F, 0F);
79+
callback.quad(x + cx * r, y, z + cz * r, 0.5F + cx / 2F, 0.5F + cz / 2F, 0F, 1F, 0F);
80+
}
81+
}
7582

76-
callback.acceptPos(x, y, z).acceptNormal(0F, 1F, 0F).acceptTex(0.5F, 0.5F);
77-
callback.acceptPos(x + nnx * r, y, z + nnz * r).acceptNormal(0F, 1F, 0F).acceptTex(0.5F + nnx / 2F, 0.5F + nnz / 2F);
78-
callback.acceptPos(x + nx * r, y, z + nz * r).acceptNormal(0F, 1F, 0F).acceptTex(0.5F + nx / 2F, 0.5F + nz / 2F);
79-
callback.acceptPos(x + cx * r, y, z + cz * r).acceptNormal(0F, 1F, 0F).acceptTex(0.5F + cx / 2F, 0.5F + cz / 2F);
83+
public static void buildBottomQuads(float x, float y, float z, VertexCallback callback, float radius, int detail) {
84+
float r = Math.max(radius, 0F);
85+
double rs = Math.PI * 2D / (double) detail;
86+
87+
for (int i = 0; i < detail; i += 2) {
88+
float cx = (float) Math.cos(i * rs);
89+
float cz = (float) Math.sin(i * rs);
90+
float nx = (float) Math.cos((i + 1D) * rs);
91+
float nz = (float) Math.sin((i + 1D) * rs);
92+
float nnx = (float) Math.cos((i + 2D) * rs);
93+
float nnz = (float) Math.sin((i + 2D) * rs);
94+
95+
callback.quad(x, y, z, 0.5F, 0.5F, 0F, -1F, 0F);
96+
callback.quad(x + cx * r, y, z + cz * r, 0.5F + cx / 2F, 0.5F + cz / 2F, 0F, -1F, 0F);
97+
callback.quad(x + nx * r, y, z + nz * r, 0.5F + nx / 2F, 0.5F + nz / 2F, 0F, -1F, 0F);
98+
callback.quad(x + nnx * r, y, z + nnz * r, 0.5F + nnx / 2F, 0.5F + nnz / 2F, 0F, -1F, 0F);
8099
}
81100
}
82101

src/main/java/dev/latvian/mods/klib/shape/CuboidBuilder.java

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,65 +8,65 @@ static void downQuad(float y, float minX, float minZ, float maxX, float maxZ, Ve
88
return;
99
}
1010

11-
callback.acceptPos(minX, y, minZ).acceptTex(0F, 0F).acceptNormal(0F, -1F, 0F);
12-
callback.acceptPos(maxX, y, minZ).acceptTex(1F, 0F).acceptNormal(0F, -1F, 0F);
13-
callback.acceptPos(maxX, y, maxZ).acceptTex(1F, 1F).acceptNormal(0F, -1F, 0F);
14-
callback.acceptPos(minX, y, maxZ).acceptTex(0F, 1F).acceptNormal(0F, -1F, 0F);
11+
callback.quad(minX, y, minZ, 0F, 0F, 0F, -1F, 0F);
12+
callback.quad(maxX, y, minZ, 1F, 0F, 0F, -1F, 0F);
13+
callback.quad(maxX, y, maxZ, 1F, 1F, 0F, -1F, 0F);
14+
callback.quad(minX, y, maxZ, 0F, 1F, 0F, -1F, 0F);
1515
}
1616

1717
static void upQuad(float y, float minX, float minZ, float maxX, float maxZ, VertexCallback callback) {
1818
if (minX == maxX || minZ == maxZ) {
1919
return;
2020
}
2121

22-
callback.acceptPos(minX, y, minZ).acceptTex(0F, 0F).acceptNormal(0F, 1F, 0F);
23-
callback.acceptPos(minX, y, maxZ).acceptTex(0F, 1F).acceptNormal(0F, 1F, 0F);
24-
callback.acceptPos(maxX, y, maxZ).acceptTex(1F, 1F).acceptNormal(0F, 1F, 0F);
25-
callback.acceptPos(maxX, y, minZ).acceptTex(1F, 0F).acceptNormal(0F, 1F, 0F);
22+
callback.quad(minX, y, minZ, 0F, 0F, 0F, 1F, 0F);
23+
callback.quad(minX, y, maxZ, 0F, 1F, 0F, 1F, 0F);
24+
callback.quad(maxX, y, maxZ, 1F, 1F, 0F, 1F, 0F);
25+
callback.quad(maxX, y, minZ, 1F, 0F, 0F, 1F, 0F);
2626
}
2727

2828
static void northQuad(float z, float minX, float minY, float maxX, float maxY, VertexCallback callback) {
2929
if (minY == maxY || minX == maxX) {
3030
return;
3131
}
3232

33-
callback.acceptPos(minX, minY, z).acceptTex(1F, 1F).acceptNormal(0F, 0F, -1F);
34-
callback.acceptPos(minX, maxY, z).acceptTex(1F, 0F).acceptNormal(0F, 0F, -1F);
35-
callback.acceptPos(maxX, maxY, z).acceptTex(0F, 0F).acceptNormal(0F, 0F, -1F);
36-
callback.acceptPos(maxX, minY, z).acceptTex(0F, 1F).acceptNormal(0F, 0F, -1F);
33+
callback.quad(minX, minY, z, 1F, 1F, 0F, 0F, -1F);
34+
callback.quad(minX, maxY, z, 1F, 0F, 0F, 0F, -1F);
35+
callback.quad(maxX, maxY, z, 0F, 0F, 0F, 0F, -1F);
36+
callback.quad(maxX, minY, z, 0F, 1F, 0F, 0F, -1F);
3737
}
3838

3939
static void southQuad(float z, float minX, float minY, float maxX, float maxY, VertexCallback callback) {
4040
if (minY == maxY || minX == maxX) {
4141
return;
4242
}
4343

44-
callback.acceptPos(maxX, minY, z).acceptTex(1F, 1F).acceptNormal(0F, 0F, 1F);
45-
callback.acceptPos(maxX, maxY, z).acceptTex(1F, 0F).acceptNormal(0F, 0F, 1F);
46-
callback.acceptPos(minX, maxY, z).acceptTex(0F, 0F).acceptNormal(0F, 0F, 1F);
47-
callback.acceptPos(minX, minY, z).acceptTex(0F, 1F).acceptNormal(0F, 0F, 1F);
44+
callback.quad(maxX, minY, z, 1F, 1F, 0F, 0F, 1F);
45+
callback.quad(maxX, maxY, z, 1F, 0F, 0F, 0F, 1F);
46+
callback.quad(minX, maxY, z, 0F, 0F, 0F, 0F, 1F);
47+
callback.quad(minX, minY, z, 0F, 1F, 0F, 0F, 1F);
4848
}
4949

5050
static void westQuad(float x, float minY, float minZ, float maxY, float maxZ, VertexCallback callback) {
5151
if (minY == maxY || minZ == maxZ) {
5252
return;
5353
}
5454

55-
callback.acceptPos(x, minY, minZ).acceptTex(0F, 1F).acceptNormal(-1F, 0F, 0F);
56-
callback.acceptPos(x, minY, maxZ).acceptTex(1F, 1F).acceptNormal(-1F, 0F, 0F);
57-
callback.acceptPos(x, maxY, maxZ).acceptTex(1F, 0F).acceptNormal(-1F, 0F, 0F);
58-
callback.acceptPos(x, maxY, minZ).acceptTex(0F, 0F).acceptNormal(-1F, 0F, 0F);
55+
callback.quad(x, minY, minZ, 0F, 1F, -1F, 0F, 0F);
56+
callback.quad(x, minY, maxZ, 1F, 1F, -1F, 0F, 0F);
57+
callback.quad(x, maxY, maxZ, 1F, 0F, -1F, 0F, 0F);
58+
callback.quad(x, maxY, minZ, 0F, 0F, -1F, 0F, 0F);
5959
}
6060

6161
static void eastQuad(float x, float minY, float minZ, float maxY, float maxZ, VertexCallback callback) {
6262
if (minY == maxY || minZ == maxZ) {
6363
return;
6464
}
6565

66-
callback.acceptPos(x, maxY, minZ).acceptTex(1F, 0F).acceptNormal(1F, 0F, 0F);
67-
callback.acceptPos(x, maxY, maxZ).acceptTex(0F, 0F).acceptNormal(1F, 0F, 0F);
68-
callback.acceptPos(x, minY, maxZ).acceptTex(0F, 1F).acceptNormal(1F, 0F, 0F);
69-
callback.acceptPos(x, minY, minZ).acceptTex(1F, 1F).acceptNormal(1F, 0F, 0F);
66+
callback.quad(x, maxY, minZ, 1F, 0F, 1F, 0F, 0F);
67+
callback.quad(x, maxY, maxZ, 0F, 0F, 1F, 0F, 0F);
68+
callback.quad(x, minY, maxZ, 0F, 1F, 1F, 0F, 0F);
69+
callback.quad(x, minY, minZ, 1F, 1F, 1F, 0F, 0F);
7070
}
7171

7272
static void quads(float minX, float minY, float minZ, float maxX, float maxY, float maxZ, VertexCallback callback) {

src/main/java/dev/latvian/mods/klib/shape/CylinderShape.java

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -85,23 +85,23 @@ public static void buildQuads(float x, float y, float z, VertexCallback callback
8585
double rs = Math.PI * 2D / (double) detail;
8686

8787
for (int i = 0; i < detail; i += 2) {
88-
float cx = (float) (Math.cos(i * rs) * r);
89-
float cz = (float) (Math.sin(i * rs) * r);
90-
float nx = (float) (Math.cos((i + 1D) * rs) * r);
91-
float nz = (float) (Math.sin((i + 1D) * rs) * r);
92-
float nnx = (float) (Math.cos((i + 2D) * rs) * r);
93-
float nnz = (float) (Math.sin((i + 2D) * rs) * r);
94-
95-
callback.acceptPos(x, y - h, z).acceptNormal(0F, -1F, 0F).acceptTex(0.5F, 0.5F);
96-
callback.acceptPos(x + cx, y - h, z + cz).acceptNormal(0F, -1F, 0F).acceptTex(0.5F + cx / r / 2F, 0.5F + cz / r / 2F);
97-
callback.acceptPos(x + nx, y - h, z + nz).acceptNormal(0F, -1F, 0F).acceptTex(0.5F + nx / r / 2F, 0.5F + nz / r / 2F);
98-
callback.acceptPos(x + nnx, y - h, z + nnz).acceptNormal(0F, -1F, 0F).acceptTex(0.5F + nnx / r / 2F, 0.5F + nnz / r / 2F);
88+
float cx = (float) Math.cos(i * rs);
89+
float cz = (float) Math.sin(i * rs);
90+
float nx = (float) Math.cos((i + 1D) * rs);
91+
float nz = (float) Math.sin((i + 1D) * rs);
92+
float nnx = (float) Math.cos((i + 2D) * rs);
93+
float nnz = (float) Math.sin((i + 2D) * rs);
94+
95+
callback.quad(x, y + h, z, 0.5F, 0.5F, 0F, 1F, 0F);
96+
callback.quad(x + nnx * r, y + h, z + nnz * r, 0.5F + nnx / r / 2F, 0.5F + nnz / 2F, 0F, 1F, 0F);
97+
callback.quad(x + nx * r, y + h, z + nz * r, 0.5F + nx / 2F, 0.5F + nz / 2F, 0F, 1F, 0F);
98+
callback.quad(x + cx * r, y + h, z + cz * r, 0.5F + cx / 2F, 0.5F + cz / 2F, 0F, 1F, 0F);
9999

100100
if (h > 0F) {
101-
callback.acceptPos(x, y + h, z).acceptNormal(0F, 1F, 0F).acceptTex(0.5F, 0.5F);
102-
callback.acceptPos(x + nnx, y + h, z + nnz).acceptNormal(0F, 1F, 0F).acceptTex(0.5F + nnx / r / 2F, 0.5F + nnz / r / 2F);
103-
callback.acceptPos(x + nx, y + h, z + nz).acceptNormal(0F, 1F, 0F).acceptTex(0.5F + nx / r / 2F, 0.5F + nz / r / 2F);
104-
callback.acceptPos(x + cx, y + h, z + cz).acceptNormal(0F, 1F, 0F).acceptTex(0.5F + cx / r / 2F, 0.5F + cz / r / 2F);
101+
callback.quad(x, y - h, z, 0.5F, 0.5F, 0F, -1F, 0F);
102+
callback.quad(x + cx * r, y - h, z + cz * r, 0.5F + cx / 2F, 0.5F + cz / 2F, 0F, -1F, 0F);
103+
callback.quad(x + nx * r, y - h, z + nz * r, 0.5F + nx / 2F, 0.5F + nz / 2F, 0F, -1F, 0F);
104+
callback.quad(x + nnx * r, y - h, z + nnz * r, 0.5F + nnx / 2F, 0.5F + nnz / 2F, 0F, -1F, 0F);
105105

106106
float nrmx = (float) Math.cos((i + 0.5D) * rs);
107107
float nrmz = (float) Math.sin((i + 0.5D) * rs);
@@ -111,15 +111,15 @@ public static void buildQuads(float x, float y, float z, VertexCallback callback
111111
float nu = (i + 1F) * 3F / (float) detail;
112112
float nnu = (i + 2F) * 3F / (float) detail;
113113

114-
callback.acceptPos(x + nx, y + h, z + nz).acceptNormal(nrmx, 0F, nrmz).acceptTex(nu, 0F);
115-
callback.acceptPos(x + nx, y - h, z + nz).acceptNormal(nrmx, 0F, nrmz).acceptTex(nu, 1F);
116-
callback.acceptPos(x + cx, y - h, z + cz).acceptNormal(nrmx, 0F, nrmz).acceptTex(cu, 1F);
117-
callback.acceptPos(x + cx, y + h, z + cz).acceptNormal(nrmx, 0F, nrmz).acceptTex(cu, 0F);
114+
callback.quad(x + nx * r, y + h, z + nz * r, nu, 0F, nrmx, 0F, nrmz);
115+
callback.quad(x + nx * r, y - h, z + nz * r, nu, 1F, nrmx, 0F, nrmz);
116+
callback.quad(x + cx * r, y - h, z + cz * r, cu, 1F, nrmx, 0F, nrmz);
117+
callback.quad(x + cx * r, y + h, z + cz * r, cu, 0F, nrmx, 0F, nrmz);
118118

119-
callback.acceptPos(x + nnx, y + h, z + nnz).acceptNormal(nnrmx, 0F, nnrmz).acceptTex(nnu, 0F);
120-
callback.acceptPos(x + nnx, y - h, z + nnz).acceptNormal(nnrmx, 0F, nnrmz).acceptTex(nnu, 1F);
121-
callback.acceptPos(x + nx, y - h, z + nz).acceptNormal(nnrmx, 0F, nnrmz).acceptTex(nu, 1F);
122-
callback.acceptPos(x + nx, y + h, z + nz).acceptNormal(nnrmx, 0F, nnrmz).acceptTex(nu, 0F);
119+
callback.quad(x + nnx * r, y + h, z + nnz * r, nnu, 0F, nnrmx, 0F, nnrmz);
120+
callback.quad(x + nnx * r, y - h, z + nnz * r, nnu, 1F, nnrmx, 0F, nnrmz);
121+
callback.quad(x + nx * r, y - h, z + nz * r, nu, 1F, nnrmx, 0F, nnrmz);
122+
callback.quad(x + nx * r, y + h, z + nz * r, nu, 0F, nnrmx, 0F, nnrmz);
123123
}
124124
}
125125
}

src/main/java/dev/latvian/mods/klib/shape/SpherePoints.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,10 @@ public void buildQuads(float x, float y, float z, float s, VertexCallback callba
106106
var ny = y + nr.y() * s;
107107
var cy = y + cr.y() * s;
108108

109-
callback.acceptPos(x + cc.x() * nr.m() * s, ny, z + cc.z() * nr.m() * s).acceptTex(u0l, v1l).acceptNormal(nv.x, nv.y, nv.z);
110-
callback.acceptPos(x + cc.x() * cr.m() * s, cy, z + cc.z() * cr.m() * s).acceptTex(u0l, v0l).acceptNormal(nv.x, nv.y, nv.z);
111-
callback.acceptPos(x + nc.x() * cr.m() * s, cy, z + nc.z() * cr.m() * s).acceptTex(u1l, v0l).acceptNormal(nv.x, nv.y, nv.z);
112-
callback.acceptPos(x + nc.x() * nr.m() * s, ny, z + nc.z() * nr.m() * s).acceptTex(u1l, v1l).acceptNormal(nv.x, nv.y, nv.z);
109+
callback.quad(x + cc.x() * nr.m() * s, ny, z + cc.z() * nr.m() * s, u0l, v1l, nv.x, nv.y, nv.z);
110+
callback.quad(x + cc.x() * cr.m() * s, cy, z + cc.z() * cr.m() * s, u0l, v0l, nv.x, nv.y, nv.z);
111+
callback.quad(x + nc.x() * cr.m() * s, cy, z + nc.z() * cr.m() * s, u1l, v0l, nv.x, nv.y, nv.z);
112+
callback.quad(x + nc.x() * nr.m() * s, ny, z + nc.z() * nr.m() * s, u1l, v1l, nv.x, nv.y, nv.z);
113113
}
114114
}
115115
}

src/main/java/dev/latvian/mods/klib/vertex/VertexCallback.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,10 @@ default VertexCallback onlyPosColTexNormal() {
113113
return new OnlyPosColTexNormalVertexCallback(this);
114114
}
115115

116+
default void quad(float x, float y, float z, float u, float v, float nx, float ny, float nz) {
117+
acceptPos(x, y, z).acceptTex(u, v).acceptNormal(nx, ny, nz);
118+
}
119+
116120
default void line(float x1, float y1, float z1, float x2, float y2, float z2, float nx, float ny, float nz) {
117121
acceptPos(x1, y1, z1).acceptNormal(nx, ny, nz);
118122
acceptPos(x2, y2, z2).acceptNormal(nx, ny, nz);

0 commit comments

Comments
 (0)