diff --git a/modules/fxml/src/main/java/com/sun/javafx/fxml/builder/TriangleMeshBuilder.java b/modules/fxml/src/main/java/com/sun/javafx/fxml/builder/TriangleMeshBuilder.java --- a/modules/fxml/src/main/java/com/sun/javafx/fxml/builder/TriangleMeshBuilder.java +++ b/modules/fxml/src/main/java/com/sun/javafx/fxml/builder/TriangleMeshBuilder.java @@ -26,6 +26,7 @@ package com.sun.javafx.fxml.builder; import javafx.scene.shape.TriangleMesh; +import javafx.scene.shape.VertexFormat; import javafx.util.Builder; import java.util.Locale; @@ -39,8 +40,10 @@ private float[] points; private float[] texCoords; + private float[] normals; private int[] faces; private int[] faceSmoothingGroups; + private VertexFormat vertexFormat; @Override public TriangleMesh build() { @@ -57,6 +60,12 @@ if (faceSmoothingGroups != null) { mesh.getFaceSmoothingGroups().setAll(faceSmoothingGroups); } + if (normals != null) { + mesh.getNormals().setAll(normals); + } + if (vertexFormat != null) { + mesh.setVertexFormat(vertexFormat); + } return mesh; } @@ -87,6 +96,18 @@ for (int i = 0; i < split.length; ++i) { faceSmoothingGroups[i] = Integer.parseInt(split[i]); } + } else if ("normals".equalsIgnoreCase(key)) { + String[] split = ((String) value).split(VALUE_SEPARATOR_REGEX); + normals = new float[split.length]; + for (int i = 0; i < split.length; ++i) { + normals[i] = Float.parseFloat(split[i]); + } + } else if ("vertexformat".equalsIgnoreCase(key)) { + if ("point".equalsIgnoreCase((String)value)) { + vertexFormat = VertexFormat.POINT_TEXCOORD; + } else if ("point_normal".equalsIgnoreCase((String)value)) { + vertexFormat = VertexFormat.POINT_NORMAL_TEXCOORD; + } } return super.put(key.toLowerCase(Locale.ROOT), value);