我正在使用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可能非常低。我没有深入研究进一步的原因,如果有人发现了,请让我知道~