2016-01-21 102 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