Порядок рендеринга BufferGeometry в Thee.js

Следуя предыдущему вопросу, я занимаюсь построением моделей в BufferGeometry и понимать, что флаг transparent влияет на порядок рендеринга: объекты с прозрачными материалами будут рендериться после непрозрачных.

Кроме того, я прочитал этот поток, провел эксперимент на JSFiddle и понял, что порядок рендеринга лиц в BufferGeometry такой же, как порядок, указанный в буферах, но не расстояние от камер. (В приведенном выше эксперименте я сначала указываю в буфере более близкий треугольник, и он перекрывает другие треугольники за ним.)

Итак, мой вопрос: можно ли вручную установить порядок рендеринга лиц в BufferGeometry? В моем случае может потребоваться динамическое изменение прозрачности элементов здания. (Я прочитал поток, в котором говорилось, что мы можем установить renderOrder для Object3D.)

Спасибо.


person Jason Yang    schedule 17.04.2016    source источник


Ответы (1)


Лица визуализируются в том порядке, в котором они появляются в BufferGeometry.

Если вам нужно динамически изменять прозрачность элементов сцены, я предлагаю вам использовать отдельные геометрии, каждая из которых сочетается со своим материалом.

Средство рендеринга сначала отобразит объекты, имеющие transparent = false. Затем он отобразит объекты, имеющие transparent = true.

Скорее всего, вы обнаружите, что у вас меньше артефактов, если вы используете следующие настройки для прозрачных материалов:

material.transparent = true;
material.opacity = 0.5; // or as desired
material.depthTest = true; // the default
material.depthWrite = false; // use for transparent materials only

Кроме того, самопрозрачность особенно сложна. Примером может служить полупрозрачный куб (или здание). Один из способов уменьшить артефакты в таких ситуациях — отрисовать объект дважды: сначала с material.side = THREE.BackSide, а затем снова с material.side = THREE.FrontSide. Вы можете использовать object.renderOrder, чтобы установить определенный порядок рендеринга между объектами.

три.js р.75

person WestLangley    schedule 17.04.2016