Skip to content

Commit 1a46f7b

Browse files
authored
Add dragon egg and update its model (#581)
* Add missing dragon egg block. * Update the dragon egg model.
1 parent 5c36db7 commit 1a46f7b

File tree

3 files changed

+277
-17
lines changed

3 files changed

+277
-17
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package se.llbit.chunky.block;
2+
3+
import se.llbit.chunky.model.DragonEggModel;
4+
import se.llbit.chunky.renderer.scene.Scene;
5+
import se.llbit.chunky.resources.Texture;
6+
import se.llbit.math.Ray;
7+
8+
public class DragonEgg extends MinecraftBlockTranslucent {
9+
public DragonEgg() {
10+
super("dragon_egg", Texture.dragonEgg);
11+
localIntersect = true;
12+
}
13+
14+
@Override
15+
public boolean intersect(Ray ray, Scene scene) {
16+
return DragonEggModel.intersect(ray);
17+
}
18+
}

chunky/src/java/se/llbit/chunky/block/MinecraftBlockProvider.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1340,6 +1340,8 @@ public Block getBlockByTag(String namespacedName, Tag tag) {
13401340
return skull(tag, Texture.creeper, SkullEntity.Kind.CREEPER);
13411341
case "creeper_wall_head":
13421342
return wallSkull(tag, Texture.creeper, SkullEntity.Kind.CREEPER);
1343+
case "dragon_egg":
1344+
return new DragonEgg();
13431345
case "dragon_head":
13441346
return skull(tag, Texture.steve, SkullEntity.Kind.DRAGON);
13451347
case "dragon_wall_head":

chunky/src/java/se/llbit/chunky/model/DragonEggModel.java

Lines changed: 257 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,36 +17,276 @@
1717
package se.llbit.chunky.model;
1818

1919
import se.llbit.chunky.resources.Texture;
20-
import se.llbit.math.AABB;
20+
import se.llbit.math.Quad;
2121
import se.llbit.math.Ray;
22+
import se.llbit.math.Vector3;
23+
import se.llbit.math.Vector4;
2224

2325
public class DragonEggModel {
24-
private static final AABB[] egg =
25-
new AABB[] {new AABB(5 / 16., 11 / 16., 0, 1 / 16., 5 / 16., 11 / 16.),
26-
new AABB(2 / 16., 14 / 16., 1 / 16., 3 / 16., 2 / 16., 14 / 16.),
27-
new AABB(1 / 16., 15 / 16., 3 / 16., 8 / 16., 1 / 16., 15 / 16.),
28-
new AABB(2 / 16., 14 / 16., 8 / 16., 11 / 16., 2 / 16., 14 / 16.),
29-
new AABB(3 / 16., 13 / 16., 11 / 16., 13 / 16., 3 / 16., 13 / 16.),
30-
new AABB(4 / 16., 12 / 16., 13 / 16., 14 / 16., 4 / 16., 12 / 16.),
31-
new AABB(5 / 16., 11 / 16., 14 / 16., 15 / 16., 5 / 16., 11 / 16.),
32-
new AABB(6 / 16., 10 / 16., 15 / 16., 16 / 16., 6 / 16., 10 / 16.),};
26+
private static final Quad[] quads =
27+
new Quad[] {
28+
new Quad(
29+
new Vector3(6 / 16.0, 16 / 16.0, 10 / 16.0),
30+
new Vector3(10 / 16.0, 16 / 16.0, 10 / 16.0),
31+
new Vector3(6 / 16.0, 16 / 16.0, 6 / 16.0),
32+
new Vector4(6 / 16.0, 10 / 16.0, 6 / 16.0, 10 / 16.0)),
33+
new Quad(
34+
new Vector3(6 / 16.0, 15 / 16.0, 6 / 16.0),
35+
new Vector3(10 / 16.0, 15 / 16.0, 6 / 16.0),
36+
new Vector3(6 / 16.0, 15 / 16.0, 10 / 16.0),
37+
new Vector4(6 / 16.0, 10 / 16.0, 6 / 16.0, 10 / 16.0)),
38+
new Quad(
39+
new Vector3(6 / 16.0, 16 / 16.0, 10 / 16.0),
40+
new Vector3(6 / 16.0, 16 / 16.0, 6 / 16.0),
41+
new Vector3(6 / 16.0, 15 / 16.0, 10 / 16.0),
42+
new Vector4(10 / 16.0, 6 / 16.0, 1 / 16.0, 0 / 16.0)),
43+
new Quad(
44+
new Vector3(10 / 16.0, 16 / 16.0, 6 / 16.0),
45+
new Vector3(10 / 16.0, 16 / 16.0, 10 / 16.0),
46+
new Vector3(10 / 16.0, 15 / 16.0, 6 / 16.0),
47+
new Vector4(10 / 16.0, 6 / 16.0, 1 / 16.0, 0 / 16.0)),
48+
new Quad(
49+
new Vector3(6 / 16.0, 16 / 16.0, 6 / 16.0),
50+
new Vector3(10 / 16.0, 16 / 16.0, 6 / 16.0),
51+
new Vector3(6 / 16.0, 15 / 16.0, 6 / 16.0),
52+
new Vector4(10 / 16.0, 6 / 16.0, 1 / 16.0, 0 / 16.0)),
53+
new Quad(
54+
new Vector3(10 / 16.0, 16 / 16.0, 10 / 16.0),
55+
new Vector3(6 / 16.0, 16 / 16.0, 10 / 16.0),
56+
new Vector3(10 / 16.0, 15 / 16.0, 10 / 16.0),
57+
new Vector4(10 / 16.0, 6 / 16.0, 1 / 16.0, 0 / 16.0)),
58+
new Quad(
59+
new Vector3(5 / 16.0, 15 / 16.0, 11 / 16.0),
60+
new Vector3(11 / 16.0, 15 / 16.0, 11 / 16.0),
61+
new Vector3(5 / 16.0, 15 / 16.0, 5 / 16.0),
62+
new Vector4(5 / 16.0, 11 / 16.0, 5 / 16.0, 11 / 16.0)),
63+
new Quad(
64+
new Vector3(5 / 16.0, 14 / 16.0, 5 / 16.0),
65+
new Vector3(11 / 16.0, 14 / 16.0, 5 / 16.0),
66+
new Vector3(5 / 16.0, 14 / 16.0, 11 / 16.0),
67+
new Vector4(5 / 16.0, 11 / 16.0, 5 / 16.0, 11 / 16.0)),
68+
new Quad(
69+
new Vector3(5 / 16.0, 15 / 16.0, 11 / 16.0),
70+
new Vector3(5 / 16.0, 15 / 16.0, 5 / 16.0),
71+
new Vector3(5 / 16.0, 14 / 16.0, 11 / 16.0),
72+
new Vector4(11 / 16.0, 5 / 16.0, 2 / 16.0, 1 / 16.0)),
73+
new Quad(
74+
new Vector3(11 / 16.0, 15 / 16.0, 5 / 16.0),
75+
new Vector3(11 / 16.0, 15 / 16.0, 11 / 16.0),
76+
new Vector3(11 / 16.0, 14 / 16.0, 5 / 16.0),
77+
new Vector4(11 / 16.0, 5 / 16.0, 2 / 16.0, 1 / 16.0)),
78+
new Quad(
79+
new Vector3(5 / 16.0, 15 / 16.0, 5 / 16.0),
80+
new Vector3(11 / 16.0, 15 / 16.0, 5 / 16.0),
81+
new Vector3(5 / 16.0, 14 / 16.0, 5 / 16.0),
82+
new Vector4(11 / 16.0, 5 / 16.0, 2 / 16.0, 1 / 16.0)),
83+
new Quad(
84+
new Vector3(11 / 16.0, 15 / 16.0, 11 / 16.0),
85+
new Vector3(5 / 16.0, 15 / 16.0, 11 / 16.0),
86+
new Vector3(11 / 16.0, 14 / 16.0, 11 / 16.0),
87+
new Vector4(11 / 16.0, 5 / 16.0, 2 / 16.0, 1 / 16.0)),
88+
new Quad(
89+
new Vector3(5 / 16.0, 14 / 16.0, 11 / 16.0),
90+
new Vector3(11 / 16.0, 14 / 16.0, 11 / 16.0),
91+
new Vector3(5 / 16.0, 14 / 16.0, 5 / 16.0),
92+
new Vector4(4 / 16.0, 12 / 16.0, 4 / 16.0, 12 / 16.0)),
93+
new Quad(
94+
new Vector3(5 / 16.0, 13 / 16.0, 5 / 16.0),
95+
new Vector3(11 / 16.0, 13 / 16.0, 5 / 16.0),
96+
new Vector3(5 / 16.0, 13 / 16.0, 11 / 16.0),
97+
new Vector4(4 / 16.0, 12 / 16.0, 4 / 16.0, 12 / 16.0)),
98+
new Quad(
99+
new Vector3(5 / 16.0, 14 / 16.0, 11 / 16.0),
100+
new Vector3(5 / 16.0, 14 / 16.0, 5 / 16.0),
101+
new Vector3(5 / 16.0, 13 / 16.0, 11 / 16.0),
102+
new Vector4(12 / 16.0, 4 / 16.0, 3 / 16.0, 2 / 16.0)),
103+
new Quad(
104+
new Vector3(11 / 16.0, 14 / 16.0, 5 / 16.0),
105+
new Vector3(11 / 16.0, 14 / 16.0, 11 / 16.0),
106+
new Vector3(11 / 16.0, 13 / 16.0, 5 / 16.0),
107+
new Vector4(12 / 16.0, 4 / 16.0, 3 / 16.0, 2 / 16.0)),
108+
new Quad(
109+
new Vector3(5 / 16.0, 14 / 16.0, 5 / 16.0),
110+
new Vector3(11 / 16.0, 14 / 16.0, 5 / 16.0),
111+
new Vector3(5 / 16.0, 13 / 16.0, 5 / 16.0),
112+
new Vector4(12 / 16.0, 4 / 16.0, 3 / 16.0, 2 / 16.0)),
113+
new Quad(
114+
new Vector3(11 / 16.0, 14 / 16.0, 11 / 16.0),
115+
new Vector3(5 / 16.0, 14 / 16.0, 11 / 16.0),
116+
new Vector3(11 / 16.0, 13 / 16.0, 11 / 16.0),
117+
new Vector4(12 / 16.0, 4 / 16.0, 3 / 16.0, 2 / 16.0)),
118+
new Quad(
119+
new Vector3(3 / 16.0, 13 / 16.0, 13 / 16.0),
120+
new Vector3(13 / 16.0, 13 / 16.0, 13 / 16.0),
121+
new Vector3(3 / 16.0, 13 / 16.0, 3 / 16.0),
122+
new Vector4(3 / 16.0, 13 / 16.0, 3 / 16.0, 13 / 16.0)),
123+
new Quad(
124+
new Vector3(3 / 16.0, 11 / 16.0, 3 / 16.0),
125+
new Vector3(13 / 16.0, 11 / 16.0, 3 / 16.0),
126+
new Vector3(3 / 16.0, 11 / 16.0, 13 / 16.0),
127+
new Vector4(3 / 16.0, 13 / 16.0, 3 / 16.0, 13 / 16.0)),
128+
new Quad(
129+
new Vector3(3 / 16.0, 13 / 16.0, 13 / 16.0),
130+
new Vector3(3 / 16.0, 13 / 16.0, 3 / 16.0),
131+
new Vector3(3 / 16.0, 11 / 16.0, 13 / 16.0),
132+
new Vector4(13 / 16.0, 3 / 16.0, 5 / 16.0, 3 / 16.0)),
133+
new Quad(
134+
new Vector3(13 / 16.0, 13 / 16.0, 3 / 16.0),
135+
new Vector3(13 / 16.0, 13 / 16.0, 13 / 16.0),
136+
new Vector3(13 / 16.0, 11 / 16.0, 3 / 16.0),
137+
new Vector4(13 / 16.0, 3 / 16.0, 5 / 16.0, 3 / 16.0)),
138+
new Quad(
139+
new Vector3(3 / 16.0, 13 / 16.0, 3 / 16.0),
140+
new Vector3(13 / 16.0, 13 / 16.0, 3 / 16.0),
141+
new Vector3(3 / 16.0, 11 / 16.0, 3 / 16.0),
142+
new Vector4(13 / 16.0, 3 / 16.0, 5 / 16.0, 3 / 16.0)),
143+
new Quad(
144+
new Vector3(13 / 16.0, 13 / 16.0, 13 / 16.0),
145+
new Vector3(3 / 16.0, 13 / 16.0, 13 / 16.0),
146+
new Vector3(13 / 16.0, 11 / 16.0, 13 / 16.0),
147+
new Vector4(13 / 16.0, 3 / 16.0, 5 / 16.0, 3 / 16.0)),
148+
new Quad(
149+
new Vector3(2 / 16.0, 11 / 16.0, 14 / 16.0),
150+
new Vector3(14 / 16.0, 11 / 16.0, 14 / 16.0),
151+
new Vector3(2 / 16.0, 11 / 16.0, 2 / 16.0),
152+
new Vector4(2 / 16.0, 14 / 16.0, 2 / 16.0, 14 / 16.0)),
153+
new Quad(
154+
new Vector3(2 / 16.0, 8 / 16.0, 2 / 16.0),
155+
new Vector3(14 / 16.0, 8 / 16.0, 2 / 16.0),
156+
new Vector3(2 / 16.0, 8 / 16.0, 14 / 16.0),
157+
new Vector4(2 / 16.0, 14 / 16.0, 2 / 16.0, 14 / 16.0)),
158+
new Quad(
159+
new Vector3(2 / 16.0, 11 / 16.0, 14 / 16.0),
160+
new Vector3(2 / 16.0, 11 / 16.0, 2 / 16.0),
161+
new Vector3(2 / 16.0, 8 / 16.0, 14 / 16.0),
162+
new Vector4(14 / 16.0, 2 / 16.0, 8 / 16.0, 5 / 16.0)),
163+
new Quad(
164+
new Vector3(14 / 16.0, 11 / 16.0, 2 / 16.0),
165+
new Vector3(14 / 16.0, 11 / 16.0, 14 / 16.0),
166+
new Vector3(14 / 16.0, 8 / 16.0, 2 / 16.0),
167+
new Vector4(14 / 16.0, 2 / 16.0, 8 / 16.0, 5 / 16.0)),
168+
new Quad(
169+
new Vector3(2 / 16.0, 11 / 16.0, 2 / 16.0),
170+
new Vector3(14 / 16.0, 11 / 16.0, 2 / 16.0),
171+
new Vector3(2 / 16.0, 8 / 16.0, 2 / 16.0),
172+
new Vector4(14 / 16.0, 2 / 16.0, 8 / 16.0, 5 / 16.0)),
173+
new Quad(
174+
new Vector3(14 / 16.0, 11 / 16.0, 14 / 16.0),
175+
new Vector3(2 / 16.0, 11 / 16.0, 14 / 16.0),
176+
new Vector3(14 / 16.0, 8 / 16.0, 14 / 16.0),
177+
new Vector4(14 / 16.0, 2 / 16.0, 8 / 16.0, 5 / 16.0)),
178+
new Quad(
179+
new Vector3(1 / 16.0, 8 / 16.0, 15 / 16.0),
180+
new Vector3(15 / 16.0, 8 / 16.0, 15 / 16.0),
181+
new Vector3(1 / 16.0, 8 / 16.0, 1 / 16.0),
182+
new Vector4(1 / 16.0, 15 / 16.0, 1 / 16.0, 15 / 16.0)),
183+
new Quad(
184+
new Vector3(1 / 16.0, 3 / 16.0, 1 / 16.0),
185+
new Vector3(15 / 16.0, 3 / 16.0, 1 / 16.0),
186+
new Vector3(1 / 16.0, 3 / 16.0, 15 / 16.0),
187+
new Vector4(1 / 16.0, 15 / 16.0, 1 / 16.0, 15 / 16.0)),
188+
new Quad(
189+
new Vector3(1 / 16.0, 8 / 16.0, 15 / 16.0),
190+
new Vector3(1 / 16.0, 8 / 16.0, 1 / 16.0),
191+
new Vector3(1 / 16.0, 3 / 16.0, 15 / 16.0),
192+
new Vector4(15 / 16.0, 1 / 16.0, 13 / 16.0, 8 / 16.0)),
193+
new Quad(
194+
new Vector3(15 / 16.0, 8 / 16.0, 1 / 16.0),
195+
new Vector3(15 / 16.0, 8 / 16.0, 15 / 16.0),
196+
new Vector3(15 / 16.0, 3 / 16.0, 1 / 16.0),
197+
new Vector4(15 / 16.0, 1 / 16.0, 13 / 16.0, 8 / 16.0)),
198+
new Quad(
199+
new Vector3(1 / 16.0, 8 / 16.0, 1 / 16.0),
200+
new Vector3(15 / 16.0, 8 / 16.0, 1 / 16.0),
201+
new Vector3(1 / 16.0, 3 / 16.0, 1 / 16.0),
202+
new Vector4(15 / 16.0, 1 / 16.0, 13 / 16.0, 8 / 16.0)),
203+
new Quad(
204+
new Vector3(15 / 16.0, 8 / 16.0, 15 / 16.0),
205+
new Vector3(1 / 16.0, 8 / 16.0, 15 / 16.0),
206+
new Vector3(15 / 16.0, 3 / 16.0, 15 / 16.0),
207+
new Vector4(15 / 16.0, 1 / 16.0, 13 / 16.0, 8 / 16.0)),
208+
new Quad(
209+
new Vector3(2 / 16.0, 3 / 16.0, 14 / 16.0),
210+
new Vector3(14 / 16.0, 3 / 16.0, 14 / 16.0),
211+
new Vector3(2 / 16.0, 3 / 16.0, 2 / 16.0),
212+
new Vector4(2 / 16.0, 14 / 16.0, 2 / 16.0, 14 / 16.0)),
213+
new Quad(
214+
new Vector3(2 / 16.0, 1 / 16.0, 2 / 16.0),
215+
new Vector3(14 / 16.0, 1 / 16.0, 2 / 16.0),
216+
new Vector3(2 / 16.0, 1 / 16.0, 14 / 16.0),
217+
new Vector4(2 / 16.0, 14 / 16.0, 2 / 16.0, 14 / 16.0)),
218+
new Quad(
219+
new Vector3(2 / 16.0, 3 / 16.0, 14 / 16.0),
220+
new Vector3(2 / 16.0, 3 / 16.0, 2 / 16.0),
221+
new Vector3(2 / 16.0, 1 / 16.0, 14 / 16.0),
222+
new Vector4(14 / 16.0, 2 / 16.0, 15 / 16.0, 13 / 16.0)),
223+
new Quad(
224+
new Vector3(14 / 16.0, 3 / 16.0, 2 / 16.0),
225+
new Vector3(14 / 16.0, 3 / 16.0, 14 / 16.0),
226+
new Vector3(14 / 16.0, 1 / 16.0, 2 / 16.0),
227+
new Vector4(14 / 16.0, 2 / 16.0, 15 / 16.0, 13 / 16.0)),
228+
new Quad(
229+
new Vector3(2 / 16.0, 3 / 16.0, 2 / 16.0),
230+
new Vector3(14 / 16.0, 3 / 16.0, 2 / 16.0),
231+
new Vector3(2 / 16.0, 1 / 16.0, 2 / 16.0),
232+
new Vector4(14 / 16.0, 2 / 16.0, 15 / 16.0, 13 / 16.0)),
233+
new Quad(
234+
new Vector3(14 / 16.0, 3 / 16.0, 14 / 16.0),
235+
new Vector3(2 / 16.0, 3 / 16.0, 14 / 16.0),
236+
new Vector3(14 / 16.0, 1 / 16.0, 14 / 16.0),
237+
new Vector4(14 / 16.0, 2 / 16.0, 15 / 16.0, 13 / 16.0)),
238+
new Quad(
239+
new Vector3(3 / 16.0, 1 / 16.0, 13 / 16.0),
240+
new Vector3(13 / 16.0, 1 / 16.0, 13 / 16.0),
241+
new Vector3(3 / 16.0, 1 / 16.0, 3 / 16.0),
242+
new Vector4(3 / 16.0, 13 / 16.0, 3 / 16.0, 13 / 16.0)),
243+
new Quad(
244+
new Vector3(3 / 16.0, 0 / 16.0, 3 / 16.0),
245+
new Vector3(13 / 16.0, 0 / 16.0, 3 / 16.0),
246+
new Vector3(3 / 16.0, 0 / 16.0, 13 / 16.0),
247+
new Vector4(3 / 16.0, 13 / 16.0, 3 / 16.0, 13 / 16.0)),
248+
new Quad(
249+
new Vector3(3 / 16.0, 1 / 16.0, 13 / 16.0),
250+
new Vector3(3 / 16.0, 1 / 16.0, 3 / 16.0),
251+
new Vector3(3 / 16.0, 0 / 16.0, 13 / 16.0),
252+
new Vector4(13 / 16.0, 3 / 16.0, 16 / 16.0, 15 / 16.0)),
253+
new Quad(
254+
new Vector3(13 / 16.0, 1 / 16.0, 3 / 16.0),
255+
new Vector3(13 / 16.0, 1 / 16.0, 13 / 16.0),
256+
new Vector3(13 / 16.0, 0 / 16.0, 3 / 16.0),
257+
new Vector4(13 / 16.0, 3 / 16.0, 16 / 16.0, 15 / 16.0)),
258+
new Quad(
259+
new Vector3(3 / 16.0, 1 / 16.0, 3 / 16.0),
260+
new Vector3(13 / 16.0, 1 / 16.0, 3 / 16.0),
261+
new Vector3(3 / 16.0, 0 / 16.0, 3 / 16.0),
262+
new Vector4(13 / 16.0, 3 / 16.0, 16 / 16.0, 15 / 16.0)),
263+
new Quad(
264+
new Vector3(13 / 16.0, 1 / 16.0, 13 / 16.0),
265+
new Vector3(3 / 16.0, 1 / 16.0, 13 / 16.0),
266+
new Vector3(13 / 16.0, 0 / 16.0, 13 / 16.0),
267+
new Vector4(13 / 16.0, 3 / 16.0, 16 / 16.0, 15 / 16.0))
268+
};
33269

34270
public static boolean intersect(Ray ray) {
35271
boolean hit = false;
36272
ray.t = Double.POSITIVE_INFINITY;
37-
for (AABB eggPart : egg) {
38-
if (eggPart.intersect(ray)) {
39-
Texture.dragonEgg.getColor(ray);
40-
ray.t = ray.tNext;
41-
hit = true;
273+
274+
for (Quad quad : quads) {
275+
if (quad.intersect(ray)) {
276+
float[] color = Texture.dragonEgg.getColor(ray.u, ray.v);
277+
if (color[3] > Ray.EPSILON) {
278+
ray.color.set(color);
279+
ray.t = ray.tNext;
280+
ray.n.set(quad.n);
281+
hit = true;
282+
}
42283
}
43284
}
285+
44286
if (hit) {
45-
ray.color.w = 1;
46287
ray.distance += ray.t;
47288
ray.o.scaleAdd(ray.t, ray.d);
48289
}
49290
return hit;
50291
}
51-
52292
}

0 commit comments

Comments
 (0)