I'm trying to update threejs versions and essentially I want to use an example I found on the internet for a very early version of threejs (r44) in a more recent version of threejs, (r143) and I'm having a problem with uv unwrapping for the 3d model to texture a bust. In order to do that, I realized that I would run into many problems, but mainly the thing that I'm stuck on at the moment is correctly placing the UVs so my 3D model will look like this: 
But instead it looks like this : 
Of course I've solved a bunch of other problems relating to importing the geometry and converting the face data myself (I'm using a not-so-kosher way of importing the geometry data to a buffer geometry) but I am stuck on this particular issue.
If you dare to help me--the disaster that lives within glitch awaits.
The properly mapped texture model lives at https://pricey-healthy-paranthodon.glitch.me/FACESHADER/index-testUV.html
the wildly improperly mapped texture model lives at https://pricey-healthy-paranthodon.glitch.me/FACESHADER/index-r44-copy2.html
and you can freely remix-to-edit the glitch project from https://glitch.com/edit/#!/pricey-healthy-paranthodon?path=FACESHADER%2Findex-r44-copy2.html%3A239%3A20
glitch autosaves, so once you remix you can edit and should be able to see changes live.
This is my "almost last ditch" effort to solve this problem, and I know that it's a tough problem to solve, especially with a custom geometry.
Some context:
Most of the action (and problems that I'm dealing with) live in index-r44-copy2.html starting at function createScene() on line 659 in that html file.
The geometry data is being imported using JSONLoader from an early version of threejs, and is sent to that function. I'm using bufferGeometry.fromPoints() (line 552) (window.fromPoints) to convert it to a new buffer geometry in the current version of threejs—I know this isn't a best practice, but the data for the geometry is being properly imported. From there I'm setting the faces of the geometry with .setIndex() and this appears to be working properly as well since the geometry is solid.
The real action with the UVs happens at convertGeometryToFiveBufferGeometry() (line 455) with "let uvs = []" (line 476) which is where I'm sure something wrong is happening.
If anyone has any advice or solutions on how to fix the UV issue please let me know! I'm very stuck D:


I made some progress in the mean time, however, I still need to detail things out. I successfully generate/mapped both vertex color and UVs.
Currently I'm suspect the setAttribute method messes with the array order. The hack for now is to fetch back the position array with geometry.attributes.position.array and iterate to generate e.g. a cylindrical UV projection in that array order. The funny/confusing part is that I still use the geometry.setAttribute to assign the UV array (just as I assign positions) or another attribute, but it works! This may not be exactly what you need, but if you can live with a cylindrical UV projection for a while then I can give you some code snippets.
In the meanwhile, this should/may be addressed to/by the developers. One other cause could be the data "bit depth" mismatch e.g. maybe need float16Array instead.
Cheers