public Object getVertexData(int polygonIndex, int polygonVertexIndex, int positionIndex, int edgeIndex) { switch (refInfoType) { case Direct: return getVertexDataDirect(polygonIndex, polygonVertexIndex, positionIndex, edgeIndex); case IndexToDirect: return getVertexDataIndexToDirect(polygonIndex, polygonVertexIndex, positionIndex, edgeIndex); default: return null; } }
public static FbxPolygon fromIndices(List<Integer> indices) { FbxPolygon poly = new FbxPolygon(); poly.indices = listToArray(indices); return poly; } }
public static FbxLayerElement fromPositions(double[] positionData) { FbxLayerElement layerElement = new FbxLayerElement(); layerElement.index = -1; layerElement.name = ""; layerElement.type = Type.Position; layerElement.mapInfoType = MappingInformationType.ByVertex; layerElement.refInfoType = ReferenceInformationType.Direct; layerElement.data = toVector3(positionData); layerElement.dataIndices = null; return layerElement; }
public static FbxLayerElement fromElement(FbxElement element) { FbxLayerElement layerElement = new FbxLayerElement(); if (!element.id.startsWith("LayerElement")) { throw new IllegalArgumentException("Not a layer element"); layerElement.type = Type.valueOf(elementType); } catch (IllegalArgumentException ex) { logger.log(Level.WARNING, "Unsupported layer element: {0}. Ignoring.", elementType); mapInfoTypeVal = "ByVertex"; layerElement.mapInfoType = MappingInformationType.valueOf(mapInfoTypeVal); } else if (child.id.equals("ReferenceInformationType")) { String refInfoTypeVal = (String) child.properties.get(0); refInfoTypeVal = "IndexToDirect"; layerElement.refInfoType = ReferenceInformationType.valueOf(refInfoTypeVal); } else if (child.id.equals("Normals") || child.id.equals("Tangents") || child.id.equals("Binormals")) { layerElement.data = toVector3(FbxMeshUtil.getDoubleArray(child)); } else if (child.id.equals("Colors")) { layerElement.data = toColorRGBA(FbxMeshUtil.getDoubleArray(child)); } else if (child.id.equals("UV")) { layerElement.data = toVector2(FbxMeshUtil.getDoubleArray(child)); } else if (indexTypes.contains(child.id)) { layerElement.dataIndices = FbxMeshUtil.getIntArray(child); } else if (child.id.equals("Name")) { layerElement.name = (String) child.properties.get(0);
setPositions(FbxMeshUtil.getDoubleArray(e)); } else if (e.id.equals("PolygonVertexIndex")) { setPolygonVertexIndices(FbxMeshUtil.getIntArray(e)); } else if (e.id.equals("Edges")) { setEdges(FbxMeshUtil.getIntArray(e)); } else if (e.id.startsWith("LayerElement")) { layerElementsList.add(FbxLayerElement.fromElement(e)); } else if (e.id.equals("Layer")) { layersList.add(FbxLayer.fromElement(e)); layer.setLayerElements(layerElementsList);
public static FbxLayer fromElement(FbxElement element) { FbxLayer layer = new FbxLayer(); layer.layer = (Integer)element.properties.get(0); next_element: for (FbxElement child : element.children) { if (!child.id.equals("LayerElement")) { continue; } FbxLayerElementRef ref = new FbxLayerElementRef(); for (FbxElement child2 : child.children) { if (child2.id.equals("Type")) { String layerElementTypeStr = (String) child2.properties.get(0); layerElementTypeStr = layerElementTypeStr.substring("LayerElement".length()); try { ref.layerElementType = FbxLayerElement.Type.valueOf(layerElementTypeStr); } catch (IllegalArgumentException ex) { logger.log(Level.WARNING, "Unsupported layer type: {0}. Ignoring.", layerElementTypeStr); continue next_element; } } else if (child2.id.equals("TypedIndex")) { ref.layerElementIndex = (Integer) child2.properties.get(0); } } layer.references.put(ref.layerElementType, ref); } return layer; } }
irVertex.norm = (Vector3f) layer0.getVertexData(FbxLayerElement.Type.Normal, i, polygonVertexIndex, positionIndex, 0); irVertex.tang = (Vector3f) layer0.getVertexData(FbxLayerElement.Type.Tangent, i, polygonVertexIndex, positionIndex, 0); irVertex.bitang = (Vector3f) layer0.getVertexData(FbxLayerElement.Type.Binormal, i, polygonVertexIndex, positionIndex, 0); irVertex.uv0 = (Vector2f) layer0.getVertexData(FbxLayerElement.Type.UV, i, polygonVertexIndex, positionIndex, 0); irVertex.color = (ColorRGBA) layer0.getVertexData(FbxLayerElement.Type.Color, i, polygonVertexIndex, positionIndex, 0); irVertex.material = (Integer) layer0.getVertexData(FbxLayerElement.Type.Material, i, polygonVertexIndex, positionIndex, 0); irVertex.smoothing = (Integer) layer0.getVertexData(FbxLayerElement.Type.Smoothing, i, polygonVertexIndex, positionIndex, 0); irVertex.uv1 = (Vector2f) layer1.getVertexData(FbxLayerElement.Type.UV, i, polygonVertexIndex, positionIndex, 0); ArrayList<Float> boneWeightsForVertex = boneWeights[positionIndex]; if (boneIndicesForVertex != null) { irVertex.boneWeightsIndices = toBoneWeightIndices(boneIndicesForVertex, boneWeightsForVertex);
FbxMesh mesh = new FbxMesh(assetManager, sceneFolderName); mesh.fromElement(element); connectObject(mesh);
applyCluster(cluster); IrMesh irMesh = toIRMesh();
@Override public void connectObjectProperty(FbxObject object, String property) { unsupportedConnectObjectProperty(object, property); }
private void setPositions(double[] positions) { this.positions = FbxLayerElement.toVector3(positions); }
public Object getVertexData(FbxLayerElement.Type type, int polygonIndex, int polygonVertexIndex, int positionIndex, int edgeIndex) { FbxLayerElementRef reference = references.get(type); if (reference == null) { return null; } else { return reference.layerElement.getVertexData(polygonIndex, polygonVertexIndex, positionIndex, edgeIndex); } }
@Override public void connectObject(FbxObject object) { if (object instanceof FbxSkinDeformer) { if (skinDeformer != null) { logger.log(Level.WARNING, "This mesh already has a skin deformer attached. Ignoring."); return; } skinDeformer = (FbxSkinDeformer) object; } else { unsupportedConnectObject(object); } }
private void setPolygonVertexIndices(int[] polygonVertexIndices) { List<FbxPolygon> polygonList = new ArrayList<FbxPolygon>(); boolean finishPolygon = false; List<Integer> vertexIndices = new ArrayList<Integer>(); for (int i = 0; i < polygonVertexIndices.length; i++) { int vertexIndex = polygonVertexIndices[i]; if (vertexIndex < 0) { vertexIndex ^= -1; finishPolygon = true; } vertexIndices.add(vertexIndex); if (finishPolygon) { finishPolygon = false; polygonList.add(FbxPolygon.fromIndices(vertexIndices)); vertexIndices.clear(); } } polygons = new FbxPolygon[polygonList.size()]; polygonList.toArray(polygons); }
FbxSkinDeformer deformer = fbxMesh.getSkinDeformer(); FbxNode preferredParent = null;
IntMap<Mesh> jmeMeshes = fbxMesh.getJmeObject();
public Object getVertexData(int polygonIndex, int polygonVertexIndex, int positionIndex, int edgeIndex) { switch (refInfoType) { case Direct: return getVertexDataDirect(polygonIndex, polygonVertexIndex, positionIndex, edgeIndex); case IndexToDirect: return getVertexDataIndexToDirect(polygonIndex, polygonVertexIndex, positionIndex, edgeIndex); default: return null; } }
public static FbxPolygon fromIndices(List<Integer> indices) { FbxPolygon poly = new FbxPolygon(); poly.indices = listToArray(indices); return poly; } }
public static FbxLayerElement fromPositions(double[] positionData) { FbxLayerElement layerElement = new FbxLayerElement(); layerElement.index = -1; layerElement.name = ""; layerElement.type = Type.Position; layerElement.mapInfoType = MappingInformationType.ByVertex; layerElement.refInfoType = ReferenceInformationType.Direct; layerElement.data = toVector3(positionData); layerElement.dataIndices = null; return layerElement; }
@Override public void connectObjectProperty(FbxObject object, String property) { unsupportedConnectObjectProperty(object, property); }