three.js - Three.js透明点云没有正确融合点
问题描述
我正在尝试使用THREE.Points
为数据可视化创建点云。我想让这些点透明,以便查看者可以了解这些点在特定区域中的密集程度。我正在使用球体几何和添加剂混合进行测试。
问题在于,显示为正方形的某些点与它们前面的点正确融合,而其他点则被它们前面的点隐藏。出于某种原因,混合在球体的下半部分似乎无法正常工作,这很奇怪,因为我没有使用任何灯光,而且它应该是对称的。我不确定为什么会发生这种情况或如何解决它。
链接到代码草图:https ://glitch.com/edit/#!/cloudy-chambray-leotard?path=main.js%3A22%3A0
直视球体:
从上往下看时,似乎也存在左右对称问题:
从球体底部向上看,我得到了想要的结果:
解决方案
WebGL 的透明度很棘手,因为透明对象写入深度图,并且渲染器假定第一个精灵后面的其他精灵是隐藏的,因此它会跳过绘制它们。在这种情况下,绘制顺序非常重要,每次旋转相机时从后向前排列精灵将是一场噩梦。
解决问题的最简单方法是设置depthWrite: false
材质,这样每个精灵都不会写入深度图。然后不管他们在前面还是后面,他们都会被吸引。
推荐阅读
- android - 无法将cordova项目与手机连接
- c# - 我们是否有任何替代方法 `ecdsa.ExportECPrivateKey` 在 .Net Preview(3.0) 中
- ios - 如何在导出视频合成时暂停和恢复 AVAssetExportSession
- python - Python:在列表中创建换行符以供 openpyxl 在 .xlsx 中识别
- java - 如何添加 Java 8+。在 android 项目中使用 Maven 构建
- javascript - 带有 cron 的 Javascript
- angular - 如何在没有 HammerJS 的情况下使用 Angular Material
- java - 计算数组中最长排序子序列的问题
- angular - 如何修复无法读取 Angular 中未定义的属性
- javascript - 将 Javascript 嵌入批处理文件以清除 Internet Explorer SSL 状态