JavaFX Programação Exemplo: Box 3D
JavaFX tem suporte embutido para modelagem 3D realista. Na verdade, o cenário gráfico JavaFX é tridimensional na natureza. A maioria dos programas JavaFX trabalhar em apenas duas dimensões, especificando apenas X e Y coordenadas. Mas tudo que você tem que fazer para entrar na terceira dimensão é especificar coordenadas z para colocar os nós de seu grafo de cena no espaço tridimensional.
JavaFX inclui um rico conjunto de classes que se dedicam à criação e visualização de objetos 3D em mundos 3D. É possível criar formas tridimensionais, tais como cubos e cilindros. Você pode mover a câmera virtual em torno dentro do espaço 3D para olhar para os seus objetos 3D a partir de diferentes ângulos e perspectivas diferentes.
E você pode até mesmo adicionar fontes de iluminação para controlar cuidadosamente a aparência final de seus mundos virtuais. Em suma, o JavaFX é capaz de produzir cenas 3D surpreendentes.
Adicione uma caixa 3D para o seu mundo Java
Neste passo, adicionar um objecto para o mundo 3D: Neste caso, uma caixa, representado pela Caixa classe. Aqui está o código:
caixa = new Box (100, 100, 100)-box.setMaterial(blueStuff)-box.setTranslateX(150)-box.setTranslateY(-100)-box.setTranslateZ(-100)-root.getChildren().add(box)-
o Caixa construtor aceita três argumentos que representam a largura, altura e profundidade da caixa. Neste exemplo, todos os três são definidos como 100. Assim, a caixa vai ser desenhada como um cubo com cada lado medindo 100 unidades.
A caixa é dado o mesmo material que o do cilindro, em seguida, é traduzido em todos os três eixos, de modo que você pode ter uma vista em perspectiva da caixa. A figura mostra como a caixa aparece quando prestados. Como você pode ver, os rostos da esquerda e da parte inferior da caixa são visíveis porque você traduziu a posição da caixa para cima e para a direita para que a câmara possa ganhar alguma perspectiva.
Gire a caixa 3D
Nesta etapa, gire a caixa para criar uma visão ainda mais interessante perspectiva. Há duas maneiras para girar um objeto 3D. O mais simples é chamar o objeto de setRotate método e fornecer um ângulo de rotação:
box.setRotate (25) -
Por padrão, isso irá girar o objeto em seu eixo z. Se este é difícil de visualizar, imaginar skewering o objecto com uma vara comprida que é paralela ao eixo z. Em seguida, girar o objeto no espeto.
Se você deseja girar o objeto ao longo de um eixo diferente, primeiro chame o setRotationAxis. Por exemplo, para girar o objeto em seu eixo-x, usar essa seqüência:
box.setRotationAxis (Rotate.X_AXIS) -box.setRotate (25) -
Imagine correr o espeto através da caixa com o espeto paralela ao eixo x e depois girar a caixa de 25 graus.
O único problema com o uso do setRotate método para girar um objeto 3D é que ele funciona somente em um eixo de cada vez. Por exemplo, suponha que pretende rodar a caixa de 25 graus em ambos o Z e o eixo-x. O código a seguir não alcançar este objetivo:
box.setRotationAxis(Rotate.X_AXIS)-box.setRotate(25)-box.setRotationAxis(Rotate.Z_AXIS)-box.setRotate(25)-
Quando o setRotate método é chamado o segundo tempo para girar a caixa no eixo z, a rotação do eixo x é reposto.
Para girar em mais de um eixo, você deve usar o Rodar classe em vez. Você cria uma separada Rodar instância para cada eixo que deseja girar o objeto sobre e em seguida, adicione todos os Rodar instâncias para o objeto do transforma através da recolha getTransforms (). addAll método, como este:
Rodar rxBox = new Girar (0, 0, 0, 0, Rotate.X_AXIS) -Rotate RYBOX = new Girar (0, 0, 0, 0, Rotate.Y_AXIS) -Rotate rzBox = new Girar (0, 0, 0, 0, Rotate.Z_AXIS)-rxBox.setAngle(30)-ryBox.setAngle(50)-rzBox.setAngle(30)-box.getTransforms().addAll(rxBox, RYBOX, rzBox) -
o Rodar construtor aceita quatro parâmetros. Os três primeiros são o x, y, e z-coordenadas do ponto dentro do objeto através do qual o eixo de rotação vai passar. Normalmente, você especificar zeros para esses parâmetros para girar o objeto ao redor do seu ponto central. O quarto parâmetro especifica o eixo de rotação.
Esta figura mostra como a caixa aparece depois de ter sido rodado.