Javafx: adicionar um objeto de malha para um mundo 3d

Os objetos que você pode mais simplesmente adicionar ao seu mundo JavaFX virtuais são criadas usando os três built-in classes de forma 3D que vêm com JavaFX: Cilindro

, Caixa, e Esfera. Para objetos mais complexos, você deve usar o TriangleMesh classe para criar o objeto baseado em uma série conectada de triângulos.

Video: Colocar objetos 3D na Cena | After Effects | Cinema 4D Lite

Aqui, criar um dos mais simples de todos os objetos de malha: a pirâmide de quatro lados retratado aqui. Visualmente, uma pirâmide de quatro lados tem um total de cinco rostos: as quatro faces laterais triangulares e a base quadrada. Mas em uma malha JavaFX triângulo, quadrados não são permitidos, apenas triângulos. Assim, a pirâmide na verdade consiste de seis faces: as quatro faces laterais triangulares e dois triângulos adjacentes que compõem o rosto.

Esta seção apresenta informações bastante conceitualmente difícil. Se você não estudou malhas em uma classe de Computação Gráfica, estar preparado para ler os parágrafos seguintes várias vezes antes que ele começa a fazer sentido.

Se ainda assim não faz sentido, pegue um latte, puxe uma folha de papel milimetrado, e começar a rabiscar. Desenhando a pirâmide com a sua própria mão vai ajudar a sua compreensão. Tente usar um lápis.

A pirâmide quadrada em JavaFX.

Video: JavaFX: Shapes, Animation, Lambda Expressions

A pirâmide quadrada em JavaFX.

Para chegar a pirâmide começou, ligue para o TriangleMesh construtor como este:

TriangleMesh pyramidMesh = new TriangleMesh () -

Para completar a pirâmide, você precisa preencher três coleções que definem a geometria da malha. Essas coleções manter os pontos, os rostos e as coordenadas de textura que definem a forma.

Video: Container terminal monitoring with 3D JavaFX

Comece com a textura coleção coordenar, porque você pode muito bem ignorá-lo por este simples pirâmide. coordenadas de textura são úteis quando você está usando um material que contém uma imagem que deve ser esticado de uma maneira específica sobre a estrutura da malha. Eles permitem que você associar um X específico, coordenada y na imagem com cada canto de cada face.

Infelizmente, você não pode simplesmente deixar de fora as coordenadas de textura, mesmo se você não precisa deles, então você deve carregar pelo menos uma coordenada. Fazer isso com esta linha de código:

. PyramidMesh.getTexCoords () addAll (0,0) -

Agora passar para as outras duas coleções. O próximo é uma coleção do vértices (Isto é, os cantos) que define a forma. Sua pirâmide quadrada tem cinco vértices, que você pode imaginar como o topo, no canto frontal (o ponto mais próximo de você), no canto esquerdo, no canto de volta, e no canto direito. Estes vértices são numerados de 0, 1, 2, 3, e 4.



Dada a altura h e o comprimento s de cada lado da pirâmide, é possível calcular as coordenadas x, y, e z coordenadas de cada vértice usando as seguintes fórmulas:

VérticeCantoXYZ
0Topo000
1Frente0h-s / 2
2Esquerda-s / 2h0
3Costass / 2h0
4Certo0hs / 2

Com tudo isso como pano de fundo, aqui está o código para criar a coleção Pontos:

Video: JavaFX 2D Snake game

flutuar h = 150 - // Heightfloat s = 300 -. // SidepyramidMesh.getPoints () addAll (0,0,0, // Ponto 0 - Top0, h, -s / 2, // Ponto 1 - Front-s / 2, h, 0, // Ponto 2 - Lefts / 2, h, 0, // Ponto 3 - Back0, h, s / 2 // Ponto 4 - Direita) -

A recolha final define as faces. As faces são definidos especificando o índice de cada vértice que torna-se cada face. Por exemplo, a face frontal esquerda é um triângulo cujos três vértices são o topo, frente e à esquerda. Os índices para estes três vértices são 0, 2, e 1.

Há um total de seis triângulos na pirâmide, e os seus rostos são definidos pelos seguintes pontos:

Caraponto 1ponto 2ponto 3
Dianteiro esquerdo021
Frente direita013
traseira direita034
traseira esquerda042
parte inferior traseira412
frontal inferior432

Embora possa não ser evidente a partir desta tabela, a ordem na qual os rostos aparecem é fundamental para o sucesso da malha. Em geral, os rostos estão listados em um sentido anti-horário e ordem descendente. Assim, as quatro faces laterais enrole em torno da pirâmide de modo anti-horário. Eles são seguidos pelas duas faces inferiores.

Cada face na colecção enfrenta é representada por três pares de números, cada uma das quais representa o índice de um dos vértices do triângulo e o índice da textura correspondente de coordenadas.

Porque você tem apenas um item na textura coordenar a coleta, o segundo número em cada par será sempre zero. Assim, a sequência de 0, 0, 2, 0, 1, 0 define a face frontal esquerda: Os índices de vértice são de 0, 2, e 1, e a textura de coordenadas índices são todos 0.

Aqui está o código para carregar a coleção Faces:

pyramidMesh.getFaces (). addAll (0,0, 2,0, 1,0, // frontal esquerda face0,0, 1,0, 3,0, // face0,0 dianteiro direito, 3,0, 4, 0, // face0,0 traseira direita, 4,0, 2,0, // face4,0 Voltar à esquerda, 1,0, 2,0, // face4,0 traseira inferior, 3,0, 1,0 / / face frontal inferior) - 

Após as três coleções da malha estiver pronto, o resto do código dá conta da pirâmide, adicionando um material Phong, traduz a pirâmide para tirá-lo do centro da cena, e adiciona a pirâmide para a raiz:

MeshView pirâmide = novo MeshView (pyramidMesh) -pyramid.setDrawMode (DrawMode.FILL) -pyramid.setMaterial (Bluestuff) -pyramid.setTranslateX (200) -pyramid.setTranslateY (100) -pyramid.setTranslateZ (200) -root.getChildren ( ) .add (pirâmide) -

Publicações relacionadas