Skip to content

Commit 773773f

Browse files
committed
Added framework to the tesseract model along with changing the animation into a double rotation along the XY and YW rotation planes.
1 parent 926dfbe commit 773773f

File tree

4 files changed

+309
-154
lines changed

4 files changed

+309
-154
lines changed

src/main/java/org/dimdev/dimdoors/client/TileEntityFloatingRiftRenderer.java

Lines changed: 4 additions & 154 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.flowpowered.math.vector.Vector4f;
66
import org.dimdev.ddutils.RGBA;
77
import org.dimdev.dimdoors.DimDoors;
8+
import org.dimdev.dimdoors.client.tesseract.Tesseract;
89
import org.dimdev.dimdoors.shared.tileentities.TileEntityFloatingRift;
910
import net.minecraft.client.renderer.BufferBuilder;
1011
import net.minecraft.client.renderer.GlStateManager;
@@ -20,127 +21,7 @@
2021
public class TileEntityFloatingRiftRenderer extends TileEntitySpecialRenderer<TileEntityFloatingRift> {
2122
private static final ResourceLocation tesseract_path = new ResourceLocation(DimDoors.MODID + ":textures/other/tesseract.png");
2223

23-
private static final Vector4f[] tesseract = {
24-
new Vector4f(-0.5f,-0.5f,-0.5f,-0.5f),
25-
new Vector4f(0.5f,-0.5f,-0.5f,-0.5f),
26-
new Vector4f(0.5f,-0.5f,0.5f,-0.5f),
27-
new Vector4f(-0.5f,-0.5f,0.5f,-0.5f),
28-
29-
new Vector4f(-0.5f,0.5f,-0.5f,-0.5f),
30-
new Vector4f(0.5f,0.5f,-0.5f,-0.5f),
31-
new Vector4f(0.5f,0.5f,0.5f,-0.5f),
32-
new Vector4f(-0.5f,0.5f,0.5f,-0.5f),
33-
34-
new Vector4f(-0.5f,-0.5f,-0.5f,-0.5f),
35-
new Vector4f(0.5f,-0.5f,-0.5f,-0.5f),
36-
new Vector4f(0.5f,0.5f,-0.5f,-0.5f),
37-
new Vector4f(-0.5f,0.5f,-0.5f,-0.5f),
38-
39-
new Vector4f(-0.5f,-0.5f,0.5f,-0.5f),
40-
new Vector4f(0.5f,-0.5f,0.5f,-0.5f),
41-
new Vector4f(0.5f,0.5f,0.5f,-0.5f),
42-
new Vector4f(-0.5f,0.5f,0.5f,-0.5f),
43-
44-
new Vector4f(-0.5f,-0.5f,-0.5f,-0.5f),
45-
new Vector4f(-0.5f,0.5f,-0.5f,-0.5f),
46-
new Vector4f(-0.5f,0.5f,0.5f,-0.5f),
47-
new Vector4f(-0.5f,-0.5f,0.5f,-0.5f),
48-
49-
new Vector4f(0.5f,-0.5f,-0.5f,-0.5f),
50-
new Vector4f(0.5f,0.5f,-0.5f,-0.5f),
51-
new Vector4f(0.5f,0.5f,0.5f,-0.5f),
52-
new Vector4f(0.5f,-0.5f,0.5f,-0.5f),
53-
54-
new Vector4f(-0.5f,-0.5f,-0.5f,0.5f),
55-
new Vector4f(0.5f,-0.5f,-0.5f,0.5f),
56-
new Vector4f(0.5f,-0.5f,0.5f,0.5f),
57-
new Vector4f(-0.5f,-0.5f,0.5f,0.5f),
58-
59-
new Vector4f(-0.5f,0.5f,-0.5f,0.5f),
60-
new Vector4f(0.5f,0.5f,-0.5f,0.5f),
61-
new Vector4f(0.5f,0.5f,0.5f,0.5f),
62-
new Vector4f(-0.5f,0.5f,0.5f,0.5f),
63-
64-
new Vector4f(-0.5f,-0.5f,-0.5f,0.5f),
65-
new Vector4f(0.5f,-0.5f,-0.5f,0.5f),
66-
new Vector4f(0.5f,0.5f,-0.5f,0.5f),
67-
new Vector4f(-0.5f,0.5f,-0.5f,0.5f),
68-
69-
new Vector4f(-0.5f,-0.5f,0.5f,0.5f),
70-
new Vector4f(0.5f,-0.5f,0.5f,0.5f),
71-
new Vector4f(0.5f,0.5f,0.5f,0.5f),
72-
new Vector4f(-0.5f,0.5f,0.5f,0.5f),
73-
74-
new Vector4f(-0.5f,-0.5f,-0.5f,0.5f),
75-
new Vector4f(-0.5f,0.5f,-0.5f,0.5f),
76-
new Vector4f(-0.5f,0.5f,0.5f,0.5f),
77-
new Vector4f(-0.5f,-0.5f,0.5f,0.5f),
78-
79-
new Vector4f(0.5f,-0.5f,-0.5f,0.5f),
80-
new Vector4f(0.5f,0.5f,-0.5f,0.5f),
81-
new Vector4f(0.5f,0.5f,0.5f,0.5f),
82-
new Vector4f(0.5f,-0.5f,0.5f,0.5f),
83-
84-
new Vector4f(-0.5f,-0.5f,-0.5f,-0.5f),
85-
new Vector4f(-0.5f,0.5f,-0.5f,-0.5f),
86-
new Vector4f(-0.5f,0.5f,-0.5f,0.5f),
87-
new Vector4f(-0.5f,-0.5f,-0.5f,0.5f),
88-
89-
new Vector4f(-0.5f,-0.5f,0.5f,-0.5f),
90-
new Vector4f(-0.5f,0.5f,0.5f,-0.5f),
91-
new Vector4f(-0.5f,0.5f,0.5f,0.5f),
92-
new Vector4f(-0.5f,-0.5f,0.5f,0.5f),
93-
94-
new Vector4f(-0.5f,-0.5f,-0.5f,-0.5f),
95-
new Vector4f(-0.5f,0.5f,-0.5f,-0.5f),
96-
new Vector4f(-0.5f,0.5f,0.5f,-0.5f),
97-
new Vector4f(-0.5f,-0.5f,0.5f,-0.5f),
98-
99-
new Vector4f(-0.5f,-0.5f,-0.5f,0.5f),
100-
new Vector4f(-0.5f,0.5f,-0.5f,0.5f),
101-
new Vector4f(-0.5f,0.5f,0.5f,0.5f),
102-
new Vector4f(-0.5f,-0.5f,0.5f,0.5f),
103-
104-
new Vector4f(-0.5f,-0.5f,-0.5f,-0.5f),
105-
new Vector4f(-0.5f,-0.5f,0.5f,-0.5f),
106-
new Vector4f(-0.5f,-0.5f,0.5f,0.5f),
107-
new Vector4f(-0.5f,-0.5f,-0.5f,0.5f),
108-
109-
new Vector4f(-0.5f,0.5f,-0.5f,-0.5f),
110-
new Vector4f(-0.5f,0.5f,0.5f,-0.5f),
111-
new Vector4f(-0.5f,0.5f,0.5f,0.5f),
112-
new Vector4f(-0.5f,0.5f,-0.5f,0.5f),
113-
114-
new Vector4f(0.5f,-0.5f,-0.5f,-0.5f),
115-
new Vector4f(0.5f,0.5f,-0.5f,-0.5f),
116-
new Vector4f(0.5f,0.5f,-0.5f,0.5f),
117-
new Vector4f(0.5f,-0.5f,-0.5f,0.5f),
118-
119-
new Vector4f(0.5f,-0.5f,0.5f,-0.5f),
120-
new Vector4f(0.5f,0.5f,0.5f,-0.5f),
121-
new Vector4f(0.5f,0.5f,0.5f,0.5f),
122-
new Vector4f(0.5f,-0.5f,0.5f,0.5f),
123-
124-
new Vector4f(0.5f,-0.5f,-0.5f,-0.5f),
125-
new Vector4f(0.5f,0.5f,-0.5f,-0.5f),
126-
new Vector4f(0.5f,0.5f,0.5f,-0.5f),
127-
new Vector4f(0.5f,-0.5f,0.5f,-0.5f),
128-
129-
new Vector4f(0.5f,-0.5f,-0.5f,0.5f),
130-
new Vector4f(0.5f,0.5f,-0.5f,0.5f),
131-
new Vector4f(0.5f,0.5f,0.5f,0.5f),
132-
new Vector4f(0.5f,-0.5f,0.5f,0.5f),
133-
134-
new Vector4f(0.5f,-0.5f,-0.5f,-0.5f),
135-
new Vector4f(0.5f,-0.5f,0.5f,-0.5f),
136-
new Vector4f(0.5f,-0.5f,0.5f,0.5f),
137-
new Vector4f(0.5f,-0.5f,-0.5f,0.5f),
138-
139-
new Vector4f(0.5f,0.5f,-0.5f,-0.5f),
140-
new Vector4f(0.5f,0.5f,0.5f,-0.5f),
141-
new Vector4f(0.5f,0.5f,0.5f,0.5f),
142-
new Vector4f(0.5f,0.5f,-0.5f,0.5f)
143-
};
24+
private static final Tesseract tesseract = new Tesseract();
14425

14526
/**
14627
* Renders the rift.
@@ -161,18 +42,7 @@ public void render(TileEntityFloatingRift te, double x, double y, double z, floa
16142
GlStateManager.translate(x+0.5,y+0.5,z+0.5);
16243
GlStateManager.scale(0.25,0.25,0.25);
16344

164-
Tessellator tessellator = Tessellator.getInstance();
165-
BufferBuilder worldRenderer = tessellator.getBuffer();
166-
167-
for (int i = 0; i < tesseract.length; i+=4) {
168-
worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
169-
GlStateManager.color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha());
170-
project(worldRenderer, rotation(tesseract[i], radian),0,0, color);
171-
project(worldRenderer, rotation(tesseract[i+1], radian),0,1, color);
172-
project(worldRenderer, rotation(tesseract[i+2], radian),1,1, color);
173-
project(worldRenderer, rotation(tesseract[i+3], radian),1,0, color);
174-
tessellator.draw();
175-
}
45+
tesseract.draw(color, radian);
17646

17747
GlStateManager.disableBlend();
17848
GlStateManager.enableCull();
@@ -181,27 +51,7 @@ public void render(TileEntityFloatingRift te, double x, double y, double z, floa
18151
}
18252

18353
private double update(TileEntityFloatingRift te, float partialTicks) {
184-
te.renderAngle = (te.renderAngle + 1 * partialTicks) % 360;
54+
te.renderAngle = (te.renderAngle + 5 * partialTicks) % 360;
18555
return te.renderAngle;
18656
}
187-
188-
private Vector4f rotation(Vector4f v, double angle) {
189-
double x = v.getX();
190-
double y = v.getY();
191-
double z = v.getZ();
192-
double w = v.getW();
193-
194-
return new Vector4f(
195-
x * TrigMath.cos(angle) - y * TrigMath.sin(angle),
196-
x * TrigMath.sin(angle) + y * TrigMath.cos(angle),
197-
z * TrigMath.cos(angle) - w * TrigMath.sin(angle),
198-
z * TrigMath.sin(angle) + w * TrigMath.cos(angle));
199-
}
200-
201-
private void project(BufferBuilder buffer, Vector4f vector, int u, int v, RGBA color) {
202-
double scalar = 1d/(vector.getW()+1d);
203-
Vector3f vector1 = vector.toVector3().mul(scalar);
204-
205-
buffer.pos(vector1.getX(), vector1.getY(), vector1.getZ()).tex(u,v).color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()).endVertex();
206-
}
20757
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.dimdev.dimdoors.client.tesseract;
2+
3+
import com.flowpowered.math.vector.Vector4f;
4+
import net.minecraftforge.fml.relauncher.Side;
5+
import net.minecraftforge.fml.relauncher.SideOnly;
6+
import org.dimdev.ddutils.RGBA;
7+
8+
public class Cube {
9+
Plane[] planes = new Plane[6];
10+
11+
public Cube(Vector4f first, Vector4f second, Vector4f third, Vector4f fourth, Vector4f fifth, Vector4f sixth, Vector4f seventh, Vector4f eighth) {
12+
planes[0] = new Plane(first, second, third, fourth);
13+
planes[1] = new Plane(fifth, sixth, seventh, eighth);
14+
planes[2] = new Plane(first, third, fifth, seventh);
15+
planes[3] = new Plane(third, fourth, seventh, eighth);
16+
planes[4] = new Plane(second, fourth, sixth, eighth);
17+
planes[5] = new Plane(first, second, fifth, sixth);
18+
}
19+
20+
@SideOnly(Side.CLIENT)
21+
public void draw(RGBA color, double radian) {
22+
for(Plane plane : planes) {
23+
plane.draw(color, radian);
24+
}
25+
}
26+
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package org.dimdev.dimdoors.client.tesseract;
2+
3+
import com.flowpowered.math.TrigMath;
4+
import com.flowpowered.math.matrix.Matrix4d;
5+
import com.flowpowered.math.matrix.Matrix4f;
6+
import com.flowpowered.math.vector.Vector3d;
7+
import com.flowpowered.math.vector.Vector3f;
8+
import com.flowpowered.math.vector.Vector4d;
9+
import com.flowpowered.math.vector.Vector4f;
10+
import net.minecraft.client.renderer.BufferBuilder;
11+
import net.minecraft.client.renderer.GlStateManager;
12+
import net.minecraft.client.renderer.Tessellator;
13+
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
14+
import net.minecraftforge.fml.relauncher.Side;
15+
import net.minecraftforge.fml.relauncher.SideOnly;
16+
import org.dimdev.ddutils.RGBA;
17+
import org.lwjgl.opengl.GL11;
18+
19+
import static com.flowpowered.math.TrigMath.cos;
20+
import static com.flowpowered.math.TrigMath.sin;
21+
22+
public class Plane {
23+
24+
Vector4f[] vectors;
25+
26+
public Plane(Vector4f first, Vector4f second, Vector4f third, Vector4f foruth) {
27+
vectors = new Vector4f[] {first, second, third, foruth};
28+
}
29+
30+
@SideOnly(Side.CLIENT)
31+
public void draw(RGBA color, double radian) {
32+
Tessellator tessellator = Tessellator.getInstance();
33+
BufferBuilder worldRenderer = tessellator.getBuffer();
34+
35+
worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
36+
GlStateManager.color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha());
37+
project(worldRenderer, rotYW(vectors[0], radian),0,0, color);
38+
project(worldRenderer, rotYW(vectors[1], radian),0,1, color);
39+
project(worldRenderer, rotYW(vectors[2], radian),1,1, color);
40+
project(worldRenderer, rotYW(vectors[3], radian),1,0, color);
41+
tessellator.draw();
42+
}
43+
44+
private static Vector4f rotXW(Vector4f v, double angle) {
45+
return Matrix4f.from(
46+
cos(angle),0,0,sin(angle),
47+
0,1,0,0,
48+
0,0, 1, 0,
49+
-sin(angle),0, 0,cos(angle))
50+
.transform(v);
51+
}
52+
53+
private static Vector4f rotZW(Vector4f v, double angle) {
54+
return Matrix4f.from(
55+
1,0,0,0,
56+
0,1,0,0,
57+
0,0,cos(angle),-sin(angle),
58+
0,0,sin(angle),cos(angle))
59+
.transform(v);
60+
}
61+
62+
private static Vector4f rotYW(Vector4f v, double angle) {
63+
return Matrix4f.from(
64+
1,0,0,0,
65+
0,cos(angle),0,sin(angle),
66+
0,0,1,0,
67+
0,-sin(angle),0,cos(angle))
68+
.transform(v);
69+
}
70+
71+
private static Vector4f rotXY(Vector4f v, double angle) {
72+
return Matrix4f.from(
73+
cos(angle),-sin(angle),0,0,
74+
sin(angle),cos(angle),0,0,
75+
0,0,1,0,
76+
0,0,0,1)
77+
.transform(v);
78+
}
79+
80+
81+
@SideOnly(Side.CLIENT)
82+
private static void project(BufferBuilder buffer, Vector4f vector, int u, int v, RGBA color) {
83+
double scalar = 1d/(vector.getW()+1);
84+
Vector3f vector1 = vector.toVector3().mul(scalar);
85+
86+
buffer.pos(vector1.getX(), vector1.getY(), vector1.getZ()).tex(u,v).color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()).endVertex();
87+
}
88+
89+
90+
}

0 commit comments

Comments
 (0)