mirror of
https://github.com/Creators-of-Create/Create.git
synced 2025-03-04 06:44:40 +01:00
Scrolling into the distance
- Import models from Kryppers - Add scrolling animation to belts on large bogeys - Duplicate scrolling instance to extend TransformedInstance so it can actually be used in a bogey
This commit is contained in:
parent
8bdb6a662f
commit
5f1c96d3c8
14 changed files with 557 additions and 1184 deletions
|
@ -158,6 +158,7 @@ public class AllPartialModels {
|
|||
BOGEY_FRAME = block("track/bogey/bogey_frame"), SMALL_BOGEY_WHEELS = block("track/bogey/bogey_wheel"),
|
||||
BOGEY_PIN = block("track/bogey/bogey_drive_wheel_pin"), BOGEY_PISTON = block("track/bogey/bogey_drive_piston"),
|
||||
BOGEY_DRIVE = block("track/bogey/bogey_drive"), LARGE_BOGEY_WHEELS = block("track/bogey/bogey_drive_wheel"),
|
||||
BOGEY_DRIVE_BELT = block("track/bogey/bogey_drive_belt"),
|
||||
|
||||
TRAIN_COUPLING_HEAD = block("track/bogey/coupling_head"),
|
||||
TRAIN_COUPLING_CABLE = block("track/bogey/coupling_cable"),
|
||||
|
|
|
@ -94,6 +94,8 @@ public class AllSpriteShifts {
|
|||
ANDESIDE_BELT_CASING = get("block/belt/brass_belt_casing", "block/belt/andesite_belt_casing"),
|
||||
CRAFTER_THINGIES = get("block/crafter_thingies", "block/crafter_thingies");
|
||||
|
||||
public static final SpriteShiftEntry BOGEY_BELT = get("block/bogey/belt", "block/bogey/belt_scroll");
|
||||
|
||||
static {
|
||||
populateMaps();
|
||||
}
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
package com.simibubi.create.content.processing.burner;
|
||||
|
||||
import org.joml.Quaternionf;
|
||||
import org.joml.Quaternionfc;
|
||||
|
||||
import dev.engine_room.flywheel.api.instance.InstanceHandle;
|
||||
import dev.engine_room.flywheel.api.instance.InstanceType;
|
||||
import dev.engine_room.flywheel.lib.instance.TransformedInstance;
|
||||
import net.createmod.catnip.render.SpriteShiftEntry;
|
||||
import net.minecraft.core.Vec3i;
|
||||
|
||||
public class ScrollTransformedInstance extends TransformedInstance {
|
||||
public float speedU;
|
||||
public float speedV;
|
||||
|
||||
public float offsetU;
|
||||
public float offsetV;
|
||||
|
||||
public float diffU;
|
||||
public float diffV;
|
||||
|
||||
public float scaleU;
|
||||
public float scaleV;
|
||||
|
||||
public ScrollTransformedInstance(InstanceType<? extends TransformedInstance> type, InstanceHandle handle) {
|
||||
super(type, handle);
|
||||
}
|
||||
|
||||
public ScrollTransformedInstance setSpriteShift(SpriteShiftEntry spriteShift) {
|
||||
return setSpriteShift(spriteShift, 0.5f, 0.5f);
|
||||
}
|
||||
public ScrollTransformedInstance setSpriteShift(SpriteShiftEntry spriteShift, float factorU, float factorV) {
|
||||
float spriteWidth = spriteShift.getTarget()
|
||||
.getU1()
|
||||
- spriteShift.getTarget()
|
||||
.getU0();
|
||||
|
||||
float spriteHeight = spriteShift.getTarget()
|
||||
.getV1()
|
||||
- spriteShift.getTarget()
|
||||
.getV0();
|
||||
|
||||
scaleU = spriteWidth * factorU;
|
||||
scaleV = spriteHeight * factorV;
|
||||
|
||||
diffU = spriteShift.getTarget().getU0() - spriteShift.getOriginal().getU0();
|
||||
diffV = spriteShift.getTarget().getV0() - spriteShift.getOriginal().getV0();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public ScrollTransformedInstance speed(float speedU, float speedV) {
|
||||
this.speedU = speedU;
|
||||
this.speedV = speedV;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ScrollTransformedInstance offset(float offsetU, float offsetV) {
|
||||
this.offsetU = offsetU;
|
||||
this.offsetV = offsetV;
|
||||
return this;
|
||||
}
|
||||
}
|
|
@ -4,6 +4,7 @@ import com.mojang.blaze3d.vertex.PoseStack;
|
|||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||
import com.simibubi.create.AllBlocks;
|
||||
import com.simibubi.create.AllPartialModels;
|
||||
import com.simibubi.create.AllSpriteShifts;
|
||||
import com.simibubi.create.content.kinetics.simpleRelays.ShaftBlock;
|
||||
|
||||
import net.createmod.catnip.render.CachedBuffers;
|
||||
|
@ -14,6 +15,7 @@ import net.minecraft.client.renderer.MultiBufferSource;
|
|||
import net.minecraft.client.renderer.RenderType;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.util.Mth;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
|
||||
public class StandardBogeyRenderer implements BogeyRenderer {
|
||||
|
@ -59,6 +61,9 @@ public class StandardBogeyRenderer implements BogeyRenderer {
|
|||
}
|
||||
|
||||
public static class Large extends StandardBogeyRenderer {
|
||||
public static final float BELT_RADIUS_PX = 5f;
|
||||
public static final float BELT_RADIUS_IN_UV_SPACE = BELT_RADIUS_PX / 16f;
|
||||
|
||||
@Override
|
||||
public void render(CompoundTag bogeyData, float wheelAngle, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int light, int overlay, boolean inContraption) {
|
||||
super.render(bogeyData, wheelAngle, partialTick, poseStack, bufferSource, light, overlay, inContraption);
|
||||
|
@ -83,6 +88,22 @@ public class StandardBogeyRenderer implements BogeyRenderer {
|
|||
.overlay(overlay)
|
||||
.renderInto(poseStack, buffer);
|
||||
|
||||
float spriteSize = AllSpriteShifts.BOGEY_BELT.getTarget()
|
||||
.getV1()
|
||||
- AllSpriteShifts.BOGEY_BELT.getTarget()
|
||||
.getV0();
|
||||
|
||||
float scroll = BELT_RADIUS_IN_UV_SPACE * Mth.DEG_TO_RAD * wheelAngle;
|
||||
scroll = scroll - Mth.floor(scroll);
|
||||
scroll = scroll * spriteSize * 0.5f;
|
||||
|
||||
CachedBuffers.partial(AllPartialModels.BOGEY_DRIVE_BELT, Blocks.AIR.defaultBlockState())
|
||||
.scale(1 - 1 / 512f)
|
||||
.light(light)
|
||||
.overlay(overlay)
|
||||
.shiftUVScrolling(AllSpriteShifts.BOGEY_BELT, scroll)
|
||||
.renderInto(poseStack, buffer);
|
||||
|
||||
CachedBuffers.partial(AllPartialModels.BOGEY_PISTON, Blocks.AIR.defaultBlockState())
|
||||
.translate(0, 0, 1 / 4f * Math.sin(AngleHelper.rad(wheelAngle)))
|
||||
.light(light)
|
||||
|
|
|
@ -6,6 +6,9 @@ import org.jetbrains.annotations.Nullable;
|
|||
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.simibubi.create.AllPartialModels;
|
||||
import com.simibubi.create.AllSpriteShifts;
|
||||
import com.simibubi.create.content.processing.burner.ScrollTransformedInstance;
|
||||
import com.simibubi.create.foundation.render.AllInstanceTypes;
|
||||
|
||||
import dev.engine_room.flywheel.api.instance.Instance;
|
||||
import dev.engine_room.flywheel.api.visualization.VisualizationContext;
|
||||
|
@ -15,6 +18,7 @@ import dev.engine_room.flywheel.lib.model.Models;
|
|||
import net.createmod.catnip.math.AngleHelper;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.util.Mth;
|
||||
|
||||
public class StandardBogeyVisual implements BogeyVisual {
|
||||
private final TransformedInstance shaft1;
|
||||
|
@ -139,6 +143,7 @@ public class StandardBogeyVisual implements BogeyVisual {
|
|||
private final TransformedInstance secondaryShaft1;
|
||||
private final TransformedInstance secondaryShaft2;
|
||||
private final TransformedInstance drive;
|
||||
private final ScrollTransformedInstance belt;
|
||||
private final TransformedInstance piston;
|
||||
private final TransformedInstance wheels;
|
||||
private final TransformedInstance pin;
|
||||
|
@ -152,6 +157,9 @@ public class StandardBogeyVisual implements BogeyVisual {
|
|||
drive = ctx.instancerProvider()
|
||||
.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.BOGEY_DRIVE))
|
||||
.createInstance();
|
||||
belt = ctx.instancerProvider()
|
||||
.instancer(AllInstanceTypes.SCROLLING_TRANSFORMED, Models.partial(AllPartialModels.BOGEY_DRIVE_BELT))
|
||||
.createInstance();
|
||||
piston = ctx.instancerProvider()
|
||||
.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.BOGEY_PISTON))
|
||||
.createInstance();
|
||||
|
@ -161,6 +169,8 @@ public class StandardBogeyVisual implements BogeyVisual {
|
|||
pin = ctx.instancerProvider()
|
||||
.instancer(InstanceTypes.TRANSFORMED, Models.partial(AllPartialModels.BOGEY_PIN))
|
||||
.createInstance();
|
||||
|
||||
belt.setSpriteShift(AllSpriteShifts.BOGEY_BELT);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -183,6 +193,10 @@ public class StandardBogeyVisual implements BogeyVisual {
|
|||
drive.setTransform(poseStack)
|
||||
.scale(1 - 1/512f)
|
||||
.setChanged();
|
||||
belt.offset(0, StandardBogeyRenderer.Large.BELT_RADIUS_IN_UV_SPACE * Mth.DEG_TO_RAD * wheelAngle)
|
||||
.setTransform(poseStack)
|
||||
.scale(1 - 1/512f)
|
||||
.setChanged();
|
||||
piston.setTransform(poseStack)
|
||||
.translate(0, 0, 1 / 4f * Math.sin(AngleHelper.rad(wheelAngle)))
|
||||
.setChanged();
|
||||
|
@ -205,6 +219,7 @@ public class StandardBogeyVisual implements BogeyVisual {
|
|||
secondaryShaft2.setZeroTransform().setChanged();
|
||||
wheels.setZeroTransform().setChanged();
|
||||
drive.setZeroTransform().setChanged();
|
||||
belt.setZeroTransform().setChanged();
|
||||
piston.setZeroTransform().setChanged();
|
||||
pin.setZeroTransform().setChanged();
|
||||
}
|
||||
|
@ -216,6 +231,7 @@ public class StandardBogeyVisual implements BogeyVisual {
|
|||
secondaryShaft2.light(packedLight).setChanged();
|
||||
wheels.light(packedLight).setChanged();
|
||||
drive.light(packedLight).setChanged();
|
||||
belt.light(packedLight).setChanged();
|
||||
piston.light(packedLight).setChanged();
|
||||
pin.light(packedLight).setChanged();
|
||||
}
|
||||
|
@ -227,6 +243,7 @@ public class StandardBogeyVisual implements BogeyVisual {
|
|||
consumer.accept(secondaryShaft2);
|
||||
consumer.accept(wheels);
|
||||
consumer.accept(drive);
|
||||
consumer.accept(belt);
|
||||
consumer.accept(piston);
|
||||
consumer.accept(pin);
|
||||
}
|
||||
|
@ -238,6 +255,7 @@ public class StandardBogeyVisual implements BogeyVisual {
|
|||
secondaryShaft2.delete();
|
||||
wheels.delete();
|
||||
drive.delete();
|
||||
belt.delete();
|
||||
piston.delete();
|
||||
pin.delete();
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import org.lwjgl.system.MemoryUtil;
|
|||
|
||||
import com.simibubi.create.content.kinetics.base.RotatingInstance;
|
||||
import com.simibubi.create.content.processing.burner.ScrollInstance;
|
||||
import com.simibubi.create.content.processing.burner.ScrollTransformedInstance;
|
||||
|
||||
import dev.engine_room.flywheel.api.instance.InstanceType;
|
||||
import dev.engine_room.flywheel.api.layout.FloatRepr;
|
||||
|
@ -87,6 +88,41 @@ public class AllInstanceTypes {
|
|||
})
|
||||
.build();
|
||||
|
||||
// TODO: Switch everything to this? Right now it's only used for bogey belts.
|
||||
// It takes a decent few more bytes to represent but perhaps it can be packed
|
||||
// down into 96 by sacrificing precision
|
||||
public static final InstanceType<ScrollTransformedInstance> SCROLLING_TRANSFORMED = SimpleInstanceType.builder(ScrollTransformedInstance::new)
|
||||
.cullShader(asResource("instance/cull/scrolling_transformed.glsl"))
|
||||
.vertexShader(asResource("instance/scrolling_transformed.vert"))
|
||||
.layout(LayoutBuilder.create()
|
||||
.matrix("pose", FloatRepr.FLOAT, 4)
|
||||
.vector("color", FloatRepr.NORMALIZED_UNSIGNED_BYTE, 4)
|
||||
.vector("light", IntegerRepr.SHORT, 2)
|
||||
.vector("overlay", IntegerRepr.SHORT, 2)
|
||||
.vector("speed", FloatRepr.FLOAT, 2)
|
||||
.vector("diff", FloatRepr.FLOAT, 2)
|
||||
.vector("scale", FloatRepr.FLOAT, 2)
|
||||
.vector("offset", FloatRepr.FLOAT, 2)
|
||||
.build())
|
||||
.writer((ptr, instance) -> {
|
||||
ExtraMemoryOps.putMatrix4f(ptr, instance.pose);
|
||||
MemoryUtil.memPutByte(ptr + 64, instance.red);
|
||||
MemoryUtil.memPutByte(ptr + 65, instance.green);
|
||||
MemoryUtil.memPutByte(ptr + 66, instance.blue);
|
||||
MemoryUtil.memPutByte(ptr + 67, instance.alpha);
|
||||
ExtraMemoryOps.put2x16(ptr + 68, instance.light);
|
||||
ExtraMemoryOps.put2x16(ptr + 72, instance.overlay);
|
||||
MemoryUtil.memPutFloat(ptr + 76, instance.speedU);
|
||||
MemoryUtil.memPutFloat(ptr + 80, instance.speedV);
|
||||
MemoryUtil.memPutFloat(ptr + 84, instance.diffU);
|
||||
MemoryUtil.memPutFloat(ptr + 88, instance.diffV);
|
||||
MemoryUtil.memPutFloat(ptr + 92, instance.scaleU);
|
||||
MemoryUtil.memPutFloat(ptr + 96, instance.scaleV);
|
||||
MemoryUtil.memPutFloat(ptr + 100, instance.offsetU);
|
||||
MemoryUtil.memPutFloat(ptr + 104, instance.offsetV);
|
||||
})
|
||||
.build();
|
||||
|
||||
public static void init() {
|
||||
// noop
|
||||
}
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
#include "flywheel:util/matrix.glsl"
|
||||
|
||||
void flw_transformBoundingSphere(in FlwInstance i, inout vec3 center, inout float radius) {
|
||||
transformBoundingSphere(i.pose, center, radius);
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
#include "flywheel:util/matrix.glsl"
|
||||
|
||||
void flw_instanceVertex(in FlwInstance instance) {
|
||||
flw_vertexPos = instance.pose * flw_vertexPos;
|
||||
flw_vertexNormal = mat3(transpose(inverse(instance.pose))) * flw_vertexNormal;
|
||||
|
||||
vec2 scroll = fract(instance.speed * flw_renderTicks + instance.offset) * instance.scale;
|
||||
|
||||
flw_vertexTexCoord = flw_vertexTexCoord + instance.diff + scroll;
|
||||
flw_vertexOverlay = instance.overlay;
|
||||
flw_vertexLight = max(vec2(instance.light) / 256., flw_vertexLight);
|
||||
}
|
|
@ -1,8 +1,5 @@
|
|||
# Blender MTL File: 'Bogey.blend'
|
||||
# Material Count: 4
|
||||
|
||||
newmtl Belts
|
||||
map_Kd #belt
|
||||
# Blender 4.3.2 MTL File: 'Bogey.blend'
|
||||
# www.blender.org
|
||||
|
||||
newmtl Bogey_Body
|
||||
map_Kd #bogey
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"parent": "create:block/track/bogey/textures",
|
||||
"loader": "forge:obj",
|
||||
"flip_v": true,
|
||||
"model": "create:models/block/track/bogey/bogey_drive_belt.obj"
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
# Blender 4.3.2 MTL File: 'Bogey.blend'
|
||||
# www.blender.org
|
||||
|
||||
newmtl Belts
|
||||
map_Kd #belt
|
|
@ -0,0 +1,130 @@
|
|||
# Blender 4.3.2
|
||||
# www.blender.org
|
||||
mtllib bogey_drive_belt.mtl
|
||||
o Cube.030
|
||||
v 0.500000 1.000000 -1.062500
|
||||
v 0.687500 1.000000 -1.062500
|
||||
v 0.500000 1.310930 -0.311848
|
||||
v 0.687500 1.310930 -0.311848
|
||||
v -0.500000 1.000000 -1.062500
|
||||
v -0.687500 1.000000 -1.062500
|
||||
v -0.500000 1.310930 -0.311848
|
||||
v -0.687500 1.310930 -0.311848
|
||||
v 0.500000 1.000000 1.062500
|
||||
v 0.687500 1.000000 1.062500
|
||||
v 0.500000 1.310930 0.311848
|
||||
v 0.687500 1.310930 0.311848
|
||||
v -0.500000 1.000000 1.062500
|
||||
v -0.687500 1.000000 1.062500
|
||||
v -0.500000 1.310930 0.311848
|
||||
v -0.687500 1.310930 0.311848
|
||||
v 0.500000 0.656250 0.939394
|
||||
v 0.687500 0.656250 0.939394
|
||||
v 0.500000 0.656250 -1.060606
|
||||
v 0.687500 0.656250 -1.060606
|
||||
v 0.500000 0.656250 -0.060606
|
||||
v 0.687500 0.656250 -0.060606
|
||||
v -0.500000 0.593750 0.939394
|
||||
v -0.687500 0.593750 0.939394
|
||||
v -0.500000 0.593750 -1.060606
|
||||
v -0.687500 0.593750 -1.060606
|
||||
v -0.500000 0.593750 -0.060606
|
||||
v -0.687500 0.593750 -0.060606
|
||||
v 0.500000 0.942259 -1.038583
|
||||
v 0.687500 0.942259 -1.038583
|
||||
v 0.500000 1.253189 -0.287931
|
||||
v 0.687500 1.253189 -0.287931
|
||||
v -0.500000 0.942259 -1.038583
|
||||
v -0.687500 0.942259 -1.038583
|
||||
v -0.500000 1.253189 -0.287931
|
||||
v -0.687500 1.253189 -0.287931
|
||||
v 0.500000 0.942259 1.038583
|
||||
v 0.687500 0.942259 1.038583
|
||||
v 0.500000 1.253189 0.287931
|
||||
v 0.687500 1.253189 0.287931
|
||||
v -0.500000 0.942259 1.038583
|
||||
v -0.687500 0.942259 1.038583
|
||||
v -0.500000 1.253189 0.287931
|
||||
v -0.687500 1.253189 0.287931
|
||||
v 0.500000 0.593750 0.939394
|
||||
v 0.687500 0.593750 0.939394
|
||||
v 0.500000 0.593750 -1.060606
|
||||
v 0.687500 0.593750 -1.060606
|
||||
v 0.500000 0.593750 -0.060606
|
||||
v 0.687500 0.593750 -0.060606
|
||||
v -0.500000 0.531250 0.939394
|
||||
v -0.687500 0.531250 0.939394
|
||||
v -0.500000 0.531250 -1.060606
|
||||
v -0.687500 0.531250 -1.060606
|
||||
v -0.500000 0.531250 -0.060606
|
||||
v -0.687500 0.531250 -0.060606
|
||||
vn -0.0000 0.9239 -0.3827
|
||||
vn -0.0000 0.9239 0.3827
|
||||
vn -0.0000 1.0000 -0.0000
|
||||
vn -0.0000 -0.9239 0.3827
|
||||
vn -0.0000 -0.9239 -0.3827
|
||||
vn -0.0000 -1.0000 -0.0000
|
||||
vn -0.0000 -0.3827 -0.9239
|
||||
vn -0.0000 0.3827 0.9239
|
||||
vn 1.0000 -0.0000 -0.0000
|
||||
vn -1.0000 -0.0000 -0.0000
|
||||
vn -0.0000 -0.3827 0.9239
|
||||
vn -0.0000 0.3827 -0.9239
|
||||
vn -0.0000 -0.0000 1.0000
|
||||
vn -0.0000 -0.0000 -1.0000
|
||||
vt 0.312500 0.187500
|
||||
vt 0.312500 1.000000
|
||||
vt 0.125000 1.000000
|
||||
vt 0.125000 0.187500
|
||||
vt 0.687500 0.187500
|
||||
vt 0.875000 0.187500
|
||||
vt 0.875000 1.000000
|
||||
vt 0.687500 1.000000
|
||||
vt 0.312500 0.000000
|
||||
vt 0.125000 0.000000
|
||||
s 0
|
||||
usemtl Belts
|
||||
f 1/1/1 3/2/1 4/3/1 2/4/1
|
||||
f 5/5/1 6/6/1 8/7/1 7/8/1
|
||||
f 9/2/2 10/3/2 12/4/2 11/1/2
|
||||
f 13/8/2 15/5/2 16/6/2 14/7/2
|
||||
f 21/9/3 22/10/3 20/3/3 19/2/3
|
||||
f 17/9/3 18/10/3 22/3/3 21/2/3
|
||||
f 27/9/3 25/2/3 26/10/3 28/3/3
|
||||
f 23/9/3 27/2/3 28/3/3 24/10/3
|
||||
f 29/1/4 30/4/4 32/3/4 31/2/4
|
||||
f 33/5/4 35/8/4 36/7/4 34/6/4
|
||||
f 37/2/5 39/1/5 40/4/5 38/3/5
|
||||
f 41/8/5 42/7/5 44/6/5 43/5/5
|
||||
f 49/9/6 47/2/6 48/3/6 50/10/6
|
||||
f 45/9/6 49/2/6 50/3/6 46/10/6
|
||||
f 55/9/6 56/3/6 54/10/6 53/2/6
|
||||
f 51/9/6 52/10/6 56/3/6 55/2/6
|
||||
f 1/1/7 2/4/7 30/4/7 29/1/7
|
||||
f 4/3/8 3/2/8 31/2/8 32/3/8
|
||||
f 2/4/9 4/3/9 32/3/9 30/4/9
|
||||
f 3/2/10 1/1/10 29/1/10 31/2/10
|
||||
f 6/6/7 5/5/7 33/5/7 34/6/7
|
||||
f 7/8/8 8/7/8 36/7/8 35/8/8
|
||||
f 8/7/10 6/6/10 34/6/10 36/7/10
|
||||
f 5/5/9 7/8/9 35/8/9 33/5/9
|
||||
f 10/3/11 9/2/11 37/2/11 38/3/11
|
||||
f 11/1/12 12/4/12 40/4/12 39/1/12
|
||||
f 12/4/9 10/3/9 38/3/9 40/4/9
|
||||
f 9/2/10 11/1/10 39/1/10 37/2/10
|
||||
f 13/8/11 14/7/11 42/7/11 41/8/11
|
||||
f 16/6/12 15/5/12 43/5/12 44/6/12
|
||||
f 14/7/10 16/6/10 44/6/10 42/7/10
|
||||
f 15/5/9 13/8/9 41/8/9 43/5/9
|
||||
f 17/9/10 21/2/10 49/2/10 45/9/10
|
||||
f 18/10/13 17/9/13 45/9/13 46/10/13
|
||||
f 20/3/9 22/10/9 50/10/9 48/3/9
|
||||
f 19/2/14 20/3/14 48/3/14 47/2/14
|
||||
f 21/9/10 19/2/10 47/2/10 49/9/10
|
||||
f 22/3/9 18/10/9 46/10/9 50/3/9
|
||||
f 27/2/9 23/9/9 51/9/9 55/2/9
|
||||
f 23/9/13 24/10/13 52/10/13 51/9/13
|
||||
f 28/3/10 26/10/10 54/10/10 56/3/10
|
||||
f 26/10/14 25/2/14 53/2/14 54/10/14
|
||||
f 25/2/9 27/9/9 55/9/9 53/2/9
|
||||
f 24/10/10 28/3/10 56/3/10 52/10/10
|
Binary file not shown.
After Width: | Height: | Size: 291 B |
Loading…
Add table
Reference in a new issue