2016-01-21 98 views
4

纹理应用到定制的几何我成功地应用于纹理的立方体形状与此:如何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); 

有了这个,我得到一个不错的质感的立方体这样的:

enter image description here

现在我想相同的纹理(512 * 512的JPG图片)适用于我从STL加载定制模型,这是我得到了(在这种情况下,金字塔):

enter image description here

这是代码:

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); 
     }); 

为什么没有被应用的质地和我只得到什么似乎是纹理颜色的平均?

+1

您的模型是否具有UV坐标? – 2pha

+0

@ 2pha不,这是一个STL模型,我需要UV映射吗? – Andres

+0

是的。如果没有UV贴图,着色器不知道将图像的哪个部分放置在模型的哪个位置。 – 2pha

回答

3

您需要UV贴图。
您可以在建模软件中编辑模型以添加UV坐标,也可以在发布的答案here中找到答案。
我想另一种选择是创建自己的着色器,将纹理映射到模型表面而不使用UV坐标。

+1

有没有什么办法可以像上面的链接一样编程生成UV贴图,但对于非平面曲面?我不在乎纹理是否有点偏移 – Andres

+1

您将不得不应用某种其他类型的[投影方法](http://softimage.wiki.softimage.com/xsidocs/tex_basicproc_TypesofTextureProjection.htm),但可能不会用作所有模型的一般方法。这就是为什么有这么多UV映射软件包可用。 – 2pha