gpt4 book ai didi

javascript - 三.js MeshPhongMaterial线框光照

转载 作者:行者123 更新时间:2023-12-03 04:30:36 24 4
gpt4 key购买 nike

当我尝试在 arrayBufferGeometry 上使用线框查看 meshphongmaterial 时,其中 vetexColors 设置为 THREE.vertexColors;照明仅适用于 1 个随机面。当我切换到 MeshBasicmaterial 时,我得到了所需的行为。将线框设置为 false 后,phong Material 看起来不错并且被点亮:

 geometry.addAttribute('position', new THREE.BufferAttribute(vertices, 3));
geometry.addAttribute('color', new THREE.BufferAttribute(colors, 3));
geometry.computeFaceNormals();
geometry.computeVertexNormals();

console.log(geometry);
var material = new THREE.MeshBasicMaterial({
side: THREE.DoubleSide,
wireframe: true,
transparent: false,
vertexColors: THREE.VertexColors, // CHANGED
shininess: 100,
// color: 0xff0000,
shading: THREE.SmoothShading
});

console.log(material);

var terrainMesh = new THREE.Mesh(geometry, material);
terrainMesh.name = 'GRD';
terrainMesh.receiveShadow = true;
terrainMesh.castShadow = true;
console.log(terrainMesh);
return terrainMesh;

我需要在 Material 之后重新计算顶点法线吗?光照适用于实体面而不适用于线框是否有原因?

最佳答案

这是一个照明问题。

我有各种灯光,环境光、代表太阳的定向光,以及跟随相机目标周围以突出显示用户正在查看的内容的聚光灯。

这些都没有正确照亮线框。然后我按照MeshPhongMaterial example看到他们使用点光源。我认为点光源和聚光灯之间的唯一区别是方向和目标。这是不正确的,因为点光源最终工作了。

另一个问题是,从点光源到线框的照明必须位于 Material 的正面(无论 MeshPhongMaterial 中的侧面属性如何),而不能来自背面。我的几何体朝下,因为加载的文件格式与标准相反。点光源必须位于几何体下方才能照亮 Material 。我最终添加了一个反向太阳型光,使用点光源从下方照亮几何体。

我仍然不明白为什么线框仅由 PointLight 照亮,以及为什么它不从后面照亮 THREE.DoubleSide。

关于javascript - 三.js MeshPhongMaterial线框光照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43508382/

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