2015-08-11 3 views
0

В настоящее время я рисую единственную прозрачную трехмерную сетку, сгенерированную с помощью алгоритма маршевых кубов, с целью иметь больше объектов после исправления проблемы.3D Transparency JavaFX не смешивает все треугольники в сетке

Как бы то ни было, я могу нарисовать 3d-формы отлично, но когда я реализую прозрачность (в моем случае изменяя непрозрачность сетки PhongMaterial), я получаю странный эффект, когда только несколько треугольников отображаются за другим треугольником.

см. Пример.

http://i.imgur.com/1wdmYYs.png (извините, я не смог опубликовать изображение непосредственно, из-за репутации)

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

Красный - это все равно сетка, выполненная таким же образом.

В настоящее время я использую окружающий свет, если это имеет значение.

Некоторые примеры кода:

MeshView mesh = generate Mesh Data via marching cube; 
mesh.setCullFace(CullFace.None); 

PhongMaterial mat = new PhongMaterial(1, 0, 0, 0.5d); 

AmbientLight light = new AmbientLight(); 
light.setColor(new Color(1, 0, 0, 0.5)); // I dont believe the alpha makes a difference 
light.setOpacity(0.5); 


mesh.setMaterial(mat); 
group.getChildren().addAll(light, mesh); 
+1

В какой версии JDK вы используете ? Обратите внимание, что прозрачность работает на основе порядка узлов на сцене, как вы можете видеть в этом вопросе (http://stackoverflow.com/a/30213869/3956070) –

+0

Я использую JDK8u60 b15 Я считаю. Я попробую обновиться до последней сборки и посмотреть, что-нибудь изменится. В этом примере я представляю только одну сетку, поэтому только один узел. – jogden16761

+0

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

ответ

0

Прозрачность работает только правильно, когда грани треугольника сортируются по расстоянию до камеры. Это артефакт того факта, что потребительские 3D-карты разбивают любую сцену на треугольники и поэтому могут отображать каждый отдельно. Это позволяет одновременно создавать сотни треугольников, когда у вас есть сотни ядер. Старые карты показывают количество треугольников/секунд, которые они могут отображать.

На более современных картах часть рендеринга треугольника была перенесена на драйвер, который использует векторные двигатели на карте для расчета цвета каждой точки в программном обеспечении. Это по-прежнему быстро, так как вы можете иметь более 1000 векторных процессоров, а также позволяет создавать сложные программы, которые изменяют каждую вершину/пиксель, прежде чем они будут сохранены в памяти, что позволяет создавать блестящие поверхности и т. Д.

+0

Я считаю, что ты прав. (интересная ссылка для тех, кто с той же проблемой http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-10-transparency/) Знаете ли вы какие-либо методы, которые я мог бы использовать для заказа лиц? Если бы я писал это в OpenGL, я мог бы изменить порядок на движение камеры, но учитывая, что я использую график сцены javafx, мне все равно нужно переупорядочить за обновление или сделать javafx обработкой графики по-разному? – jogden16761

+0

Мне было интересно. Как я вижу, это обычная/стандартная проблема, и для сортировки треугольных полосок должен быть простой стандартный метод, но Google ничего не вызывает. Может, задать новый вопрос? –

+0

Думаю, мне просто нужно. Приветствия за помощью. – jogden16761

Смежные вопросы