Почему Three.js Pointcloud не одинаковый рендеринг между Mac и Windows (Intel HD Graphics 4000)? - PullRequest
0 голосов
/ 30 октября 2018

Я занимаюсь разработкой огромного PointCloud Viewer (более 10 миллионов) с использованием Three.js. Но я получил странный результат - не то же самое рендеринг между Mac и Windows.

ниже цифра на Mac В Mac и следующий рисунок В Windows в Windows (7).

оба используют Intel HD Graphics 4000. Что происходит в браузере Chrome?

Дополнительная информация: та же ситуация с iPhoneSE, iPhoneX, iPad4, MacBook, MacBookAir и MacBookPro. эти машины отображают очень разреженное облако точек (графические системы Intel HD обычно)

Но только iMac (2017) успешно отображает огромное облако точек. Он использует Radeon Pro 555, а не Intel GPU.

Я хочу получить любое сообщение об информации или / и об ошибке, но нет ошибки в "chrome_debug.log"

=== П.С. === под моим кодом

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,
    });
}

=== П.П.С. === Для всех

Попытка ошибки, прежде чем я найду, как ее решить. Когда pointMaterial.sizeAttenuation = false, перспективный вид FAR на Mac аналогичен Windows. Тем не менее, БЛИЖАЙШИЙ перспективный вид становится разреженным облаком точек. Но если бы БЛИЖАЙШАЯ перспектива, создавая с помощью pointMaterial.sizeAttenuation = true, я получаю результат лучше, чем раньше.

Большое спасибо за ваше предложение.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Ваша проблема - плотность пикселей на устройствах Mac. Устройства Mac часто имеют отношение пикселей 2 или выше на дисплеях сетчатки. Когда вы объявляете pointsMaterial.size , вы сообщаете ему, насколько велика каждая точка в пикселях, поэтому убедитесь, что вы учитываете window.devicePixelRatio при назначении их размера в пикселях. Что-то вроде

pointsMaterial.size = mySize * window.devicePixelRatio;

должен сделать трюк.

0 голосов
/ 30 октября 2018

Как на рабочей, так и на сбойной конфигурации, посетите http://webglreport.com/?v=1 и проверьте значение расширения OES_element_index_uint . Я предполагаю, что это расширение не поддерживается на сбойном компьютере / комбинации ОС (поддержка драйверов отсутствует в MacOS).

Это расширение требуется Three.js для рендеринга более 64 тыс. Вершин из одной BufferGeometry. На машинах, которые не поддерживают это расширение, вам нужно разделить свою геометрию.

...