我如何使用 base 64 字符串作为法线贴图?

How can i use a base 64 string as a normal map?

标题解释得很好。我有一个以 base 64 编码的法线贴图,我想在模型上使用它。我一直在尝试一些我在网上找到的示例,但无济于事。

var curObj = mesh.getObjectByName(object + "_low")
var image = new Image()
var texture = new THREE.Texture(image)
image.src = reader.result
curObj.material.normalMap = image
image.onload = function() { texture.needsUpdate = true }

Object 是一个字符串,它是我要应用法线贴图的部分的名称。 Base 64 字符串是 reader.result

您想将 texture 指定为 normalMap,而不是 image。此外,我会在图像加载完成之后创建纹理,而不是之前:

var image = new Image();

image.onload = function() {
    var curObj = mesh.getObjectByName(object + "_low");
    var texture = new THREE.Texture(image);
    curObj.material.normalMap = texture; // Make sure this is the texture.
}

// I believe .src needs to be assigned after .onload has been declared
image.src = reader.result;

作为一个选项,试试这个方法:

var curObj = mesh.getObjectByName(object + "_low");
var texture = new THREE.TextureLoader().load(reader.result);
curObj.material.normalMap = texture;
curObj.material.needsUpdate = true; // just in case, if the material didn't have `normalMap` before