Three.js 如何将纹理应用于自定义几何体

How to apply a texture to a custom geometry in Three.js

我成功地将纹理应用于立方体几何体:

var geometry = new THREE.CubeGeometry(10, 10, 10);
var meshMaterial = new THREE.MeshPhongMaterial({ transparent: false, map: THREE.ImageUtils.loadTexture('/app/images/wood.jpg') });
meshMaterial.side = THREE.DoubleSide;
var mesh = new THREE.Mesh(geometry, meshMaterial);

有了这个,我得到了一个像这样的漂亮的纹理立方体:

现在我想将相同的纹理(512x512 jpg 图像)应用到我从 STL 加载的自定义模型,这就是我得到的(在本例中为金字塔):

这是代码:

loader.load(jsonParam.url, function (geometry) {
            var meshMaterial = new THREE.MeshPhongMaterial({ transparent: false, map: THREE.ImageUtils.loadTexture('/app/images/wood.jpg') });
            meshMaterial.side = THREE.DoubleSide;

            var mesh = new THREE.Mesh(geometry, meshMaterial);

            mesh.castShadow = false;
            mesh.receiveShadow = true;
            scene.add(mesh);
        });

为什么没有应用纹理,我只得到似乎是纹理颜色的平均值?

您需要 UV 映射。
您可以在建模软件中编辑模型以添加 UV 坐标,也可以按照 here.
发布的答案生成它们 我想另一种选择是创建自己的着色器,在不使用 UV 坐标的情况下将纹理映射到模型表面。