为什么three.js点云在mac和windows(英特尔高清显卡4000)之间的渲染不一样



我正在使用Three.js开发巨大的PointCloud查看器(超过1000万(。但是,我得到了一个奇怪的结果——mac和windows之间的渲染不一样。

下图在Mac上在Mac上,下一个图形在windows上的windows上(7(。

两者均使用Intel HD显卡4000。Chrome浏览器中发生了什么?

附加信息:同样的情况是iPhoneSE,iPhoneX,iPad4,MacBook,MacBookAir和MacBookPro。那些机器显示非常稀疏的点云(通常是英特尔高清图形系列(

但是,只有iMac(2017(成功地显示了巨大的点云。它使用Radeon pro 555,而不是英特尔GPU。

我想要任何关于信息或/和错误的消息,但在"chrome_debug.log"中没有错误

===p.S.===低于我的代码

if(data.point.position.length>0){
var geometry = new THREE.BufferGeometry();
geometry.addAttribute('position', new  THREE.BufferAttribute(data.point.position, 3));
geometry.addAttribute('color', new THREE.BufferAttribute(data.point.color, 3));
var material = new THREE.PointsMaterial({
vertexColors: THREE.VertexColors,
size:0.8,
sizeAttenuation : true,
});
}

===p.p.S===对于所有

尝试并出错,然后我才能找到解决方法。当pointMaterial.sizeAttenuation=false时,在Mac上的FAR透视图就像在Windows上一样。然而,NEAR透视图变成了稀疏的点云。但如果NEAR透视图,用pointMaterial.sizeAttenuation=true创建,我得到了比以前更好的结果。

非常感谢你的建议。

对于工作配置和失败配置,请访问http://webglreport.com/?v=1并检查OES_element_index_uint扩展名的值。我的假设是,失败的机器/OS组合不支持此扩展(MacOS上缺少驱动程序支持(。

three.js需要此扩展才能从单个BufferGeometry渲染超过64k个顶点。在不支持此扩展的机器上,您需要拆分几何体。

您的问题是Mac设备上的像素密度。Mac设备在视网膜显示器上的像素比例通常为2或更高。当你声明pointsMaterial.size时,你会告诉它每个点的像素大小,所以在分配它们的像素大小时,一定要考虑window.devicePixelRatio。类似的东西

pointsMaterial.size = mySize * window.devicePixelRatio;

应该做到这一点。

对于Chrome用户,禁用"当可用时使用硬件加速";可以解决稀疏点云问题,但fps可能非常低。我没有深入研究进一步的原因,如果有人发现了,请让我知道~

最新更新