diff --git a/prismarine-viewer/viewer/lib/entity/EntityMesh.js b/prismarine-viewer/viewer/lib/entity/EntityMesh.js index a518171ff..eab32629c 100644 --- a/prismarine-viewer/viewer/lib/entity/EntityMesh.js +++ b/prismarine-viewer/viewer/lib/entity/EntityMesh.js @@ -6,6 +6,7 @@ import { Vec3 } from 'vec3' import entities from './entities.json' import { externalModels } from './objModels' import externalTexturesJson from './externalTextures.json' +import { sheep, sheepCoat } from './exportedModels.js' // import { loadTexture } from globalThis.isElectron ? '../utils.electron.js' : '../utils'; const { loadTexture } = globalThis.isElectron ? require('../utils.electron.js') : require('../utils') @@ -294,7 +295,8 @@ const getEntity = (name) => { const scaleEntity = { zombie: 1.85, - husk: 1.85 + husk: 1.85, + sheep: 2 } const offsetEntity = { zombie: new Vec3(0, 1, 0), @@ -302,7 +304,6 @@ const offsetEntity = { boat: new Vec3(0, -1, 0), } -// eslint-disable-next-line @typescript-eslint/no-extraneous-class export class EntityMesh { constructor(version, type, scene, /** @type {{textures?, rotation?: Record}} */overrides = {}) { const originalType = type @@ -312,50 +313,19 @@ export class EntityMesh { if (externalModels[type]) { const objLoader = new OBJLoader() let texturePath = externalTexturesJson[type] - if (originalType === 'zombie_horse') { - texturePath = `textures/${version}/entity/horse/horse_zombie.png` - } - if (originalType === 'husk') { - texturePath = huskPng - } - if (originalType === 'skeleton_horse') { - texturePath = `textures/${version}/entity/horse/horse_skeleton.png` - } - if (originalType === 'donkey') { - texturePath = `textures/${version}/entity/horse/donkey.png` - } - if (originalType === 'mule') { - texturePath = `textures/${version}/entity/horse/mule.png` - } - if (originalType === 'ocelot') { - texturePath = `textures/${version}/entity/cat/ocelot.png` + + if (type === 'sheep') { + this.mesh = this.handleSheep(objLoader, originalType, overrides) + return } + + texturePath = this.getTexturePath(originalType, version, texturePath) if (!texturePath) throw new Error(`No texture for ${type}`) - const texture = new THREE.TextureLoader().load(texturePath) - texture.minFilter = THREE.NearestFilter - texture.magFilter = THREE.NearestFilter - const material = new THREE.MeshBasicMaterial({ - map: texture, - transparent: true, - alphaTest: 0.1 - }) + + const material = this.loadMaterial(texturePath) const obj = objLoader.parse(externalModels[type]) - const scale = scaleEntity[originalType] - if (scale) obj.scale.set(scale, scale, scale) - const offset = offsetEntity[originalType] - if (offset) obj.position.set(offset.x, offset.y, offset.z) - obj.traverse((child) => { - if (child instanceof THREE.Mesh) { - child.material = material - // todo - if (child.name === 'Head layer') child.visible = false - if (child.name === 'Head' && overrides.rotation?.head) { // todo - child.rotation.x -= (overrides.rotation.head.x ?? 0) * Math.PI / 180 - child.rotation.y -= (overrides.rotation.head.y ?? 0) * Math.PI / 180 - child.rotation.z -= (overrides.rotation.head.z ?? 0) * Math.PI / 180 - } - } - }) + this.applyMaterialAndTransform(obj, originalType, material, overrides) + this.mesh = obj return } @@ -366,21 +336,115 @@ export class EntityMesh { throw new Error(`Unknown entity ${type}`) } - this.mesh = new THREE.Object3D() - for (const [name, jsonModel] of Object.entries(e.geometry)) { - const texture = overrides.textures?.[name] ?? e.textures[name] + this.mesh = this.loadDefaultEntity(e, overrides) + } + + handleSheep(objLoader, originalType, overrides) { + const sheepObj = objLoader.parse(sheep) + const sheepMaterial = new THREE.MeshLambertMaterial({ color: 0xff_ff_ff }) + this.applyMaterialToMesh(sheepObj, sheepMaterial) + + const sheepCoatObj = objLoader.parse(sheepCoat) + const sheepCoatMaterial = new THREE.MeshLambertMaterial({ color: 0xff_d7_00 }) + this.applyMaterialToMesh(sheepCoatObj, sheepCoatMaterial) + + this.applyEntityScaleAndPosition(sheepObj, sheepCoatObj, originalType) + + if (overrides.rotation?.head) { + this.applyHeadRotation(sheepObj, overrides.rotation.head) + } + + const mesh = new THREE.Object3D() + mesh.add(sheepObj) + mesh.add(sheepCoatObj) + + return mesh + } + + getTexturePath(type, version, texturePath) { + switch (type) { + case 'zombie_horse': + return `textures/${version}/entity/horse/horse_zombie.png` + case 'husk': + return huskPng + case 'skeleton_horse': + return `textures/${version}/entity/horse/horse_skeleton.png` + case 'donkey': + return `textures/${version}/entity/horse/donkey.png` + case 'mule': + return `textures/${version}/entity/horse/mule.png` + case 'ocelot': + return `textures/${version}/entity/cat/ocelot.png` + default: + return texturePath + } + } + + loadMaterial(texturePath) { + const texture = new THREE.TextureLoader().load(texturePath) + texture.minFilter = THREE.NearestFilter + texture.magFilter = THREE.NearestFilter + return new THREE.MeshBasicMaterial({ + map: texture, + transparent: true, + alphaTest: 0.1 + }) + } + + applyMaterialAndTransform(obj, originalType, material, overrides) { + const scale = scaleEntity[originalType] + const offset = offsetEntity[originalType] + obj.traverse((child) => { + if (child instanceof THREE.Mesh) { + child.material = material + if (child.name === 'Head' && overrides.rotation?.head) { + this.applyHeadRotation(child, overrides.rotation.head) + } + } + }) + + if (scale) obj.scale.set(scale, scale, scale) + if (offset) obj.position.set(offset.x, offset.y, offset.z) + } + + applyMaterialToMesh(obj, material) { + obj.traverse((child) => { + if (child instanceof THREE.Mesh) { + child.material = material + } + }) + } + + applyEntityScaleAndPosition(sheepObj, sheepCoatObj, originalType) { + const scale = scaleEntity[originalType] + const offset = offsetEntity[originalType] + + if (scale) { + sheepObj.scale.set(scale, scale, scale) + sheepCoatObj.scale.set(scale, scale, scale) + } + if (offset) { + sheepObj.position.set(offset.x, offset.y, offset.z) + sheepCoatObj.position.set(offset.x, offset.y, offset.z) + } + } + + applyHeadRotation(mesh, rotation) { + mesh.rotation.x -= (rotation.x ?? 0) * Math.PI / 180 + mesh.rotation.y -= (rotation.y ?? 0) * Math.PI / 180 + mesh.rotation.z -= (rotation.z ?? 0) * Math.PI / 180 + } + + loadDefaultEntity(entity, overrides) { + const mesh = new THREE.Object3D() + for (const [name, jsonModel] of Object.entries(entity.geometry)) { + const texture = overrides.textures?.[name] ?? entity.textures[name] if (!texture) continue - // console.log(JSON.stringify(jsonModel, null, 2)) - const mesh = getMesh(texture + '.png', jsonModel, overrides) - mesh.name = `geometry_${name}` - this.mesh.add(mesh) - - const skeletonHelper = new THREE.SkeletonHelper(mesh) - //@ts-expect-error - skeletonHelper.material.linewidth = 2 - skeletonHelper.visible = false - this.mesh.add(skeletonHelper) + const entityMesh = getMesh(texture + '.png', jsonModel, overrides) + entityMesh.name = `geometry_${name}` + mesh.add(entityMesh) } + return mesh } static getStaticData(name) { @@ -393,7 +457,7 @@ export class EntityMesh { const e = getEntity(name) if (!e) throw new Error(`Unknown entity ${name}`) return { - boneNames: Object.values(e.geometry).flatMap(x => x.name) + boneNames: Object.values(e.geometry).flatMap((x) => x.name) } } } diff --git a/prismarine-viewer/viewer/lib/entity/exportedModels.js b/prismarine-viewer/viewer/lib/entity/exportedModels.js index 53d55d5eb..1b3158fe1 100644 --- a/prismarine-viewer/viewer/lib/entity/exportedModels.js +++ b/prismarine-viewer/viewer/lib/entity/exportedModels.js @@ -22,7 +22,8 @@ export { default as parrot } from './models/parrot.obj' export { default as piglin } from './models/piglin.obj' export { default as pillager } from './models/pillager.obj' export { default as rabbit } from './models/rabbit.obj' -// export { default as sheep } from './models/sheep.obj' +export { default as sheep } from './models/sheep.obj' +export { default as sheepCoat } from './models/sheepCoat.obj' export { default as shulker } from './models/shulker.obj' export { default as sniffer } from './models/sniffer.obj' export { default as spider } from './models/spider.obj' diff --git a/prismarine-viewer/viewer/lib/entity/models/sheep.obj b/prismarine-viewer/viewer/lib/entity/models/sheep.obj index 66a2175fd..dee05fe06 100644 --- a/prismarine-viewer/viewer/lib/entity/models/sheep.obj +++ b/prismarine-viewer/viewer/lib/entity/models/sheep.obj @@ -1,555 +1,279 @@ -# Made in Blockbench 4.9.4 -mtllib materials.mtl +# Made in Blockbench 4.10.4 +mtllib model.mtl -o body -v 0.25 1.1250000000000002 -0.5 -v 0.25 0.7500000000000002 -0.5 -v 0.25 1.125 0.5 -v 0.25 0.75 0.4999999999999999 -v -0.25 0.7500000000000002 -0.5 -v -0.25 1.1250000000000002 -0.5 -v -0.25 0.75 0.4999999999999999 -v -0.25 1.125 0.5 -vt 0.53125 0.78125 -vt 0.65625 0.78125 -vt 0.65625 0.53125 -vt 0.53125 0.53125 -vt 0.4375 0.78125 -vt 0.53125 0.78125 -vt 0.53125 0.53125 -vt 0.4375 0.53125 -vt 0.75 0.78125 -vt 0.875 0.78125 -vt 0.875 0.53125 -vt 0.75 0.53125 -vt 0.65625 0.78125 -vt 0.75 0.78125 -vt 0.75 0.53125 -vt 0.65625 0.53125 -vt 0.65625 0.78125 -vt 0.53125 0.78125 -vt 0.53125 0.875 -vt 0.65625 0.875 -vt 0.78125 0.875 -vt 0.65625 0.875 -vt 0.65625 0.78125 -vt 0.78125 0.78125 -vn 0 -1 -2.220446049250313e-16 -vn 1 0 0 -vn 0 1 2.220446049250313e-16 -vn -1 0 0 -vn 0 2.220446049250313e-16 -1 -vn 0 -2.220446049250313e-16 1 -usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb -f 4/4/1 7/3/1 5/2/1 2/1/1 -f 3/8/2 4/7/2 2/6/2 1/5/2 -f 8/12/3 3/11/3 1/10/3 6/9/3 -f 7/16/4 8/15/4 6/14/4 5/13/4 -f 6/20/5 1/19/5 2/18/5 5/17/5 -f 7/24/6 4/23/6 3/22/6 8/21/6 -o body -v 0.359375 1.2343750000000002 -0.609375 -v 0.359375 0.6406250000000002 -0.609375 -v 0.359375 1.234375 0.609375 -v 0.359375 0.640625 0.609375 -v -0.359375 0.6406250000000002 -0.609375 -v -0.359375 1.2343750000000002 -0.609375 -v -0.359375 0.640625 0.609375 -v -0.359375 1.234375 0.609375 -vt 0.53125 0.28125 -vt 0.65625 0.28125 -vt 0.65625 0.03125 -vt 0.53125 0.03125 -vt 0.4375 0.28125 -vt 0.53125 0.28125 -vt 0.53125 0.03125 -vt 0.4375 0.03125 -vt 0.75 0.28125 -vt 0.875 0.28125 -vt 0.875 0.03125 -vt 0.75 0.03125 -vt 0.65625 0.28125 -vt 0.75 0.28125 -vt 0.75 0.03125 -vt 0.65625 0.03125 -vt 0.65625 0.28125 -vt 0.53125 0.28125 -vt 0.53125 0.375 -vt 0.65625 0.375 -vt 0.78125 0.375 -vt 0.65625 0.375 -vt 0.65625 0.28125 -vt 0.78125 0.28125 -vn 0 -1 -2.220446049250313e-16 -vn 1 0 0 -vn 0 1 2.220446049250313e-16 -vn -1 0 0 -vn 0 2.220446049250313e-16 -1 -vn 0 -2.220446049250313e-16 1 -usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb -f 12/28/7 15/27/7 13/26/7 10/25/7 -f 11/32/8 12/31/8 10/30/8 9/29/8 -f 16/36/9 11/35/9 9/34/9 14/33/9 -f 15/40/10 16/39/10 14/38/10 13/37/10 -f 14/44/11 9/43/11 10/42/11 13/41/11 -f 15/48/12 12/47/12 11/46/12 16/45/12 -o head -v 0.1875 1.375 -0.375 -v 0.1875 1.375 -0.875 -v 0.1875 1 -0.375 -v 0.1875 1 -0.875 -v -0.1875 1.375 -0.875 -v -0.1875 1.375 -0.375 -v -0.1875 1 -0.875 -v -0.1875 1 -0.375 -vt 0.125 0.875 -vt 0.21875 0.875 -vt 0.21875 0.78125 -vt 0.125 0.78125 -vt 0 0.875 -vt 0.125 0.875 -vt 0.125 0.78125 -vt 0 0.78125 -vt 0.34375 0.875 -vt 0.4375 0.875 -vt 0.4375 0.78125 -vt 0.34375 0.78125 -vt 0.21875 0.875 -vt 0.34375 0.875 -vt 0.34375 0.78125 -vt 0.21875 0.78125 -vt 0.21875 0.875 -vt 0.125 0.875 -vt 0.125 1 +o /head +v 0.09375 0.5 -0.4375 +v -0.09375 0.5 -0.4375 +v -0.09375 0.6875 -0.4375 +v 0.09375 0.6875 -0.4375 +v 0.09375 0.5 -0.1875 +v 0.09375 0.6875 -0.1875 +v -0.09375 0.5 -0.1875 +v -0.09375 0.6875 -0.1875 +vt 0.125 0.5625 +vt 0.21875 0.5625 +vt 0.21875 0.75 +vt 0.125 0.75 +vt 0 0.5625 +vt 0.125 0.5625 +vt 0.125 0.75 +vt 0 0.75 +vt 0.34375 0.5625 +vt 0.4375 0.5625 +vt 0.4375 0.75 +vt 0.34375 0.75 +vt 0.21875 0.5625 +vt 0.34375 0.5625 +vt 0.34375 0.75 +vt 0.21875 0.75 vt 0.21875 1 +vt 0.125 1 +vt 0.125 0.75 +vt 0.21875 0.75 +vt 0.21875 0.75 +vt 0.3125 0.75 vt 0.3125 1 vt 0.21875 1 -vt 0.21875 0.875 -vt 0.3125 0.875 vn 0 0 -1 vn 1 0 0 vn 0 0 1 vn -1 0 0 vn 0 1 0 vn 0 -1 0 -usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb -f 20/52/13 23/51/13 21/50/13 18/49/13 -f 19/56/14 20/55/14 18/54/14 17/53/14 -f 24/60/15 19/59/15 17/58/15 22/57/15 -f 23/64/16 24/63/16 22/62/16 21/61/16 -f 22/68/17 17/67/17 18/66/17 21/65/17 -f 23/72/18 20/71/18 19/70/18 24/69/18 -o head -v 0.22499999999999998 1.4125 -0.3375 -v 0.22499999999999998 1.4125 -0.7875 -v 0.22499999999999998 0.9624999999999999 -0.3375 -v 0.22499999999999998 0.9624999999999999 -0.7875 -v -0.22499999999999998 1.4125 -0.7875 -v -0.22499999999999998 1.4125 -0.3375 -v -0.22499999999999998 0.9624999999999999 -0.7875 -v -0.22499999999999998 0.9624999999999999 -0.3375 -vt 0.09375 0.40625 -vt 0.1875 0.40625 -vt 0.1875 0.3125 -vt 0.09375 0.3125 -vt 0 0.40625 -vt 0.09375 0.40625 -vt 0.09375 0.3125 -vt 0 0.3125 -vt 0.28125 0.40625 -vt 0.375 0.40625 -vt 0.375 0.3125 -vt 0.28125 0.3125 -vt 0.1875 0.40625 -vt 0.28125 0.40625 -vt 0.28125 0.3125 -vt 0.1875 0.3125 -vt 0.1875 0.40625 -vt 0.09375 0.40625 -vt 0.09375 0.5 -vt 0.1875 0.5 -vt 0.28125 0.5 -vt 0.1875 0.5 -vt 0.1875 0.40625 -vt 0.28125 0.40625 -vn 0 0 -1 -vn 1 0 0 -vn 0 0 1 -vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb -f 28/76/19 31/75/19 29/74/19 26/73/19 -f 27/80/20 28/79/20 26/78/20 25/77/20 -f 32/84/21 27/83/21 25/82/21 30/81/21 -f 31/88/22 32/87/22 30/86/22 29/85/22 -f 30/92/23 25/91/23 26/90/23 29/89/23 -f 31/96/24 28/95/24 27/94/24 32/93/24 -o leg0 -v 0.3125 0.75 0.5625 -v 0.3125 0.75 0.3125 -v 0.3125 0 0.5625 -v 0.3125 0 0.3125 -v 0.0625 0.75 0.3125 -v 0.0625 0.75 0.5625 -v 0.0625 0 0.3125 -v 0.0625 0 0.5625 -vt 0.0625 0.6875 -vt 0.125 0.6875 +usemtl none +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 1/6/2 4/7/2 6/8/2 +f 7/9/3 5/10/3 6/11/3 8/12/3 +f 2/13/4 7/14/4 8/15/4 3/16/4 +f 8/17/5 6/18/5 4/19/5 3/20/5 +f 2/21/6 1/22/6 5/23/6 7/24/6 +o /right_front_leg +v -0.03125 0 -0.21875 +v -0.15625 0 -0.21875 +v -0.15625 0.375 -0.21875 +v -0.03125 0.375 -0.21875 +v -0.03125 0 -0.09375 +v -0.03125 0.375 -0.09375 +v -0.15625 0 -0.09375 +v -0.15625 0.375 -0.09375 +vt 0.0625 0 +vt 0.125 0 +vt 0.125 0.375 +vt 0.0625 0.375 +vt 0 0 +vt 0.0625 0 +vt 0.0625 0.375 +vt 0 0.375 +vt 0.1875 0 +vt 0.25 0 +vt 0.25 0.375 +vt 0.1875 0.375 +vt 0.125 0 +vt 0.1875 0 +vt 0.1875 0.375 +vt 0.125 0.375 vt 0.125 0.5 vt 0.0625 0.5 -vt 0 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.5 -vt 0 0.5 -vt 0.1875 0.6875 -vt 0.25 0.6875 -vt 0.25 0.5 -vt 0.1875 0.5 -vt 0.125 0.6875 -vt 0.1875 0.6875 +vt 0.0625 0.375 +vt 0.125 0.375 +vt 0.125 0.375 +vt 0.1875 0.375 vt 0.1875 0.5 vt 0.125 0.5 -vt 0.125 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.75 -vt 0.125 0.75 -vt 0.1875 0.75 -vt 0.125 0.75 -vt 0.125 0.6875 -vt 0.1875 0.6875 -vn 0 0 -1 -vn 1 0 0 -vn 0 0 1 -vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb -f 36/100/25 39/99/25 37/98/25 34/97/25 -f 35/104/26 36/103/26 34/102/26 33/101/26 -f 40/108/27 35/107/27 33/106/27 38/105/27 -f 39/112/28 40/111/28 38/110/28 37/109/28 -f 38/116/29 33/115/29 34/114/29 37/113/29 -f 39/120/30 36/119/30 35/118/30 40/117/30 -o leg0 -v 0.34375 0.78125 0.59375 -v 0.34375 0.78125 0.28125 -v 0.34375 0.34375 0.59375 -v 0.34375 0.34375 0.28125 -v 0.03125 0.78125 0.28125 -v 0.03125 0.78125 0.59375 -v 0.03125 0.34375 0.28125 -v 0.03125 0.34375 0.59375 -vt 0.0625 0.1875 -vt 0.125 0.1875 -vt 0.125 0.09375 -vt 0.0625 0.09375 -vt 0 0.1875 -vt 0.0625 0.1875 -vt 0.0625 0.09375 -vt 0 0.09375 -vt 0.1875 0.1875 -vt 0.25 0.1875 -vt 0.25 0.09375 -vt 0.1875 0.09375 -vt 0.125 0.1875 -vt 0.1875 0.1875 -vt 0.1875 0.09375 -vt 0.125 0.09375 -vt 0.125 0.1875 -vt 0.0625 0.1875 -vt 0.0625 0.25 -vt 0.125 0.25 -vt 0.1875 0.25 -vt 0.125 0.25 -vt 0.125 0.1875 -vt 0.1875 0.1875 vn 0 0 -1 vn 1 0 0 vn 0 0 1 vn -1 0 0 vn 0 1 0 vn 0 -1 0 -usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb -f 44/124/31 47/123/31 45/122/31 42/121/31 -f 43/128/32 44/127/32 42/126/32 41/125/32 -f 48/132/33 43/131/33 41/130/33 46/129/33 -f 47/136/34 48/135/34 46/134/34 45/133/34 -f 46/140/35 41/139/35 42/138/35 45/137/35 -f 47/144/36 44/143/36 43/142/36 48/141/36 -o leg1 -v -0.0625 0.75 0.5625 -v -0.0625 0.75 0.3125 -v -0.0625 0 0.5625 -v -0.0625 0 0.3125 -v -0.3125 0.75 0.3125 -v -0.3125 0.75 0.5625 -v -0.3125 0 0.3125 -v -0.3125 0 0.5625 -vt 0.0625 0.6875 -vt 0.125 0.6875 +usemtl none +f 9/25/7 10/26/7 11/27/7 12/28/7 +f 13/29/8 9/30/8 12/31/8 14/32/8 +f 15/33/9 13/34/9 14/35/9 16/36/9 +f 10/37/10 15/38/10 16/39/10 11/40/10 +f 16/41/11 14/42/11 12/43/11 11/44/11 +f 10/45/12 9/46/12 13/47/12 15/48/12 +o /right_hind_leg +v -0.03125 0 0.15625 +v -0.15625 0 0.15625 +v -0.15625 0.375 0.15625 +v -0.03125 0.375 0.15625 +v -0.03125 0 0.28125 +v -0.03125 0.375 0.28125 +v -0.15625 0 0.28125 +v -0.15625 0.375 0.28125 +vt 0.0625 0 +vt 0.125 0 +vt 0.125 0.375 +vt 0.0625 0.375 +vt 0 0 +vt 0.0625 0 +vt 0.0625 0.375 +vt 0 0.375 +vt 0.1875 0 +vt 0.25 0 +vt 0.25 0.375 +vt 0.1875 0.375 +vt 0.125 0 +vt 0.1875 0 +vt 0.1875 0.375 +vt 0.125 0.375 vt 0.125 0.5 vt 0.0625 0.5 -vt 0 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.5 -vt 0 0.5 -vt 0.1875 0.6875 -vt 0.25 0.6875 -vt 0.25 0.5 -vt 0.1875 0.5 -vt 0.125 0.6875 -vt 0.1875 0.6875 +vt 0.0625 0.375 +vt 0.125 0.375 +vt 0.125 0.375 +vt 0.1875 0.375 vt 0.1875 0.5 vt 0.125 0.5 -vt 0.125 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.75 -vt 0.125 0.75 -vt 0.1875 0.75 -vt 0.125 0.75 -vt 0.125 0.6875 -vt 0.1875 0.6875 -vn 0 0 -1 -vn 1 0 0 -vn 0 0 1 -vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb -f 52/148/37 55/147/37 53/146/37 50/145/37 -f 51/152/38 52/151/38 50/150/38 49/149/38 -f 56/156/39 51/155/39 49/154/39 54/153/39 -f 55/160/40 56/159/40 54/158/40 53/157/40 -f 54/164/41 49/163/41 50/162/41 53/161/41 -f 55/168/42 52/167/42 51/166/42 56/165/42 -o leg1 -v -0.03125 0.78125 0.59375 -v -0.03125 0.78125 0.28125 -v -0.03125 0.34375 0.59375 -v -0.03125 0.34375 0.28125 -v -0.34375 0.78125 0.28125 -v -0.34375 0.78125 0.59375 -v -0.34375 0.34375 0.28125 -v -0.34375 0.34375 0.59375 -vt 0.0625 0.1875 -vt 0.125 0.1875 -vt 0.125 0.09375 -vt 0.0625 0.09375 -vt 0 0.1875 -vt 0.0625 0.1875 -vt 0.0625 0.09375 -vt 0 0.09375 -vt 0.1875 0.1875 -vt 0.25 0.1875 -vt 0.25 0.09375 -vt 0.1875 0.09375 -vt 0.125 0.1875 -vt 0.1875 0.1875 -vt 0.1875 0.09375 -vt 0.125 0.09375 -vt 0.125 0.1875 -vt 0.0625 0.1875 -vt 0.0625 0.25 -vt 0.125 0.25 -vt 0.1875 0.25 -vt 0.125 0.25 -vt 0.125 0.1875 -vt 0.1875 0.1875 vn 0 0 -1 vn 1 0 0 vn 0 0 1 vn -1 0 0 vn 0 1 0 vn 0 -1 0 -usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb -f 60/172/43 63/171/43 61/170/43 58/169/43 -f 59/176/44 60/175/44 58/174/44 57/173/44 -f 64/180/45 59/179/45 57/178/45 62/177/45 -f 63/184/46 64/183/46 62/182/46 61/181/46 -f 62/188/47 57/187/47 58/186/47 61/185/47 -f 63/192/48 60/191/48 59/190/48 64/189/48 -o leg2 -v 0.3125 0.75 -0.1875 -v 0.3125 0.75 -0.4375 -v 0.3125 0 -0.1875 -v 0.3125 0 -0.4375 -v 0.0625 0.75 -0.4375 -v 0.0625 0.75 -0.1875 -v 0.0625 0 -0.4375 -v 0.0625 0 -0.1875 -vt 0.0625 0.6875 -vt 0.125 0.6875 +usemtl none +f 17/49/13 18/50/13 19/51/13 20/52/13 +f 21/53/14 17/54/14 20/55/14 22/56/14 +f 23/57/15 21/58/15 22/59/15 24/60/15 +f 18/61/16 23/62/16 24/63/16 19/64/16 +f 24/65/17 22/66/17 20/67/17 19/68/17 +f 18/69/18 17/70/18 21/71/18 23/72/18 +o /left_hind_leg +v 0.15625 0 0.15625 +v 0.03125 0 0.15625 +v 0.03125 0.375 0.15625 +v 0.15625 0.375 0.15625 +v 0.15625 0 0.28125 +v 0.15625 0.375 0.28125 +v 0.03125 0 0.28125 +v 0.03125 0.375 0.28125 +vt 0.0625 0 +vt 0.125 0 +vt 0.125 0.375 +vt 0.0625 0.375 +vt 0 0 +vt 0.0625 0 +vt 0.0625 0.375 +vt 0 0.375 +vt 0.1875 0 +vt 0.25 0 +vt 0.25 0.375 +vt 0.1875 0.375 +vt 0.125 0 +vt 0.1875 0 +vt 0.1875 0.375 +vt 0.125 0.375 vt 0.125 0.5 vt 0.0625 0.5 -vt 0 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.5 -vt 0 0.5 -vt 0.1875 0.6875 -vt 0.25 0.6875 -vt 0.25 0.5 -vt 0.1875 0.5 -vt 0.125 0.6875 -vt 0.1875 0.6875 +vt 0.0625 0.375 +vt 0.125 0.375 +vt 0.125 0.375 +vt 0.1875 0.375 vt 0.1875 0.5 vt 0.125 0.5 -vt 0.125 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.75 -vt 0.125 0.75 -vt 0.1875 0.75 -vt 0.125 0.75 -vt 0.125 0.6875 -vt 0.1875 0.6875 vn 0 0 -1 vn 1 0 0 vn 0 0 1 vn -1 0 0 vn 0 1 0 vn 0 -1 0 -usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb -f 68/196/49 71/195/49 69/194/49 66/193/49 -f 67/200/50 68/199/50 66/198/50 65/197/50 -f 72/204/51 67/203/51 65/202/51 70/201/51 -f 71/208/52 72/207/52 70/206/52 69/205/52 -f 70/212/53 65/211/53 66/210/53 69/209/53 -f 71/216/54 68/215/54 67/214/54 72/213/54 -o leg2 -v 0.34375 0.78125 -0.15625 -v 0.34375 0.78125 -0.46875 -v 0.34375 0.34375 -0.15625 -v 0.34375 0.34375 -0.46875 -v 0.03125 0.78125 -0.46875 -v 0.03125 0.78125 -0.15625 -v 0.03125 0.34375 -0.46875 -v 0.03125 0.34375 -0.15625 -vt 0.0625 0.1875 -vt 0.125 0.1875 -vt 0.125 0.09375 -vt 0.0625 0.09375 -vt 0 0.1875 -vt 0.0625 0.1875 -vt 0.0625 0.09375 -vt 0 0.09375 -vt 0.1875 0.1875 -vt 0.25 0.1875 -vt 0.25 0.09375 -vt 0.1875 0.09375 -vt 0.125 0.1875 -vt 0.1875 0.1875 -vt 0.1875 0.09375 -vt 0.125 0.09375 -vt 0.125 0.1875 -vt 0.0625 0.1875 -vt 0.0625 0.25 -vt 0.125 0.25 -vt 0.1875 0.25 -vt 0.125 0.25 -vt 0.125 0.1875 -vt 0.1875 0.1875 -vn 0 0 -1 +usemtl none +f 25/73/19 26/74/19 27/75/19 28/76/19 +f 29/77/20 25/78/20 28/79/20 30/80/20 +f 31/81/21 29/82/21 30/83/21 32/84/21 +f 26/85/22 31/86/22 32/87/22 27/88/22 +f 32/89/23 30/90/23 28/91/23 27/92/23 +f 26/93/24 25/94/24 29/95/24 31/96/24 +o /body +v 0.125 0.37499999999999994 0.25 +v -0.125 0.37499999999999994 0.25 +v -0.125 0.37500000000000006 -0.25000000000000006 +v 0.125 0.37500000000000006 -0.25000000000000006 +v 0.125 0.5625 0.25 +v 0.125 0.5625000000000001 -0.25 +v -0.125 0.5625 0.25 +v -0.125 0.5625000000000001 -0.25 +vt 0.53125 0.0625 +vt 0.65625 0.0625 +vt 0.65625 0.5625 +vt 0.53125 0.5625 +vt 0.4375 0.0625 +vt 0.53125 0.0625 +vt 0.53125 0.5625 +vt 0.4375 0.5625 +vt 0.75 0.0625 +vt 0.875 0.0625 +vt 0.875 0.5625 +vt 0.75 0.5625 +vt 0.65625 0.0625 +vt 0.75 0.0625 +vt 0.75 0.5625 +vt 0.65625 0.5625 +vt 0.65625 0.75 +vt 0.53125 0.75 +vt 0.53125 0.5625 +vt 0.65625 0.5625 +vt 0.65625 0.5625 +vt 0.78125 0.5625 +vt 0.78125 0.75 +vt 0.65625 0.75 +vn 0 -1 -2.220446049250313e-16 vn 1 0 0 -vn 0 0 1 +vn 0 1 2.220446049250313e-16 vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb -f 76/220/55 79/219/55 77/218/55 74/217/55 -f 75/224/56 76/223/56 74/222/56 73/221/56 -f 80/228/57 75/227/57 73/226/57 78/225/57 -f 79/232/58 80/231/58 78/230/58 77/229/58 -f 78/236/59 73/235/59 74/234/59 77/233/59 -f 79/240/60 76/239/60 75/238/60 80/237/60 -o leg3 -v -0.0625 0.75 -0.1875 -v -0.0625 0.75 -0.4375 -v -0.0625 0 -0.1875 -v -0.0625 0 -0.4375 -v -0.3125 0.75 -0.4375 -v -0.3125 0.75 -0.1875 -v -0.3125 0 -0.4375 -v -0.3125 0 -0.1875 -vt 0.0625 0.6875 -vt 0.125 0.6875 +vn 0 2.96059473233375e-16 -1 +vn 0 0 1 +usemtl none +f 33/97/25 34/98/25 35/99/25 36/100/25 +f 37/101/26 33/102/26 36/103/26 38/104/26 +f 39/105/27 37/106/27 38/107/27 40/108/27 +f 34/109/28 39/110/28 40/111/28 35/112/28 +f 40/113/29 38/114/29 36/115/29 35/116/29 +f 34/117/30 33/118/30 37/119/30 39/120/30 +o /left_front_leg +v 0.15625 0 -0.21875 +v 0.03125 0 -0.21875 +v 0.03125 0.375 -0.21875 +v 0.15625 0.375 -0.21875 +v 0.15625 0 -0.09375 +v 0.15625 0.375 -0.09375 +v 0.03125 0 -0.09375 +v 0.03125 0.375 -0.09375 +vt 0.0625 0 +vt 0.125 0 +vt 0.125 0.375 +vt 0.0625 0.375 +vt 0 0 +vt 0.0625 0 +vt 0.0625 0.375 +vt 0 0.375 +vt 0.1875 0 +vt 0.25 0 +vt 0.25 0.375 +vt 0.1875 0.375 +vt 0.125 0 +vt 0.1875 0 +vt 0.1875 0.375 +vt 0.125 0.375 vt 0.125 0.5 vt 0.0625 0.5 -vt 0 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.5 -vt 0 0.5 -vt 0.1875 0.6875 -vt 0.25 0.6875 -vt 0.25 0.5 -vt 0.1875 0.5 -vt 0.125 0.6875 -vt 0.1875 0.6875 +vt 0.0625 0.375 +vt 0.125 0.375 +vt 0.125 0.375 +vt 0.1875 0.375 vt 0.1875 0.5 vt 0.125 0.5 -vt 0.125 0.6875 -vt 0.0625 0.6875 -vt 0.0625 0.75 -vt 0.125 0.75 -vt 0.1875 0.75 -vt 0.125 0.75 -vt 0.125 0.6875 -vt 0.1875 0.6875 -vn 0 0 -1 -vn 1 0 0 -vn 0 0 1 -vn -1 0 0 -vn 0 1 0 -vn 0 -1 0 -usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb -f 84/244/61 87/243/61 85/242/61 82/241/61 -f 83/248/62 84/247/62 82/246/62 81/245/62 -f 88/252/63 83/251/63 81/250/63 86/249/63 -f 87/256/64 88/255/64 86/254/64 85/253/64 -f 86/260/65 81/259/65 82/258/65 85/257/65 -f 87/264/66 84/263/66 83/262/66 88/261/66 -o leg3 -v -0.03125 0.78125 -0.15625 -v -0.03125 0.78125 -0.46875 -v -0.03125 0.34375 -0.15625 -v -0.03125 0.34375 -0.46875 -v -0.34375 0.78125 -0.46875 -v -0.34375 0.78125 -0.15625 -v -0.34375 0.34375 -0.46875 -v -0.34375 0.34375 -0.15625 -vt 0.0625 0.1875 -vt 0.125 0.1875 -vt 0.125 0.09375 -vt 0.0625 0.09375 -vt 0 0.1875 -vt 0.0625 0.1875 -vt 0.0625 0.09375 -vt 0 0.09375 -vt 0.1875 0.1875 -vt 0.25 0.1875 -vt 0.25 0.09375 -vt 0.1875 0.09375 -vt 0.125 0.1875 -vt 0.1875 0.1875 -vt 0.1875 0.09375 -vt 0.125 0.09375 -vt 0.125 0.1875 -vt 0.0625 0.1875 -vt 0.0625 0.25 -vt 0.125 0.25 -vt 0.1875 0.25 -vt 0.125 0.25 -vt 0.125 0.1875 -vt 0.1875 0.1875 vn 0 0 -1 vn 1 0 0 vn 0 0 1 vn -1 0 0 vn 0 1 0 vn 0 -1 0 -usemtl m_801e22d5-c057-fde3-2edb-c11e082736eb -f 92/268/67 95/267/67 93/266/67 90/265/67 -f 91/272/68 92/271/68 90/270/68 89/269/68 -f 96/276/69 91/275/69 89/274/69 94/273/69 -f 95/280/70 96/279/70 94/278/70 93/277/70 -f 94/284/71 89/283/71 90/282/71 93/281/71 -f 95/288/72 92/287/72 91/286/72 96/285/72 \ No newline at end of file +usemtl none +f 41/121/31 42/122/31 43/123/31 44/124/31 +f 45/125/32 41/126/32 44/127/32 46/128/32 +f 47/129/33 45/130/33 46/131/33 48/132/33 +f 42/133/34 47/134/34 48/135/34 43/136/34 +f 48/137/35 46/138/35 44/139/35 43/140/35 +f 42/141/36 41/142/36 45/143/36 47/144/36 \ No newline at end of file diff --git a/prismarine-viewer/viewer/lib/entity/models/sheepCoat.obj b/prismarine-viewer/viewer/lib/entity/models/sheepCoat.obj new file mode 100644 index 000000000..56804621c --- /dev/null +++ b/prismarine-viewer/viewer/lib/entity/models/sheepCoat.obj @@ -0,0 +1,279 @@ +# Made in Blockbench 4.10.4 +mtllib fur.mtl + +o /head +v 0.11250000000000004 0.48124999999999996 -0.3937500125 +v -0.11250000000000004 0.48124999999999996 -0.3937500125 +v -0.11250000000000004 0.70625 -0.3937500125 +v 0.11250000000000004 0.70625 -0.3937500125 +v 0.11250000000000004 0.48124999999999996 -0.16875 +v 0.11250000000000004 0.70625 -0.16875 +v -0.11250000000000004 0.48124999999999996 -0.16875 +v -0.11250000000000004 0.70625 -0.16875 +vt 0.09375 0.625 +vt 0.1875 0.625 +vt 0.1875 0.8125 +vt 0.09375 0.8125 +vt 0 0.625 +vt 0.09375 0.625 +vt 0.09375 0.8125 +vt 0 0.8125 +vt 0.28125 0.625 +vt 0.375 0.625 +vt 0.375 0.8125 +vt 0.28125 0.8125 +vt 0.1875 0.625 +vt 0.28125 0.625 +vt 0.28125 0.8125 +vt 0.1875 0.8125 +vt 0.1875 1 +vt 0.09375 1 +vt 0.09375 0.8125 +vt 0.1875 0.8125 +vt 0.1875 0.8125 +vt 0.28125 0.8125 +vt 0.28125 1 +vt 0.1875 1 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl none +f 1/1/1 2/2/1 3/3/1 4/4/1 +f 5/5/2 1/6/2 4/7/2 6/8/2 +f 7/9/3 5/10/3 6/11/3 8/12/3 +f 2/13/4 7/14/4 8/15/4 3/16/4 +f 8/17/5 6/18/5 4/19/5 3/20/5 +f 2/21/6 1/22/6 5/23/6 7/24/6 +o /right_front_leg +v -0.015625 0.171875 -0.234375 +v -0.171875 0.171875 -0.234375 +v -0.171875 0.390625 -0.234375 +v -0.015625 0.390625 -0.234375 +v -0.015625 0.171875 -0.078125 +v -0.015625 0.390625 -0.078125 +v -0.171875 0.171875 -0.078125 +v -0.171875 0.390625 -0.078125 +vt 0.0625 0.1875 +vt 0.125 0.1875 +vt 0.125 0.375 +vt 0.0625 0.375 +vt 0 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.375 +vt 0 0.375 +vt 0.1875 0.1875 +vt 0.25 0.1875 +vt 0.25 0.375 +vt 0.1875 0.375 +vt 0.125 0.1875 +vt 0.1875 0.1875 +vt 0.1875 0.375 +vt 0.125 0.375 +vt 0.125 0.5 +vt 0.0625 0.5 +vt 0.0625 0.375 +vt 0.125 0.375 +vt 0.125 0.375 +vt 0.1875 0.375 +vt 0.1875 0.5 +vt 0.125 0.5 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl none +f 9/25/7 10/26/7 11/27/7 12/28/7 +f 13/29/8 9/30/8 12/31/8 14/32/8 +f 15/33/9 13/34/9 14/35/9 16/36/9 +f 10/37/10 15/38/10 16/39/10 11/40/10 +f 16/41/11 14/42/11 12/43/11 11/44/11 +f 10/45/12 9/46/12 13/47/12 15/48/12 +o /right_hind_leg +v -0.015625 0.171875 0.140625 +v -0.171875 0.171875 0.140625 +v -0.171875 0.390625 0.140625 +v -0.015625 0.390625 0.140625 +v -0.015625 0.171875 0.296875 +v -0.015625 0.390625 0.296875 +v -0.171875 0.171875 0.296875 +v -0.171875 0.390625 0.296875 +vt 0.0625 0.1875 +vt 0.125 0.1875 +vt 0.125 0.375 +vt 0.0625 0.375 +vt 0 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.375 +vt 0 0.375 +vt 0.1875 0.1875 +vt 0.25 0.1875 +vt 0.25 0.375 +vt 0.1875 0.375 +vt 0.125 0.1875 +vt 0.1875 0.1875 +vt 0.1875 0.375 +vt 0.125 0.375 +vt 0.125 0.5 +vt 0.0625 0.5 +vt 0.0625 0.375 +vt 0.125 0.375 +vt 0.125 0.375 +vt 0.1875 0.375 +vt 0.1875 0.5 +vt 0.125 0.5 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl none +f 17/49/13 18/50/13 19/51/13 20/52/13 +f 21/53/14 17/54/14 20/55/14 22/56/14 +f 23/57/15 21/58/15 22/59/15 24/60/15 +f 18/61/16 23/62/16 24/63/16 19/64/16 +f 24/65/17 22/66/17 20/67/17 19/68/17 +f 18/69/18 17/70/18 21/71/18 23/72/18 +o /left_hind_leg +v 0.171875 0.171875 0.140625 +v 0.015625 0.171875 0.140625 +v 0.015625 0.390625 0.140625 +v 0.171875 0.390625 0.140625 +v 0.171875 0.171875 0.296875 +v 0.171875 0.390625 0.296875 +v 0.015625 0.171875 0.296875 +v 0.015625 0.390625 0.296875 +vt 0.0625 0.1875 +vt 0.125 0.1875 +vt 0.125 0.375 +vt 0.0625 0.375 +vt 0 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.375 +vt 0 0.375 +vt 0.1875 0.1875 +vt 0.25 0.1875 +vt 0.25 0.375 +vt 0.1875 0.375 +vt 0.125 0.1875 +vt 0.1875 0.1875 +vt 0.1875 0.375 +vt 0.125 0.375 +vt 0.125 0.5 +vt 0.0625 0.5 +vt 0.0625 0.375 +vt 0.125 0.375 +vt 0.125 0.375 +vt 0.1875 0.375 +vt 0.1875 0.5 +vt 0.125 0.5 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl none +f 25/73/19 26/74/19 27/75/19 28/76/19 +f 29/77/20 25/78/20 28/79/20 30/80/20 +f 31/81/21 29/82/21 30/83/21 32/84/21 +f 26/85/22 31/86/22 32/87/22 27/88/22 +f 32/89/23 30/90/23 28/91/23 27/92/23 +f 26/93/24 25/94/24 29/95/24 31/96/24 +o /body +v 0.1796875 0.32031249999999994 0.3046875 +v -0.1796875 0.32031249999999994 0.3046875 +v -0.1796875 0.32031250000000006 -0.30468750000000006 +v 0.1796875 0.32031250000000006 -0.30468750000000006 +v 0.1796875 0.6171875 0.3046875 +v 0.1796875 0.6171875000000001 -0.3046875 +v -0.1796875 0.6171875 0.3046875 +v -0.1796875 0.6171875000000001 -0.3046875 +vt 0.53125 0.0625 +vt 0.65625 0.0625 +vt 0.65625 0.5625 +vt 0.53125 0.5625 +vt 0.4375 0.0625 +vt 0.53125 0.0625 +vt 0.53125 0.5625 +vt 0.4375 0.5625 +vt 0.75 0.0625 +vt 0.875 0.0625 +vt 0.875 0.5625 +vt 0.75 0.5625 +vt 0.65625 0.0625 +vt 0.75 0.0625 +vt 0.75 0.5625 +vt 0.65625 0.5625 +vt 0.65625 0.75 +vt 0.53125 0.75 +vt 0.53125 0.5625 +vt 0.65625 0.5625 +vt 0.65625 0.5625 +vt 0.78125 0.5625 +vt 0.78125 0.75 +vt 0.65625 0.75 +vn 0 -1 -1.8219044506669235e-16 +vn 1 0 0 +vn 0 1 1.8219044506669235e-16 +vn -1 0 0 +vn 0 1.8698493046318422e-16 -1 +vn 0 0 1 +usemtl none +f 33/97/25 34/98/25 35/99/25 36/100/25 +f 37/101/26 33/102/26 36/103/26 38/104/26 +f 39/105/27 37/106/27 38/107/27 40/108/27 +f 34/109/28 39/110/28 40/111/28 35/112/28 +f 40/113/29 38/114/29 36/115/29 35/116/29 +f 34/117/30 33/118/30 37/119/30 39/120/30 +o /left_front_leg +v 0.171875 0.171875 -0.234375 +v 0.015625 0.171875 -0.234375 +v 0.015625 0.390625 -0.234375 +v 0.171875 0.390625 -0.234375 +v 0.171875 0.171875 -0.078125 +v 0.171875 0.390625 -0.078125 +v 0.015625 0.171875 -0.078125 +v 0.015625 0.390625 -0.078125 +vt 0.0625 0.1875 +vt 0.125 0.1875 +vt 0.125 0.375 +vt 0.0625 0.375 +vt 0 0.1875 +vt 0.0625 0.1875 +vt 0.0625 0.375 +vt 0 0.375 +vt 0.1875 0.1875 +vt 0.25 0.1875 +vt 0.25 0.375 +vt 0.1875 0.375 +vt 0.125 0.1875 +vt 0.1875 0.1875 +vt 0.1875 0.375 +vt 0.125 0.375 +vt 0.125 0.5 +vt 0.0625 0.5 +vt 0.0625 0.375 +vt 0.125 0.375 +vt 0.125 0.375 +vt 0.1875 0.375 +vt 0.1875 0.5 +vt 0.125 0.5 +vn 0 0 -1 +vn 1 0 0 +vn 0 0 1 +vn -1 0 0 +vn 0 1 0 +vn 0 -1 0 +usemtl none +f 41/121/31 42/122/31 43/123/31 44/124/31 +f 45/125/32 41/126/32 44/127/32 46/128/32 +f 47/129/33 45/130/33 46/131/33 48/132/33 +f 42/133/34 47/134/34 48/135/34 43/136/34 +f 48/137/35 46/138/35 44/139/35 43/140/35 +f 42/141/36 41/142/36 45/143/36 47/144/36 \ No newline at end of file