2013-12-21 4 views
2

Я создал стрелу с моими собственными вершинами и индексами, после чего я установил цвет материала и цвет материала в красный цвет. Я не вижу цвет материала в рендере. просто черный.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

Геометрия не ТРИ. Кубическая геометрия - это ТРИ. ГЕОМЕТРИЯ. –

+0

Пожалуйста, замените вашу 'arrowGeometry' на' THREE.CubeGeometry' и ответьте на мой оригинальный вопрос. – 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

Этого не должно быть. Какую ревизию вы используете? – WestLangley

+0

Версия 71 Я верю. – neilw

+0

Если вы можете продемонстрировать ошибку three.js, как вы описали, было бы полезно, если бы вы сообщили об этом. См. «Как сообщить об ошибке» в [рекомендации] (https://github.com/mrdoob/three.js/blob/master/CONTRIBUTING.md). – WestLangley

Смежные вопросы