three.js - 在three.js中渲染具有部分透明纹理的平面阴影
问题描述
我正在尝试使用最新版本的three.js(r102)渲染阴影,但我不确定我做错了什么。我正在使用 MeshPhongMaterial 和 castShadow 并在所有相关网格上设置 receiveShadow,以及朝向场景内容的定向光。有人可以看看这个并帮助我弄清楚如何让这些阴影工作吗?谢谢!
现场演示(在菜单中切换阴影): https ://argonjs.github.io/three-web-layer/
解决方案
如果在 WebLayer3D 前面添加一个小立方体,它会正确地在渲染的 DOM 层上投射阴影:
//in app.ts just after light with shadow camera:
let geometryBox = new THREE.BoxBufferGeometry( 0.01, 0.01, 0.01 )
let materialRed = new THREE.MeshPhongMaterial( {color: 0xff0000} )
let cubeSmall = new THREE.Mesh( geometryBox, materialRed )
cubeSmall.position.set( 0.1, -0.03, 0.1 )
cubeSmall.castShadow = true
cubeSmall.receiveShadow = true
scene.add( cubeSmall )
因此,只有 WebLayer3D 生成的平面不会投射阴影,场景/相机/灯光的设置是正确的。
更新:下面的解释不是原因,请参阅material.shadowSide
另一个答案中的解决方案。
如果您查看 three.js 领域中的对象树(即遍历children[]
),从todoLayer
- 开始,其中很多将具有castShadow
“false”。您将不得不在这里重新考虑您的策略。另请注意,castShadow=false
在父 Object3D 上为子级将其关闭。
推荐阅读
- wordpress - ACF 渲染块使 wp 中的编辑页面不读取任何 CSS
- yellowbrick - 如何更改黄砖地块中的标记?
- artificial-intelligence - 如何使用 4x4 tic tac toe 的 minimax 算法使 AI 更有效?
- tomcat - 为什么有些 HTTP/HTTPS 随机以 1|X 开头?
- vue.js - Toggle Boolean like toggling classlist Vue 2
- c++ - 如何在犰狳中序列化稀疏矩阵并与提升的 mpi 实现一起使用?
- logstash - 使用 Logstash 支持不同类型的日志
- apache-superset - Superset 用户无法使用其他用户创建的切片创建仪表板
- mysql - MySql 生成一列值
- c# - 如何检索 System.ValueTuple 的程序集版本?