2016-05-27 83 views
0

我與three.js一起去。我想將圖像作爲紋理應用於對象,但由於某種原因,當我應用圖像時,我似乎只能獲得圖像的主色。我環顧網絡,找不到有類似問題的人。Three.js使用圖像主色而不是圖像本身

你可以從JSON文件看,我利用「mapDiffuse」可變圖像試過,然後我嘗試使用的代碼應用的質地和我得到相同的結果

這將在JSON對象文件:

{ 

"metadata" : 
{ 
    "formatVersion" : 3.1, 
    "sourceFile" : "newBox.obj", 
    "generatedBy" : "OBJConverter", 
    "vertices"  : 8, 
    "faces"   : 6, 
    "normals"  : 6, 
    "colors"  : 0, 
    "uvs"   : 0, 
    "materials"  : 1 
}, 

"scale" : 1.000000, 

"materials": [ { 
    "DbgColor" : 15658734, 
    "DbgIndex" : 0, 
    "DbgName" : "Material.002", 
    "colorDiffuse" : [0.64, 0.64, 0.64], 
    "colorSpecular" : [0.5, 0.5, 0.5], 
    "illumination" : 2, 
    "mapDiffuse" : "test.JPG", 
    "opacity" : 1.0, 
    "opticalDensity" : 1.0, 
    "specularCoef" : 96.078431 
}], 

"vertices": [1.000000,-1.000000,-1.000000,1.000000,-1.000000,1.000000,-1.000000,-1.000000,1.000000,-1.000000,-1.000000,-1.000000,1.000000,1.000000,-0.999999,0.999999,1.000000,1.000001,-1.000000,1.000000,1.000000,-1.000000,1.000000,-1.000000], 

"morphTargets": [], 

"morphColors": [], 

"normals": [0,-1,0,0,1,0,1,0,0,-0,-0,1,-1,-0,-0,0,0,-1], 

"colors": [], 

"uvs": [[]], 

"faces": [35,0,1,2,3,0,0,0,0,0,35,4,7,6,5,0,1,1,1,1,35,0,4,5,1,0,2,2,2,2,35,1,5,6,2,0,3,3,3,3,35,2,6,7,3,0,4,4,4,4,35,4,0,3,7,0,5,5,5,5] 

}

這是我的javascript:

var scene = new THREE.Scene(); 
var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000); 
var renderer = new THREE.WebGLRenderer({alpha:true}); 
renderer.setSize(window.innerWidth, window.innerHeight); 
document.body.appendChild(renderer.domElement); 
var mesh; 

/** 
* Texture 
*/ 
var texture = THREE.ImageUtils.loadTexture("/files/test/Three-js-examples-images-crate.jpg"); 
var material = new THREE.MeshBasicMaterial({ map : texture }); 


// instantiate a loader 
var loader = new THREE.JSONLoader(); 

// load a resource 
loader.load(
    // resource URL 
    '/files/test/untitled.json', 
    // Function when resource is loaded 
    function (geometry) { 
     mesh = new THREE.Mesh(geometry,material); 
     mesh.scale.x = 0.8; 
     mesh.scale.y = 0.8; 
     mesh.scale.z = 0.8; 
     scene.add(mesh); 
    } 
); 

camera.position.z = 5; 

function render() { 
    requestAnimationFrame(render); 
    mesh.rotation.x += 0.0001; 
    mesh.rotation.y += 0.01; 

    renderer.render(scene, camera); 
} 
render(); 

這是我得到的結果(從Photoshop其streched)

enter image description here

這是我想用

enter image description here

回答

1

如果你想紋理應用到圖像json加載的模型,你的json文件必須指定UV。

three.js r.77

+0

這是我可以在攪拌機內指定的東西嗎? – Vilius

+0

是的。快速搜索會出現一系列教程。 – user01

0

我遇到了這個問題。它不顯示圖像的「顏色主導」顏色,它顯示左下角的像素。瞭解如何將圖像映射到webgl中的紋理對此很有幫助。

你得到一個純色的原因是因爲你導入的模型沒有UV座標(一個紋理座標的奇特術語,我假設它來自紋理矢量變量s,t,u,v 「你可能已經看到過)與模型數據一起輸出。

如果您檢查Blender的JSON導出,在您的無UV版本中,您應該注意到UV陣列實際上是空的。如果您導出像立方體一樣簡單的東西以減少噪音,則更容易驗證。

從Blender導出模型時,需要導出爲'幾何'而不是'BufferGeometry'。這將啓用「面材」複選框,您應該檢查。然後檢查你導出的JSON,你會看到一個填充的uv數組;這些是您的紋理座標,您應該可以應用紋理而不會出現問題。

我強烈建議閱讀關於紋理here的WebGL基礎知識頁面。

相關問題