From 3758035bf8441fe0e4558d91935fa07546cd450d Mon Sep 17 00:00:00 2001 From: Haowei Wen Date: Sun, 9 Jan 2022 05:00:15 +0800 Subject: [PATCH] support ears (thanks @james090500), close #85 --- README.md | 30 +++++++++++++ examples/img/deadmau5.png | Bin 0 -> 3565 bytes examples/img/ears.png | Bin 0 -> 233 bytes examples/index.html | 74 +++++++++++++++++++++++++++++- package-lock.json | 14 +++--- package.json | 2 +- src/model.ts | 37 ++++++++++++++- src/viewer.ts | 92 ++++++++++++++++++++++++++++++++++++-- 8 files changed, 236 insertions(+), 13 deletions(-) create mode 100644 examples/img/deadmau5.png create mode 100644 examples/img/ears.png diff --git a/README.md b/README.md index bc37d80..5624cf2 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ Three.js powered Minecraft skin viewer. * 1.8 Skins * HD Skins * Capes +* Ears * Elytras * Slim Arms * Automatic model detection (Slim / Default) @@ -104,5 +105,34 @@ skinViewer.globalLight.intensity = 0.1; Setting `globalLight.intensity` to `1.0` and `cameraLight.intensity` to `0.0` will completely disable shadows. +## Ears +skinview3d supports two types of ear texture: +* `standalone`: 14x7 image that contains the ear ([example](https://github.com/bs-community/skinview3d/blob/master/examples/img/ears.png)) +* `skin`: Skin texture that contains the ear (e.g. [deadmau5's skin](https://minecraft.fandom.com/wiki/Easter_eggs#Deadmau5.27s_ears)) + +Usage: +```js +// You can specify ears in the constructor: +new skinview3d.SkinViewer({ + skin: "img/deadmau5.png", + + // Use ears drawn on the current skin (img/deadmau5.png) + ears: "current-skin", + + // Or use ears from other textures + ears: { + textureType: "standalone", // "standalone" or "skin" + source: "img/ears.png" + } +}); + +// Show ears when loading skins: +skinViewer.loadSkin("img/deadmau5.png", { ears: true }); + +// Use ears from other textures: +skinViewer.loadEars("img/ears.png", { textureType: "standalone" }); +skinViewer.loadEars("img/deadmau5.png", { textureType: "skin" }); +``` + # Build `npm run build` diff --git a/examples/img/deadmau5.png b/examples/img/deadmau5.png new file mode 100644 index 0000000000000000000000000000000000000000..005cc1abf177765f63a5b0538e28c0a45e918101 GIT binary patch literal 3565 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 literal 0 HcmV?d00001 diff --git a/examples/img/ears.png b/examples/img/ears.png new file mode 100644 index 0000000000000000000000000000000000000000..10c101f660d60bc27d40d203d837462fce6f575a GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^d_c_3!3HEP+-oF(ltQvckS_y6l_~>6Lo)-z&;LOB zB?CjL0RzLU1O^7H84L{K`IF+0x&hU47I;J!1I;)9!i-thIyr%Yk|nMYCBgY=CFO}l zsSE{)nRz98d8s7|CVB>XhDOdT*>8Y~ygXeTLo|YufBgS%@BDV=n*R!O_S$jzBtKT( z>{#_+R)R#Vu~pm2#W&h|3Of%!IUrT&`RH=bWjBFis_a6^4Tc*$A5A{YA@iurZRZC`njxgN@xNA`;toK literal 0 HcmV?d00001 diff --git a/examples/index.html b/examples/index.html index cb12ab0..4a87c8f 100644 --- a/examples/index.html +++ b/examples/index.html @@ -215,6 +215,7 @@