2013-12-21 82 views
2

我用自己的頂點和索引創建了一個箭頭,然後我將lambert材質和材質顏色設置爲紅色。我無法在渲染中看到材質顏色。只是黑色。three.js lambert材料顏色沒有顯示

但是,如果我設置材料爲基本材料,我可以看到顏色。

arrowMesh = new THREE.Mesh(
    arrowGeometry, 
    new THREE.MeshLambertMaterial({ color : 'red', side: THREE.DoubleSide }) 
); 
arrowMesh.position.set(-10,5,95); 
arrowMesh.rotation.x = -1.0; 

arrowMesh.rotation.z = -0.2; 
scene.add(arrowMesh); 

three.js所R64

+0

如果幾何體是'THREE.CubeGeometry',顏色是否顯示爲紅色? – WestLangley

+0

幾何不是THREE.CubeGeometry它是THREE.Geometry。 –

+0

請用'THREE.CubeGeometry'替換你的'arrowGeometry'並回答我原來的問題。 – WestLangley

回答

0

我解決我的問題是這樣的。

var ground_texture = THREE.ImageUtils.loadTexture('images/grass.png', {}, function() { 
    renderer.render(scene,camera); 
}); 
ground_material = Physijs.createMaterial(
    new THREE.MeshLambertMaterial({map : ground_texture}), 
    .9, // high friction 
    .9 // low friction 
); 

我在這個網站上找到了這個解決方案。

5

首先,使用THREE.LambertMaterial當你需要在場景中一些燈光。

如果您在場景中有燈光和你自己創建的頂點創建的幾何和麪臨的問題在於最有可能在你的面法線被設置爲Vector3(0, 0, 0);

Caculate和設置您的面法線和事實他們應該正確渲染。

所以對於一個三角形它是這樣的:

var geometry = new THREE.Geometry(); 
geometry.vertices = [ a, b, c ]; 

var face = new THREE.Face3(0, 1, 2); 

face.normal = new THREE.Vector3().crossVectors(
    new THREE.Vector3().subVectors(b, a), 
    new THREE.Vector3().subVectors(c, b) 
).normalize(); 

var mesh = new THREE.Mesh(geometry, new THREE.MeshLambertMaterial({color: 0xff0000, side: 2, shading: THREE.FlatShading})); 

而不是做這手動,您還可以使用計算它們的幾何方法:

geometry.computeFaceNormals(); 
geometry.computeVertexNormals(); 
2

我遇到同樣的問題在我的機器上,並發現PointLight是罪魁禍首。將「距離」設置爲零(或將其保留爲默認值)會導致指示燈完全熄滅。明確地將距離設置爲很大一部分打開了燈光,然後我所有的蘭伯特材料都正常出現。

所以,與其

pointLight = new THREE.PointLight(0xFFFFFF); 

我用

pointLight = new THREE.PointLight(0xFFFFFF, 1, 100000); 

,一切都固定。據我目前所知,這個問題僅限於PointLight,並且是依賴於機器的(GPU或GPU驅動程序,不確定是哪個)。但是很容易就可以在那裏投入一個大數字並避免這個問題。

+0

這不應該發生。你使用的是什麼版本的three.js? – WestLangley

+0

版本71我相信。 – neilw

+0

如果您已經描述過可以演示three.js錯誤,那麼報告它會有所幫助。請參閱[準則](https://github.com/mrdoob/three.js/blob/master/CONTRIBUTING.md)中的「如何報告錯誤」。 – WestLangley