gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:02:54 26 4
gpt4 key购买 nike

我用我自己的顶点和索引创建了一个箭头,然后我将 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com