📄 reader3ds.java
字号:
inoutSimpleBodiesArray.add(thing); } private static String indent(int level) { String tab = ""; switch ( level ) { case 0: tab = ""; break; case 1: tab = " - "; break; case 2: tab = " . "; break; default: tab = " (" + level + ")-> "; break; } return tab; } private static boolean checkChunkHierarchy(_Reader3dsChunk son, _Reader3dsChunk father) { if ((father == null) ||(father.id == father.ID_MAIN && son.id == son.ID_MESH) ||(father.id == father.ID_MAIN && son.id == son.ID_BOTTOM) ||(father.id == father.ID_MAIN && son.id == son.ID_KEYFRAMER) ||(father.id == father.ID_MESH && son.id == son.ID_TOP) ||(father.id == father.ID_MESH && son.id == son.ID_MATERIAL) ||(father.id == father.ID_MESH && son.id == son.ID_OBJECT_BLOCK) ||(father.id == father.ID_MESH && son.id == son.ID_EDIT_CONFIG1) ||(father.id == father.ID_MESH && son.id == son.ID_VIEWPORT) ||(father.id == father.ID_MESH && son.id == son.ID_EDIT_UNKNOWN_01) ||(father.id == father.ID_MESH && son.id == son.ID_EDIT_UNKNOWN_02) ||(father.id == father.ID_MESH && son.id == son.ID_EDIT_UNKNOWN_03) ||(father.id == father.ID_MESH && son.id == son.ID_EDIT_UNKNOWN_04) ||(father.id == father.ID_MESH && son.id == son.ID_EDIT_UNKNOWN_05) ||(father.id == father.ID_MESH && son.id == son.ID_EDIT_UNKNOWN_06) ||(father.id == father.ID_MESH && son.id == son.ID_EDIT_UNKNOWN_07) ||(father.id == father.ID_MESH && son.id == son.ID_EDIT_UNKNOWN_08) ||(father.id == father.ID_MESH && son.id == son.ID_EDIT_UNKNOWN_09) ||(father.id == father.ID_MESH && son.id == son.ID_EDIT_UNKNOWN_10) ||(father.id == father.ID_MESH && son.id == son.ID_EDIT_UNKNOWN_11) ||(father.id == father.ID_MESH && son.id == son.ID_EDIT_UNKNOWN_12) ||(father.id == father.ID_MESH && son.id == son.ID_EDIT_UNKNOWN_13) ||(father.id == father.ID_MESH && son.id == son.ID_EDIT_UNKNOWN_14) ||(father.id == father.ID_MESH && son.id == son.ID_AMBIENT_COLOR) ||(father.id == father.ID_MESH && son.id == son.ID_BACKGROUND_COLOR) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_NAME) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_AMBIENT) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_DIFFUSE) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_SPECULAR) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_TYPE) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_SHININESS_EXP) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_SHININESS_KTE) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_TRANSPARENCY) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_TRANSPARENCY_F) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_TRANSPARENCY_FI) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_REFLECT_BLUR) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_TWOSIDED) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_WIREON) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_WIRE_THICKNESS) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_SOFTEN) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_TEXTURE1) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_TEXTURE2) ||(father.id == father.ID_MATERIAL && son.id == son.ID_MATERIAL_BUMPMAP) ||(father.id == father.ID_MATERIAL_TEXTURE1 && son.id == son.ID_AMOUNT) ||(father.id == father.ID_MATERIAL_TEXTURE1 && son.id == son.ID_MATERIAL_MAPOPTIONS) ||(father.id == father.ID_MATERIAL_TEXTURE1 && son.id == son.ID_MATERIAL_MAPFILTERBLUR) ||(father.id == father.ID_MATERIAL_TEXTURE1 && son.id == son.ID_MATERIAL_MAPUOFFSET) ||(father.id == father.ID_MATERIAL_TEXTURE1 && son.id == son.ID_MATERIAL_MAPVOFFSET) ||(father.id == father.ID_MATERIAL_TEXTURE1 && son.id == son.ID_MATERIAL_MAP1USCALE) ||(father.id == father.ID_MATERIAL_TEXTURE1 && son.id == son.ID_MATERIAL_MAP1VSCALE) ||(father.id == father.ID_MATERIAL_TEXTURE1 && son.id == son.ID_MATERIAL_MAPFILENAME) ||(father.id == father.ID_TRIANGLE_LIST && son.id == son.ID_MATERIAL_MAPPING_TABLE) ||(father.id == father.ID_TRIANGLE_LIST && son.id == son.ID_SMOOTH_LIST) ||(father.id == father.ID_OBJECT_BLOCK && son.id == son.ID_TRIANGLE_MESH) ||(father.id == father.ID_OBJECT_BLOCK && son.id == son.ID_LIGHT) ||(father.id == father.ID_OBJECT_BLOCK && son.id == son.ID_CAMERA) ||(father.id == father.ID_TRIANGLE_MESH && son.id == son.ID_VERTEX_LIST) ||(father.id == father.ID_TRIANGLE_MESH && son.id == son.ID_TRIANGLE_LIST) ||(father.id == father.ID_TRIANGLE_MESH && son.id == son.ID_MAP_LIST) ||(father.id == father.ID_MATERIAL_SHININESS_KTE && son.id == son.ID_AMOUNT) ||(father.id == father.ID_MATERIAL_SHININESS_EXP && son.id == son.ID_AMOUNT) ||(father.id == father.ID_MATERIAL_TRANSPARENCY && son.id == son.ID_AMOUNT) ||(father.id == father.ID_MATERIAL_TRANSPARENCY_F && son.id == son.ID_AMOUNT) ||(father.id == father.ID_MATERIAL_TRANSPARENCY_FI && son.id == son.ID_AMOUNT) ||(father.id == father.ID_MATERIAL_REFLECT_BLUR && son.id == son.ID_AMOUNT) ||(father.id == father.ID_TRIANGLE_MESH && son.id == son.ID_OBJECT_IS_VISIBLE) ||(father.id == father.ID_TRIANGLE_MESH && son.id == son.ID_TRI_VERTEX_OPTIONS) ||(father.id == father.ID_TRIANGLE_MESH && son.id == son.ID_MATRIX) ||((father.id == father.ID_MATERIAL_AMBIENT || father.id == father.ID_MATERIAL_DIFFUSE || father.id == father.ID_MATERIAL_SPECULAR) && son.id == son.ID_COLOR_RGB1) ||((father.id == father.ID_MATERIAL_AMBIENT || father.id == father.ID_MATERIAL_DIFFUSE || father.id == father.ID_MATERIAL_SPECULAR) && son.id == son.ID_COLOR_RGB2) ||((father.id == father.ID_MATERIAL_AMBIENT || father.id == father.ID_MATERIAL_DIFFUSE || father.id == father.ID_MATERIAL_SPECULAR) && son.id == son.ID_COLOR_RGB3) ) { return true; } if ( son.id == son.ID_UNKNOWN_01 || son.id == son.ID_UNKNOWN_02 || son.id == son.ID_UNKNOWN_03 || son.id == son.ID_UNKNOWN_04 || son.id == son.ID_UNKNOWN_05 || son.id == son.ID_UNKNOWN_06 || son.id == son.ID_UNKNOWN_07 || son.id == son.ID_UNKNOWN_08 || son.id == son.ID_UNKNOWN_09 || son.id == son.ID_UNKNOWN_10 || son.id == son.ID_UNKNOWN_11 || son.id == son.ID_UNKNOWN_12 || son.id == son.ID_UNKNOWN_13 || son.id == son.ID_UNKNOWN_14 || son.id == son.ID_UNKNOWN_15 || son.id == son.ID_UNKNOWN_16 || son.id == son.ID_UNKNOWN_17 || son.id == son.ID_UNKNOWN_18 || son.id == son.ID_UNKNOWN_19 || son.id == son.ID_UNKNOWN_20 || son.id == son.ID_UNKNOWN_21 || son.id == son.ID_UNKNOWN_22 || son.id == son.ID_UNKNOWN_23 || son.id == son.ID_UNKNOWN_24 || son.id == son.ID_UNKNOWN_25 || son.id == son.ID_UNKNOWN_26 || son.id == son.ID_UNKNOWN_27 || son.id == son.ID_UNKNOWN_28 || son.id == son.ID_UNKNOWN_29 || son.id == son.ID_UNKNOWN_30 || son.id == son.ID_UNKNOWN_31 || son.id == son.ID_UNKNOWN_32 || son.id == son.ID_UNKNOWN_33 || son.id == son.ID_UNKNOWN_34 || son.id == son.ID_UNKNOWN_35 || son.id == son.ID_UNKNOWN_36 || son.id == son.ID_UNKNOWN_37 || son.id == son.ID_UNKNOWN_38 || son.id == son.ID_UNKNOWN_39 || son.id == son.ID_UNKNOWN_40 || son.id == son.ID_UNKNOWN_41 || son.id == son.ID_UNKNOWN_42 || son.id == son.ID_UNKNOWN_43 || son.id == son.ID_UNKNOWN_44 || son.id == son.ID_UNKNOWN_45 || son.id == son.ID_UNKNOWN_46 || son.id == son.ID_UNKNOWN_47 || son.id == son.ID_UNKNOWN_48 || son.id == son.ID_UNKNOWN_49 || son.id == son.ID_UNKNOWN_50 || son.id == son.ID_UNKNOWN_51 || son.id == son.ID_UNKNOWN_52 || son.id == son.ID_UNKNOWN_53 || son.id == son.ID_UNKNOWN_54 || son.id == son.ID_UNKNOWN_55 || son.id == son.ID_UNKNOWN_56 || son.id == son.ID_UNKNOWN_57 || son.id == son.ID_UNKNOWN_58 || son.id == son.ID_UNKNOWN_59 || son.id == son.ID_UNKNOWN_60 || son.id == son.ID_UNKNOWN_61 || son.id == son.ID_UNKNOWN_62 || son.id == son.ID_UNKNOWN_63 || son.id == son.ID_UNKNOWN_64 || son.id == son.ID_UNKNOWN_65 || son.id == son.ID_UNKNOWN_66 || son.id == son.ID_UNKNOWN_67 || son.id == son.ID_UNKNOWN_67 || son.id == son.ID_UNKNOWN_68 || son.id == son.ID_UNKNOWN_69 || son.id == son.ID_UNKNOWN_70 || son.id == son.ID_UNKNOWN_71 || son.id == son.ID_UNKNOWN_72 ) { // WARNING: Not implemented features! return true; } VSDK.reportMessage(null, VSDK.WARNING, "Reader3ds.checkChunkHierarchy", "" + son.chunkToString(son.id) + " chunk is not supposed to be a level under a " + father.chunkToString(father.id) + " chunk"); return false; } /** @todo Process missing chunks. (skipped) */ private static void processChunk( InputStream is, _Reader3dsChunk currentChunk, _Reader3dsChunk parentChunk, int level) throws Exception { //----------------------------------------------------------------- boolean skipChunk = false; if ( !checkChunkHierarchy(currentChunk, parentChunk) ) { skipChunk = true; } //----------------------------------------------------------------- int i; if ( (currentChunk.id == currentChunk.ID_MAIN) || (currentChunk.id == currentChunk.ID_MESH) || (currentChunk.id == currentChunk.ID_OBJECT_BLOCK) || (currentChunk.id == currentChunk.ID_MATERIAL) || (currentChunk.id == currentChunk.ID_TRIANGLE_MESH) ) { //------------------------------------------------------------- long internalBytes = 6; // skip current chunk header // Build operations preprocessing phase if ( currentChunk.id == currentChunk.ID_OBJECT_BLOCK ) { // Object block starts with a name string //System.out.print(indent(level) + "Reading object \""); String cad = readAsciiString(is); internalBytes += cad.length()+1; //System.out.println(cad + "\""); } if ( currentChunk.id == currentChunk.ID_TRIANGLE_MESH ) { currentTriangleMesh = new TriangleMesh(); currentMaterialMappingArray = new ArrayList<_Reader3dsMaterialMapping>(); } if ( currentChunk.id == currentChunk.ID_MATERIAL ) { currentTextureFilename = null; currentBuildingMaterial = new Material(); currentBuildingMaterial.setDoubleSided(false); } // Generic recursive block processing //System.out.println(indent(level) + currentChunk); // Processing of recursive chunks _Reader3dsChunk subChunk = new _Reader3dsChunk(); do { subChunk.readHeader(is); processChunk(is, subChunk, currentChunk, level+1); internalBytes += subChunk.length; } while ( is.available() > 0 && (internalBytes < currentChunk.length) ); // Build operations postprocessing phase if ( currentChunk.id == currentChunk.ID_MATERIAL ) { currentMaterialArray.add(currentBuildingMaterial); currentTextureFilenamesArray.add(currentTextureFilename); } if ( currentChunk.id == currentChunk.ID_TRIANGLE_MESH ) { // Vertex processing Vertex v[] = new Vertex[currentVertexPositionArray.size()]; for ( i = 0; i < v.length; i++ ) { v[i] = new Vertex(new Vector3D(currentVertexPositionArray.get(i))); } for ( i = 0; i < v.length && currentUTextureMapping != null && i < currentUTextureMapping.length; i++ ) { v[i].u = currentUTextureMapping[i]; v[i].v = currentVTextureMapping[i]; } currentTriangleMesh.setVertexes(v); // Triangle processing int numMappedTriangles = 0; _Reader3dsMaterialMapping map_i; for ( i = 0; i < currentMaterialMappingArray.size(); i++ ) { map_i = currentMaterialMappingArray.get(i); numMappedTriangles += map_i.associatedTriangles.length; } if ( numMappedTriangles <= 0 ) { currentTriangleMesh.setTriangles(currentTrianglesList); } else { Triangle newTrianglesList[]; Material newMaterials[]; Image newTextures[]; int newMaterialRanges[][]; int newTextureRanges[][]; int j, k, textureIndex; newTrianglesList = new Triangle[numMappedTriangles]; newMaterials = new Material[currentMaterialMappingArray.size()]; newTextures = new Image[currentMaterialMappingArray.size()]; newMaterialRanges = new int[currentMaterialMappingArray.size()][2]; newTextureRanges = new int[currentMaterialMappingArray.size()][2]; for ( i = 0, k = 0; i < currentMaterialMappingArray.size(); i++ ) { map_i = currentMaterialMappingArray.get(i); newMaterials[i] = resolveMaterial(map_i.materialName); textureIndex = resolveMaterialIndex(map_i.materialName); if ( textureIndex >= 0 ) { newTextures[i] = loadImagefile(currentTextureFilenamesArray.get(textureIndex)); } else { newTextures[i] = null; } // This is checkpoint A if ( newTrianglesList == null ) { VSDK.reportMessage(null, VSDK.WARNING, "Reader3ds.processChunk", "null newTriangleList at checkpoint A."); } if ( currentTrianglesList == null ) { VSDK.reportMessage(null, VSDK.WARNING, "Reader3ds.processChunk", "null currentTrianglesList at checkpoint A.");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -