javascript - three.js 兰伯特 Material 颜色不显示

标签 javascript three.js

我用我自己的顶点和索引创建了一个箭头,然后我将 lambert Material 和 Material 颜色设置为红色。我在渲染中看不到 Material 颜色。只是黑色。

但是,如果我将 Material 设置为基本 Material ,我可以看到颜色。

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

最佳答案

首先,在使用 THREE.LambertMaterial 时,您需要在场景中添加一些灯光。

如果您的场景中确实有灯光,并且您通过创建顶点和面自己创建了几何体,问题很可能在于您的面法线设置为 Vector3( 0, 0, 0 );

计算并设置您的面部法线,它们应该正确渲染。

所以对于单个三 Angular 形,它看起来像这样:

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

关于javascript - three.js 兰伯特 Material 颜色不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20723040/

相关文章:

javascript - Vue 中测量溢出不正确

javascript - Three.js - 获得低多边形外观

javascript - 重复将新的 DOM 内容保存到同一个文本文件中

javascript - 半透明线不一致地显示为不透明

javascript - Three.js:如何将场景的 2D 快照制作为 JPG 图像?

three.js - 如何在从 OBJLoader 加载的 obj 文件上获取鼠标单击位置?

javascript - 三个js合并Geometries和Mesh

Javascript setInterval 函数不会停止

javascript - 如何使用javascript在每次点击时向html内容添加1

javascript - Android 上的 Chrome 无法播放对象 URL 中录制的音频