2013-09-06 2 views
0

В моем приложении у меня проблемы с z-буфером. У меня есть ParticleSystem, в которой точки имеют текстуру, которая будет выглядеть как сферы. Но есть две проблемы, которые я не могу решить одновременно ...Проблема с Z-буфером с BufferGeometry в ParticleSystem

Либо сферы были отсортированы прямо в z-буфере, но не прозрачны или прозрачны, но не отсортированы правильно!

Пожалуйста, взгляните на мой JSfiddle. (на основе this example от mrdoob)

В исходном примере все выглядит хорошо. Но, как вы можете видеть на моей скрипке, текстура не прозрачна, поэтому скрывается части частиц позади нее. Я только изменил с Geometry на BufferGeometry, потому что в моем приложении я должен использовать это, чтобы избежать проблем с производительностью. Вы можете переключаться между этими двумя, изменяя мои комментарии в скрипке. И, переключаясь между Geometry и BufferGeometry, вы можете видеть, что z-буфер ломается.

Где-то в интернете я нашел это «решение»:

depthWrite : false 

, которые я добавил к материалу. Тогда частицы выглядят великолепно, но z-буфер неверен. Это сводит меня с ума ... в любом случае я узнал, что мой тип геометрии - проблема.

Так почему же пример mrdoob не работает с BufferGeometry? Что я могу сделать, чтобы получить правильные отсортированные и прозрачные частицы в моей системе?

ответ

0

Вы в замешательстве. Текстура прозрачна и остается при переключении на BufferGeometry.

Что происходит, это то, что с BufferGeometry частицы не отображаются в отсортированном порядке - они отображаются в порядке, указанном в буфере.

Если вы хотите использовать BufferGeometry, вы можете установить

material.alphaTest = 0.5. 

Тогда, в вашем случае, все должно выглядеть хорошо.

three.js r.60

+0

Спасибо! Но теперь текстура имеет артефакты. Не могли бы вы объяснить, что такое 'alphaTest'? И этот трюк, похоже, работает только во время перцептивной камеры. У меня есть вторая, орфографическая камера, для просмотра с высоты птичьего полета в моей системе, и z-buffer по-прежнему не так. Нужно ли мне делать что-нибудь еще для этой камеры? – PanChan

+0

Фрагмент не отображается, если фрагмент альфа меньше, чем 'alphaTest'. Вы должны будете сделать новое сообщение и предоставить живой пример, если у вас возникнут дополнительные проблемы. Говорить, что «есть артефакты» или буфер «неправильный», не является описательным. Я ответил на вопрос, который вы разместили здесь. – WestLangley