From dfec0bc8381ff6c81a9e2745d2b5894cb50bc346 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Sun, 9 Jun 2024 09:57:21 +0200 Subject: [PATCH] [FEAT] continue maven integration --- .checkstyle | 7 - .classpath | 27 -- .project | 23 -- out/.gitignore | 3 - pom.xml | 21 +- src/module-info.java | 8 +- src/org/atriasoft/loader3d/OBJFileLoader.java | 50 ++- src/org/atriasoft/loader3d/internal/Log.java | 76 ----- .../atriasoft/loader3d/model/Material.java | 68 ++-- .../loader3d/resources/ResourceMesh.java | 322 ++++++++++++------ .../loader3d/resources/ResourceMeshEmf.java | 150 ++++---- .../resources/ResourcePaletteFile.java | 76 +++-- .../resources/ResourceStaticMeshObj.java | 8 +- .../ResourceStaticMeshObjDynamic.java | 9 +- {resources => src}/resources/emf/tree1.emf | 0 test/src/resources/emf/Entry.emf | 71 ---- test/src/resources/emf/tower.emf | 57 ---- test/src/resources/emf/tree1.blend | Bin 738808 -> 0 bytes test/src/resources/emf/tree1.blend1 | Bin 738808 -> 0 bytes test/src/resources/emf/tree1.emf | 77 ----- test/src/resources/emf/tree1.mtl | 2 - test/src/resources/emf/tree1.obj | 3 - test/src/resources/emf/tree1_base.emf | 59 ---- test/src/test/atriasoft/loader3d/Log.java | 59 ---- .../test/atriasoft/loader3d/TestBasicLog.java | 11 +- 25 files changed, 449 insertions(+), 738 deletions(-) delete mode 100644 .checkstyle delete mode 100644 .classpath delete mode 100644 .project delete mode 100644 out/.gitignore delete mode 100644 src/org/atriasoft/loader3d/internal/Log.java rename {resources => src}/resources/emf/tree1.emf (100%) delete mode 100644 test/src/resources/emf/Entry.emf delete mode 100644 test/src/resources/emf/tower.emf delete mode 100644 test/src/resources/emf/tree1.blend delete mode 100644 test/src/resources/emf/tree1.blend1 delete mode 100644 test/src/resources/emf/tree1.emf delete mode 100644 test/src/resources/emf/tree1.mtl delete mode 100644 test/src/resources/emf/tree1.obj delete mode 100644 test/src/resources/emf/tree1_base.emf delete mode 100644 test/src/test/atriasoft/loader3d/Log.java diff --git a/.checkstyle b/.checkstyle deleted file mode 100644 index 428926e..0000000 --- a/.checkstyle +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/.classpath b/.classpath deleted file mode 100644 index 3083ca1..0000000 --- a/.classpath +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/.project b/.project deleted file mode 100644 index dbff839..0000000 --- a/.project +++ /dev/null @@ -1,23 +0,0 @@ - - - loader3d - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - - diff --git a/out/.gitignore b/out/.gitignore deleted file mode 100644 index 9a45729..0000000 --- a/out/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ - -/__pycache__/ -/eclipse/ diff --git a/pom.xml b/pom.xml index 9304dc6..251271f 100644 --- a/pom.xml +++ b/pom.xml @@ -38,24 +38,38 @@ ejson 0.1.0 + + org.atriasoft + egami + 0.1.0 + org.junit.jupiter junit-jupiter-api - 5.9.3 + 5.11.0-M2 test org.slf4j slf4j-simple - 2.0.7 + 2.1.0-alpha1 test src + + + + + test/src - ${project.basedir}/out/maven/ + + + + + org.apache.maven.plugins @@ -71,6 +85,7 @@ org.apache.maven.plugins maven-source-plugin + 3.3.1 attach-sources diff --git a/src/module-info.java b/src/module-info.java index be8537c..dff9787 100644 --- a/src/module-info.java +++ b/src/module-info.java @@ -1,12 +1,12 @@ -module org.atriasoft.loader3d { - +open module org.atriasoft.loader3d { + exports org.atriasoft.loader3d; exports org.atriasoft.loader3d.model; exports org.atriasoft.loader3d.resources; - + requires transitive org.atriasoft.etk; - requires transitive org.atriasoft.gale; requires org.atriasoft.egami; + requires transitive org.atriasoft.gale; requires org.atriasoft.ejson; } \ No newline at end of file diff --git a/src/org/atriasoft/loader3d/OBJFileLoader.java b/src/org/atriasoft/loader3d/OBJFileLoader.java index 9539b0a..d2bd697 100644 --- a/src/org/atriasoft/loader3d/OBJFileLoader.java +++ b/src/org/atriasoft/loader3d/OBJFileLoader.java @@ -11,12 +11,20 @@ import java.util.List; import org.atriasoft.etk.Uri; import org.atriasoft.etk.math.Vector2f; import org.atriasoft.etk.math.Vector3f; -import org.atriasoft.loader3d.internal.Log; import org.atriasoft.loader3d.model.ModelData; import org.atriasoft.loader3d.model.Vertex; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class OBJFileLoader { - private static float convertDataToArrays(final List vertices, final List textures, final List normals, final float[] verticesArray, final float[] texturesArray, + private static final Logger LOGGER = LoggerFactory.getLogger(OBJFileLoader.class); + + private static float convertDataToArrays( + final List vertices, + final List textures, + final List normals, + final float[] verticesArray, + final float[] texturesArray, final float[] normalsArray) { float furthestPoint = 0; for (int i = 0; i < vertices.size(); i++) { @@ -38,7 +46,7 @@ public class OBJFileLoader { } return furthestPoint; } - + private static int[] convertIndicesListToArray(final List indices) { final int[] indicesArray = new int[indices.size()]; for (int i = 0; i < indicesArray.length; i++) { @@ -46,14 +54,20 @@ public class OBJFileLoader { } return indicesArray; } - - private static void dealWithAlreadyProcessedVertex(final Vertex previousVertex, final int newTextureIndex, final int newNormalIndex, final List indices, final List vertices) { + + private static void dealWithAlreadyProcessedVertex( + final Vertex previousVertex, + final int newTextureIndex, + final int newNormalIndex, + final List indices, + final List vertices) { if (previousVertex.hasSameTextureAndNormal(newTextureIndex, newNormalIndex)) { indices.add(previousVertex.getIndex()); } else { final Vertex anotherVertex = previousVertex.getDuplicateVertex(); if (anotherVertex != null) { - OBJFileLoader.dealWithAlreadyProcessedVertex(anotherVertex, newTextureIndex, newNormalIndex, indices, vertices); + OBJFileLoader.dealWithAlreadyProcessedVertex(anotherVertex, newTextureIndex, newNormalIndex, indices, + vertices); } else { final Vertex duplicateVertex = new Vertex(vertices.size(), previousVertex.getPosition()); duplicateVertex.setTextureIndex(newTextureIndex); @@ -62,10 +76,10 @@ public class OBJFileLoader { vertices.add(duplicateVertex); indices.add(duplicateVertex.getIndex()); } - + } } - + public static ModelData loadOBJ(final Uri objFileName) { final InputStream stream = Uri.getStream(objFileName); if (stream == null) { @@ -100,17 +114,20 @@ public class OBJFileLoader { line = reader.readLine(); if (line.startsWith("v ")) { final String[] currentLine = line.split(" "); - final Vector3f vertex = new Vector3f(Float.parseFloat(currentLine[1]), Float.parseFloat(currentLine[2]), Float.parseFloat(currentLine[3])); + final Vector3f vertex = new Vector3f(Float.parseFloat(currentLine[1]), + Float.parseFloat(currentLine[2]), Float.parseFloat(currentLine[3])); final Vertex newVertex = new Vertex(vertices.size(), vertex); vertices.add(newVertex); - + } else if (line.startsWith("vt ")) { final String[] currentLine = line.split(" "); - final Vector2f texture = new Vector2f(Float.parseFloat(currentLine[1]), Float.parseFloat(currentLine[2])); + final Vector2f texture = new Vector2f(Float.parseFloat(currentLine[1]), + Float.parseFloat(currentLine[2])); textures.add(texture); } else if (line.startsWith("vn ")) { final String[] currentLine = line.split(" "); - final Vector3f normal = new Vector3f(Float.parseFloat(currentLine[1]), Float.parseFloat(currentLine[2]), Float.parseFloat(currentLine[3])); + final Vector3f normal = new Vector3f(Float.parseFloat(currentLine[1]), + Float.parseFloat(currentLine[2]), Float.parseFloat(currentLine[3])); normals.add(normal); } else if (line.startsWith("f ")) { break; @@ -134,12 +151,13 @@ public class OBJFileLoader { final float[] verticesArray = new float[vertices.size() * 3]; final float[] texturesArray = new float[vertices.size() * 2]; final float[] normalsArray = new float[vertices.size() * 3]; - final float furthest = OBJFileLoader.convertDataToArrays(vertices, textures, normals, verticesArray, texturesArray, normalsArray); + final float furthest = OBJFileLoader.convertDataToArrays(vertices, textures, normals, verticesArray, + texturesArray, normalsArray); final int[] indicesArray = OBJFileLoader.convertIndicesListToArray(indices); final ModelData data = new ModelData(verticesArray, texturesArray, normalsArray, indicesArray, furthest); return data; } - + private static void processVertex(final String[] vertex, final List vertices, final List indices) { final int index = Integer.parseInt(vertex[0]) - 1; final Vertex currentVertex = vertices.get(index); @@ -153,7 +171,7 @@ public class OBJFileLoader { OBJFileLoader.dealWithAlreadyProcessedVertex(currentVertex, textureIndex, normalIndex, indices, vertices); } } - + private static void removeUnusedVertices(final List vertices) { for (final Vertex vertex : vertices) { if (!vertex.isSet()) { @@ -162,5 +180,5 @@ public class OBJFileLoader { } } } - + } \ No newline at end of file diff --git a/src/org/atriasoft/loader3d/internal/Log.java b/src/org/atriasoft/loader3d/internal/Log.java deleted file mode 100644 index d017ace..0000000 --- a/src/org/atriasoft/loader3d/internal/Log.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.atriasoft.loader3d.internal; - -import org.atriasoft.reggol.LogLevel; -import org.atriasoft.reggol.Logger; - -public class Log { - private static final boolean FORCE_ALL = false; - private static final String LIB_NAME = "loader3d"; - private static final String LIB_NAME_DRAW = Logger.getDrawableName(LOGGER.LIB_NAME); - private static final boolean PRINT_CRITICAL = Logger.getNeedPrint(LOGGER.LIB_NAME, LogLevel.CRITICAL); - private static final boolean PRINT_DEBUG = Logger.getNeedPrint(LOGGER.LIB_NAME, LogLevel.DEBUG); - private static final boolean PRINT_ERROR = Logger.getNeedPrint(LOGGER.LIB_NAME, LogLevel.ERROR); - private static final boolean PRINT_INFO = Logger.getNeedPrint(LOGGER.LIB_NAME, LogLevel.INFO); - private static final boolean PRINT_PRINT = Logger.getNeedPrint(LOGGER.LIB_NAME, LogLevel.PRINT); - private static final boolean PRINT_TODO = Logger.getNeedPrint(LOGGER.LIB_NAME, LogLevel.TODO); - private static final boolean PRINT_VERBOSE = Logger.getNeedPrint(LOGGER.LIB_NAME, LogLevel.VERBOSE); - private static final boolean PRINT_WARNING = Logger.getNeedPrint(LOGGER.LIB_NAME, LogLevel.WARNING); - - public static void critical(final Exception e, final String data) { - e.printStackTrace(); - if (PRINT_CRITICAL || FORCE_ALL) { - Logger.critical(LIB_NAME_DRAW, data + " : " + e.getMessage()); - } - } - - public static void critical(final String data, final Object... objects) { - if (PRINT_CRITICAL || FORCE_ALL) { - Logger.critical(LIB_NAME_DRAW, data, objects); - } - } - - public static void debug(final String data, final Object... objects) { - if (PRINT_DEBUG || FORCE_ALL) { - Logger.debug(LIB_NAME_DRAW, data, objects); - } - } - - public static void error(final String data, final Object... objects) { - if (PRINT_ERROR || FORCE_ALL) { - Logger.error(LIB_NAME_DRAW, data, objects); - } - } - - public static void info(final String data, final Object... objects) { - if (PRINT_INFO || FORCE_ALL) { - Logger.info(LIB_NAME_DRAW, data, objects); - } - } - - public static void print(final String data, final Object... objects) { - if (PRINT_PRINT || FORCE_ALL) { - Logger.print(LIB_NAME_DRAW, data, objects); - } - } - - public static void todo(final String data, final Object... objects) { - if (PRINT_TODO || FORCE_ALL) { - Logger.todo(LIB_NAME_DRAW, data, objects); - } - } - - public static void verbose(final String data, final Object... objects) { - if (PRINT_VERBOSE || FORCE_ALL) { - Logger.verbose(LIB_NAME_DRAW, data, objects); - } - } - - public static void warning(final String data, final Object... objects) { - if (PRINT_WARNING || FORCE_ALL) { - Logger.warning(LIB_NAME_DRAW, data, objects); - } - } - - private Log() {} - -} diff --git a/src/org/atriasoft/loader3d/model/Material.java b/src/org/atriasoft/loader3d/model/Material.java index e3a3055..6491987 100644 --- a/src/org/atriasoft/loader3d/model/Material.java +++ b/src/org/atriasoft/loader3d/model/Material.java @@ -6,23 +6,25 @@ import org.atriasoft.egami.Image; import org.atriasoft.etk.Color; import org.atriasoft.etk.Uri; import org.atriasoft.etk.math.Vector2i; -import org.atriasoft.etk.math.Vector4f; import org.atriasoft.gale.backend3d.OpenGL.RenderMode; import org.atriasoft.gale.resource.ResourceProgram; import org.atriasoft.gale.resource.ResourceTexture2; import org.atriasoft.gale.resource.ResourceTextureFile; -import org.atriasoft.loader3d.internal.Log; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class Material extends MaterialBase { + private static final Logger LOGGER = LoggerFactory.getLogger(Material.class); -public class Material extends MaterialBase{ - // values private RenderMode renderMode = RenderMode.TRIANGLE; //!< Select Render mode (triangle/Line/point ...) private ResourceTexture2 texture0 = null; public List listIndexFaces; + public Material() { - super(); } - public void draw(ResourceProgram _prog, MaterialGlId _glID){ + + public void draw(final ResourceProgram _prog, final MaterialGlId _glID) { LOGGER.trace("draw Material : (start)"); _prog.uniformVector(_glID.oglAmbientFactor(), this.ambientFactor); _prog.uniformVector(_glID.oglDiffuseFactor(), this.diffuseFactor); @@ -32,19 +34,18 @@ public class Material extends MaterialBase{ LOGGER.trace(" set texture: " + _glID.oglTexture0() + " " + this.texture0.getId()); _prog.setTexture0(_glID.oglTexture0(), this.texture0.getRendererId()); if (false) { - if (_prog.checkIdValidity(_glID.oglTexture0()) == false) { + if (!_prog.checkIdValidity(_glID.oglTexture0())) { LOGGER.error("try to set texture on a unexistant shader interface (wrong ID)"); } } - } else { - if (false) { - if (_prog.checkIdValidity(_glID.oglTexture0()) == true) { - LOGGER.error("Missing texture to send on the shader ..."); - } + } else if (false) { + if (_prog.checkIdValidity(_glID.oglTexture0())) { + LOGGER.error("Missing texture to send on the shader ..."); } } LOGGER.trace("draw Material: ( end )"); } + public void setRenderMode(RenderMode _val) { switch (_val) { case POINT: @@ -84,17 +85,20 @@ public class Material extends MaterialBase{ } this.renderMode = _val; } + public RenderMode getRenderModeOpenGl() { return this.renderMode; } + public RenderMode getRenderMode() { return this.renderMode; } - public void setTexture0( Uri _uri) { - Vector2i tmpSize = new Vector2i(256, 256); - if (_uri.isEmpty() == false) { + + public void setTexture0(final Uri _uri) { + final Vector2i tmpSize = new Vector2i(256, 256); + if (!_uri.isEmpty()) { // prevent overloard error : - ResourceTexture2 tmpCopy = this.texture0; + final ResourceTexture2 tmpCopy = this.texture0; this.texture0 = ResourceTextureFile.create(_uri, tmpSize); if (this.texture0 == null) { LOGGER.error("Can not load specific texture : " + _uri); @@ -105,40 +109,46 @@ public class Material extends MaterialBase{ } } } else { - this.texture0 = null;; + this.texture0 = null; + ; } } - public void setTexture0Magic( Vector2i _size) { + + public void setTexture0Magic(final Vector2i _size) { // create a simple custum texture : this.texture0 = new ResourceTexture2(); setImageSize(_size); - Image img = this.texture0.get(); - for (int xxx=0; xxx<_size.x(); ++xxx) { - for (int yyy=0; yyy<_size.y(); ++yyy) { - img.setColor(xxx,yyy, Color.RED); + final Image img = this.texture0.get(); + for (int xxx = 0; xxx < _size.x(); ++xxx) { + for (int yyy = 0; yyy < _size.y(); ++yyy) { + img.setColor(xxx, yyy, Color.RED); } } } - public void setImageSize( Vector2i _newSize){ - if (this.texture0 == null){ + + public void setImageSize(final Vector2i _newSize) { + if (this.texture0 == null) { return; } this.texture0.setImageSize(_newSize); } - // get the reference on this image to draw nomething on it ... - public Image get(){ - if (this.texture0 == null){ + + // get the reference on this image to draw nomething on it ... + public Image get() { + if (this.texture0 == null) { return null; } return this.texture0.get(); } - // flush the data to send it at the openGl system + + // flush the data to send it at the openGl system public void flush() { - if (this.texture0 == null){ + if (this.texture0 == null) { return; } this.texture0.flush(); } + public boolean haveTexture() { return this.texture0 != null; } diff --git a/src/org/atriasoft/loader3d/resources/ResourceMesh.java b/src/org/atriasoft/loader3d/resources/ResourceMesh.java index 95847dc..33973fd 100644 --- a/src/org/atriasoft/loader3d/resources/ResourceMesh.java +++ b/src/org/atriasoft/loader3d/resources/ResourceMesh.java @@ -18,26 +18,30 @@ import org.atriasoft.gale.resource.ResourceVirtualArrayObject; import org.atriasoft.loader3d.Face; import org.atriasoft.loader3d.FaceIndexing; import org.atriasoft.loader3d.NormalMode; -import org.atriasoft.loader3d.internal.Log; import org.atriasoft.loader3d.model.Material; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ResourceMesh extends ResourceStaticMesh { + private static final Logger LOGGER = LoggerFactory.getLogger(ResourceMesh.class); + public static ResourceMesh create(final Uri uri) { LOGGER.trace("KEEP: Resource Mesh: " + uri); - ResourceMesh object = null; + final ResourceMesh object = null; final Resource object2 = Resource.getManager().localKeep(uri); if (object2 != null) { - if (object2 instanceof ResourceMesh tmpp) { + if (object2 instanceof final ResourceMesh tmpp) { return tmpp; } - LOGGER.critical("Request resource file : '" + uri + "' With the wrong type (dynamic cast error)"); + LOGGER.error("Request resource file : '" + uri + "' With the wrong type (dynamic cast error)"); + System.exit(-1); return null; } LOGGER.debug("CREATE: new Mesh: " + uri); if (uri.getExtention().equals("emf")) { try { return new ResourceMeshEmf(uri); - } catch (Exception e) { + } catch (final Exception e) { LOGGER.warn("Can not load file: " + e.toString()); return null; } @@ -113,8 +117,8 @@ public class ResourceMesh extends ResourceStaticMesh { * @param _layerName face index to add */ public void addFaceIndexing(final String _layerName) { - if (this.listFaces.containsKey(_layerName) == false) { - FaceIndexing empty = new FaceIndexing(); + if (!this.listFaces.containsKey(_layerName)) { + final FaceIndexing empty = new FaceIndexing(); this.listFaces.put(_layerName, empty); } } @@ -123,23 +127,31 @@ public class ResourceMesh extends ResourceStaticMesh { addLine(_layerName, _pos1, _pos2, _color, _color); } - public void addLine(final String _layerName, final Vector3f _pos1, final Vector3f _pos2, final Color _color1, final Color _color2) { - if (this.listFaces.containsKey(_layerName) == false || this.materials.containsKey(_layerName) == false) { - LOGGER.error("Mesh layer : " + _layerName + " does not exist in list faces=" + this.listFaces.containsKey(_layerName) + " materials=" + this.listFaces.containsKey(_layerName) + " ..."); + public void addLine( + final String _layerName, + final Vector3f _pos1, + final Vector3f _pos2, + final Color _color1, + final Color _color2) { + if (!this.listFaces.containsKey(_layerName) || !this.materials.containsKey(_layerName)) { + LOGGER.error("Mesh layer : " + _layerName + " does not exist in list faces=" + + this.listFaces.containsKey(_layerName) + " materials=" + this.listFaces.containsKey(_layerName) + + " ..."); return; } - RenderMode tmpRenderMode = this.materials.get(_layerName).getRenderMode(); - if (tmpRenderMode != RenderMode.LINE && tmpRenderMode != RenderMode.LINE_STRIP && tmpRenderMode != RenderMode.LINE_LOOP) { + final RenderMode tmpRenderMode = this.materials.get(_layerName).getRenderMode(); + if (tmpRenderMode != RenderMode.LINE && tmpRenderMode != RenderMode.LINE_STRIP + && tmpRenderMode != RenderMode.LINE_LOOP) { LOGGER.error("try to add Line in a mesh material section that not support Line"); return; } // try to find position: - int pos1 = findPositionInList(_pos1); - int pos2 = findPositionInList(_pos2); + final int pos1 = findPositionInList(_pos1); + final int pos2 = findPositionInList(_pos2); // try to find UV mapping: - int color1 = findColorInList(_color1); - int color2 = findColorInList(_color2); - Face tmpFace = new Face(); + final int color1 = findColorInList(_color1); + final int color2 = findColorInList(_color2); + final Face tmpFace = new Face(); tmpFace.setVertex(pos1, pos2); tmpFace.setColor(color1, color2, color2); this.listFaces.get(_layerName).face().add(tmpFace); @@ -176,20 +188,22 @@ public class ResourceMesh extends ResourceStaticMesh { } public void addPoint(final String _layerName, final Vector3f _pos, final Color _color) { - if (this.listFaces.containsKey(_layerName) == false || this.materials.containsKey(_layerName) == false) { - LOGGER.error("Mesh layer : " + _layerName + " does not exist in list faces=" + this.listFaces.containsKey(_layerName) + " materials=" + this.listFaces.containsKey(_layerName) + " ..."); + if (!this.listFaces.containsKey(_layerName) || !this.materials.containsKey(_layerName)) { + LOGGER.error("Mesh layer : " + _layerName + " does not exist in list faces=" + + this.listFaces.containsKey(_layerName) + " materials=" + this.listFaces.containsKey(_layerName) + + " ..."); return; } - RenderMode tmpRenderMode = this.materials.get(_layerName).getRenderMode(); + final RenderMode tmpRenderMode = this.materials.get(_layerName).getRenderMode(); if (tmpRenderMode != RenderMode.POINT) { LOGGER.error("try to add Point in a mesh material section that not support Point"); return; } // try to find position: - int pos = findPositionInList(_pos); + final int pos = findPositionInList(_pos); // try to find UV mapping: - int color = findColorInList(_color); - Face tmpFace = new Face(); + final int color = findColorInList(_color); + final Face tmpFace = new Face(); tmpFace.setVertex(pos); tmpFace.setColor(color, color, color); this.listFaces.get(_layerName).face().add(tmpFace); @@ -205,7 +219,13 @@ public class ResourceMesh extends ResourceStaticMesh { * @param _pos4 faurth point position * @param _color color of all elements */ - public void addQuad(final String _layerName, final Vector3f _pos1, final Vector3f _pos2, final Vector3f _pos3, final Vector3f _pos4, final Color _color) { + public void addQuad( + final String _layerName, + final Vector3f _pos1, + final Vector3f _pos2, + final Vector3f _pos3, + final Vector3f _pos4, + final Color _color) { addQuad(_layerName, _pos1, _pos2, _pos3, _pos4, _color, _color, _color, _color); } @@ -353,16 +373,33 @@ public class ResourceMesh extends ResourceStaticMesh { * @param _color3 color of the _pos3 element * @param _color4 color of the _pos4 element */ - public void addQuad(final String _layerName, final Vector3f _pos1, final Vector3f _pos2, final Vector3f _pos3, final Vector3f _pos4, final Color _color1, final Color _color2, final Color _color3, + public void addQuad( + final String _layerName, + final Vector3f _pos1, + final Vector3f _pos2, + final Vector3f _pos3, + final Vector3f _pos4, + final Color _color1, + final Color _color2, + final Color _color3, final Color _color4) { addTriangle(_layerName, _pos1, _pos2, _pos3, _color1, _color2, _color3); addTriangle(_layerName, _pos1, _pos3, _pos4, _color1, _color3, _color4); } - public void addQuad(final String _layerName, final Vector3f _pos1, final Vector3f _pos2, final Vector3f _pos3, final Vector3f _pos4, final Vector2f _uv1, final Vector2f _uv2, final Vector2f _uv3, + public void addQuad( + final String _layerName, + final Vector3f _pos1, + final Vector3f _pos2, + final Vector3f _pos3, + final Vector3f _pos4, + final Vector2f _uv1, + final Vector2f _uv2, + final Vector2f _uv3, final Vector2f _uv4) { - addQuad(_layerName, _pos1, _pos2, _pos3, _pos4, _uv1, _uv2, _uv3, _uv4, Color.WHITE, Color.WHITE, Color.WHITE, Color.WHITE); + addQuad(_layerName, _pos1, _pos2, _pos3, _pos4, _uv1, _uv2, _uv3, _uv4, Color.WHITE, Color.WHITE, Color.WHITE, + Color.WHITE); } /** @@ -379,8 +416,17 @@ public class ResourceMesh extends ResourceStaticMesh { * @param _uv3 texture position of the _pos3 element * @param _uv4 texture position of the _pos4 element */ - public void addQuad(final String _layerName, final Vector3f _pos1, final Vector3f _pos2, final Vector3f _pos3, final Vector3f _pos4, final Vector2f _uv1, final Vector2f _uv2, final Vector2f _uv3, - final Vector2f _uv4, final Color _color) { + public void addQuad( + final String _layerName, + final Vector3f _pos1, + final Vector3f _pos2, + final Vector3f _pos3, + final Vector3f _pos4, + final Vector2f _uv1, + final Vector2f _uv2, + final Vector2f _uv3, + final Vector2f _uv4, + final Color _color) { addQuad(_layerName, _pos1, _pos2, _pos3, _pos4, _uv1, _uv2, _uv3, _uv4, _color, _color, _color, _color); } @@ -401,8 +447,20 @@ public class ResourceMesh extends ResourceStaticMesh { * @param _color3 color of the _pos3 element * @param _color4 color of the _pos4 element */ - public void addQuad(final String _layerName, final Vector3f _pos1, final Vector3f _pos2, final Vector3f _pos3, final Vector3f _pos4, final Vector2f _uv1, final Vector2f _uv2, final Vector2f _uv3, - final Vector2f _uv4, final Color _color1, final Color _color2, final Color _color3, final Color _color4) { + public void addQuad( + final String _layerName, + final Vector3f _pos1, + final Vector3f _pos2, + final Vector3f _pos3, + final Vector3f _pos4, + final Vector2f _uv1, + final Vector2f _uv2, + final Vector2f _uv3, + final Vector2f _uv4, + final Color _color1, + final Color _color2, + final Color _color3, + final Color _color4) { addTriangle(_layerName, _pos1, _pos2, _pos3, _uv1, _uv2, _uv3, _color1, _color2, _color3); addTriangle(_layerName, _pos1, _pos3, _pos4, _uv1, _uv3, _uv4, _color1, _color3, _color4); } @@ -418,7 +476,12 @@ public class ResourceMesh extends ResourceStaticMesh { * @param _color2 color of the _pos2 element * @param _color3 color of the _pos3 element */ - public void addTriangle(final String _layerName, final Vector3f _pos1, final Vector3f _pos2, final Vector3f _pos3, final Color _color) { + public void addTriangle( + final String _layerName, + final Vector3f _pos1, + final Vector3f _pos2, + final Vector3f _pos3, + final Color _color) { addTriangle(_layerName, _pos1, _pos2, _pos3, _color, _color, _color); } @@ -433,25 +496,35 @@ public class ResourceMesh extends ResourceStaticMesh { * @param _color2 color of the _pos2 element * @param _color3 color of the _pos3 element */ - public void addTriangle(final String _layerName, final Vector3f _pos1, final Vector3f _pos2, final Vector3f _pos3, final Color _color1, final Color _color2, final Color _color3) { - if (this.listFaces.containsKey(_layerName) == false || this.materials.containsKey(_layerName) == false) { - LOGGER.error("Mesh layer : " + _layerName + " does not exist in list faces=" + this.listFaces.containsKey(_layerName) + " materials=" + this.listFaces.containsKey(_layerName) + " ..."); + public void addTriangle( + final String _layerName, + final Vector3f _pos1, + final Vector3f _pos2, + final Vector3f _pos3, + final Color _color1, + final Color _color2, + final Color _color3) { + if (!this.listFaces.containsKey(_layerName) || !this.materials.containsKey(_layerName)) { + LOGGER.error("Mesh layer : " + _layerName + " does not exist in list faces=" + + this.listFaces.containsKey(_layerName) + " materials=" + this.listFaces.containsKey(_layerName) + + " ..."); return; } - RenderMode tmpRenderMode = this.materials.get(_layerName).getRenderMode(); + final RenderMode tmpRenderMode = this.materials.get(_layerName).getRenderMode(); if (tmpRenderMode == RenderMode.QUAD || tmpRenderMode == RenderMode.QUAD_STRIP) { LOGGER.info("[TODO] Create quad interface ..."); - } else if (tmpRenderMode == RenderMode.TRIANGLE || tmpRenderMode == RenderMode.LINE_STRIP || tmpRenderMode == RenderMode.TRIANGLE_FAN) { + } else if (tmpRenderMode == RenderMode.TRIANGLE || tmpRenderMode == RenderMode.LINE_STRIP + || tmpRenderMode == RenderMode.TRIANGLE_FAN) { // try to find position: - int pos1 = findPositionInList(_pos1); - int pos2 = findPositionInList(_pos2); - int pos3 = findPositionInList(_pos3); + final int pos1 = findPositionInList(_pos1); + final int pos2 = findPositionInList(_pos2); + final int pos3 = findPositionInList(_pos3); // try to find Color: - int color1 = findColorInList(_color1); - int color2 = findColorInList(_color2); - int color3 = findColorInList(_color3); - Face tmpFace = new Face(pos1, -1, pos2, -1, pos3, -1); + final int color1 = findColorInList(_color1); + final int color2 = findColorInList(_color2); + final int color3 = findColorInList(_color3); + final Face tmpFace = new Face(pos1, -1, pos2, -1, pos3, -1); tmpFace.setColor(color1, color2, color3); this.listFaces.get(_layerName).face().add(tmpFace); } else { @@ -459,7 +532,14 @@ public class ResourceMesh extends ResourceStaticMesh { } } - public void addTriangle(final String _layerName, final Vector3f _pos1, final Vector3f _pos2, final Vector3f _pos3, final Vector2f _uv1, final Vector2f _uv2, final Vector2f _uv3) { + public void addTriangle( + final String _layerName, + final Vector3f _pos1, + final Vector3f _pos2, + final Vector3f _pos3, + final Vector2f _uv1, + final Vector2f _uv2, + final Vector2f _uv3) { addTriangle(_layerName, _pos1, _pos2, _pos3, _uv1, _uv2, _uv3, Color.WHITE, Color.WHITE, Color.WHITE); } @@ -492,6 +572,7 @@ public class ResourceMesh extends ResourceStaticMesh { // tmpElement.addTriangle(index); // } // //LOGGER.critical("kjlkj"); + // // System.exit(-1); // // Can have only one concave element in a mesh ... // //return this.physics; // } @@ -511,7 +592,14 @@ public class ResourceMesh extends ResourceStaticMesh { * @param _uv2 texture position of the _pos2 element * @param _uv3 texture position of the _pos3 element */ - public void addTriangle(final String _layerName, final Vector3f _pos1, final Vector3f _pos2, final Vector3f _pos3, final Vector2f _uv1, final Vector2f _uv2, final Vector2f _uv3, + public void addTriangle( + final String _layerName, + final Vector3f _pos1, + final Vector3f _pos2, + final Vector3f _pos3, + final Vector2f _uv1, + final Vector2f _uv2, + final Vector2f _uv3, final Color _color) { addTriangle(_layerName, _pos1, _pos2, _pos3, _uv1, _uv2, _uv3, _color, _color, _color); } @@ -530,32 +618,44 @@ public class ResourceMesh extends ResourceStaticMesh { * @param _uv2 texture position of the _pos2 element * @param _uv3 texture position of the _pos3 element */ - public void addTriangle(final String _layerName, final Vector3f _pos1, final Vector3f _pos2, final Vector3f _pos3, final Vector2f _uv1, final Vector2f _uv2, final Vector2f _uv3, - final Color _color1, final Color _color2, final Color _color3) { + public void addTriangle( + final String _layerName, + final Vector3f _pos1, + final Vector3f _pos2, + final Vector3f _pos3, + final Vector2f _uv1, + final Vector2f _uv2, + final Vector2f _uv3, + final Color _color1, + final Color _color2, + final Color _color3) { LOGGER.info("add Triangle: " + _layerName + " ..."); - if (this.listFaces.containsKey(_layerName) == false || this.materials.containsKey(_layerName) == false) { - LOGGER.error("Mesh layer : " + _layerName + " does not exist in list faces=" + this.listFaces.containsKey(_layerName) + " materials=" + this.listFaces.containsKey(_layerName) + " ..."); + if (!this.listFaces.containsKey(_layerName) || !this.materials.containsKey(_layerName)) { + LOGGER.error("Mesh layer : " + _layerName + " does not exist in list faces=" + + this.listFaces.containsKey(_layerName) + " materials=" + this.listFaces.containsKey(_layerName) + + " ..."); return; } - RenderMode tmpRenderMode = this.materials.get(_layerName).getRenderMode(); - if (tmpRenderMode != RenderMode.TRIANGLE && tmpRenderMode != RenderMode.TRIANGLE_STRIP && tmpRenderMode != RenderMode.TRIANGLE_FAN) { + final RenderMode tmpRenderMode = this.materials.get(_layerName).getRenderMode(); + if (tmpRenderMode != RenderMode.TRIANGLE && tmpRenderMode != RenderMode.TRIANGLE_STRIP + && tmpRenderMode != RenderMode.TRIANGLE_FAN) { LOGGER.error("try to add Line in a mesh material section that not support Line"); return; } // try to find position: - int pos1 = findPositionInList(_pos1); - int pos2 = findPositionInList(_pos2); - int pos3 = findPositionInList(_pos3); + final int pos1 = findPositionInList(_pos1); + final int pos2 = findPositionInList(_pos2); + final int pos3 = findPositionInList(_pos3); // try to find UV mapping: - int uv1 = findTextureInList(_uv1); - int uv2 = findTextureInList(_uv2); - int uv3 = findTextureInList(_uv3); + final int uv1 = findTextureInList(_uv1); + final int uv2 = findTextureInList(_uv2); + final int uv3 = findTextureInList(_uv3); // try to find Color: - int color1 = findColorInList(_color1); - int color2 = findColorInList(_color2); - int color3 = findColorInList(_color3); - Face tmpFace = new Face(pos1, uv1, pos2, uv2, pos3, uv3); + final int color1 = findColorInList(_color1); + final int color2 = findColorInList(_color2); + final int color3 = findColorInList(_color3); + final Face tmpFace = new Face(pos1, uv1, pos2, uv2, pos3, uv3); tmpFace.setColor(color1, color2, color3); this.listFaces.get(_layerName).face().add(tmpFace); LOGGER.info(" nbFace: " + this.listFaces.get(_layerName).face().size()); @@ -564,21 +664,23 @@ public class ResourceMesh extends ResourceStaticMesh { private void calculateNormaleEdge(final String _materialName) { this.listVertexNormal.clear(); if (this.normalMode == NormalMode.VERTEX) { - List outNormal = new ArrayList<>(); + final List outNormal = new ArrayList<>(); LOGGER.info("calculateNormaleEdge(" + _materialName + ")"); - RenderMode tmpRenderMode = this.materials.get(_materialName).getRenderMode(); - if (tmpRenderMode == RenderMode.POINT || tmpRenderMode == RenderMode.LINE || tmpRenderMode == RenderMode.LINE_STRIP || tmpRenderMode == RenderMode.LINE_LOOP) { + final RenderMode tmpRenderMode = this.materials.get(_materialName).getRenderMode(); + if (tmpRenderMode == RenderMode.POINT || tmpRenderMode == RenderMode.LINE + || tmpRenderMode == RenderMode.LINE_STRIP || tmpRenderMode == RenderMode.LINE_LOOP) { LOGGER.error("calculateNormaleEdge(" + _materialName + ") : can not calculate normal on lines ..."); this.normalMode = NormalMode.NONE; return; } for (int iii = 0; iii < this.listVertex.size(); iii++) { - List tmpFaceList = this.listFaces.get(_materialName).face(); + final List tmpFaceList = this.listFaces.get(_materialName).face(); Vector3f normal = Vector3f.ZERO; // add the vertex from all the element in the list for face when the element in the face ... for (int jjj = 0; jjj < tmpFaceList.size(); jjj++) { outNormal.add(normal); - if (tmpFaceList.get(jjj).vertex[0] == iii || tmpFaceList.get(jjj).vertex[1] == iii || tmpFaceList.get(jjj).vertex[2] == iii) { + if (tmpFaceList.get(jjj).vertex[0] == iii || tmpFaceList.get(jjj).vertex[1] == iii + || tmpFaceList.get(jjj).vertex[2] == iii) { normal = normal.add(this.listFacesNormal.get(jjj)); } } @@ -600,8 +702,9 @@ public class ResourceMesh extends ResourceStaticMesh { protected void calculateNormaleFaceLocal(final String _materialName) { if (this.normalMode == NormalMode.FACE) { LOGGER.trace("calculateNormaleFace(" + _materialName + ")"); - RenderMode tmpRenderMode = this.materials.get(_materialName).getRenderMode(); - if (tmpRenderMode == RenderMode.POINT || tmpRenderMode == RenderMode.LINE || tmpRenderMode == RenderMode.LINE_STRIP || tmpRenderMode == RenderMode.LINE_LOOP) { + final RenderMode tmpRenderMode = this.materials.get(_materialName).getRenderMode(); + if (tmpRenderMode == RenderMode.POINT || tmpRenderMode == RenderMode.LINE + || tmpRenderMode == RenderMode.LINE_STRIP || tmpRenderMode == RenderMode.LINE_LOOP) { LOGGER.error("calculateNormaleFace(" + _materialName + ") : can not calculate normal on lines ..."); this.normalMode = NormalMode.NONE; return; @@ -612,17 +715,19 @@ public class ResourceMesh extends ResourceStaticMesh { } else if (this.listPaletteFaces.containsKey(_materialName)) { faceList = this.listPaletteFaces.get(_materialName); } - for (Face it : faceList.face()) { + for (final Face it : faceList.face()) { // for all case, We use only the 3 vertex for quad element, in theory 3D modeler export element in triangle if it is not a real plane. - Vector3f normal = (this.listVertex.get(it.vertex[0]).less(this.listVertex.get(it.vertex[1]))).cross(this.listVertex.get(it.vertex[1]).less(this.listVertex.get(it.vertex[2]))); + final Vector3f normal = (this.listVertex.get(it.vertex[0]).less(this.listVertex.get(it.vertex[1]))) + .cross(this.listVertex.get(it.vertex[1]).less(this.listVertex.get(it.vertex[2]))); //LOGGER.info("normal: " + normal.normalized()); if (normal.isZero()) { - LOGGER.error("Null vertor for a face ... " + this.listVertex.get(it.vertex[0]) + " " + this.listVertex.get(it.vertex[1]) + " " + this.listVertex.get(it.vertex[2])); + LOGGER.error("Null vertor for a face ... " + this.listVertex.get(it.vertex[0]) + " " + + this.listVertex.get(it.vertex[1]) + " " + this.listVertex.get(it.vertex[2])); this.listFacesNormal.add(new Vector3f(1, 0, 0)); } else { this.listFacesNormal.add(normal.normalize()); } - int normalID = this.listFacesNormal.size() - 1; + final int normalID = this.listFacesNormal.size() - 1; it.normal[0] = normalID; it.normal[1] = normalID; it.normal[2] = normalID; @@ -632,7 +737,7 @@ public class ResourceMesh extends ResourceStaticMesh { protected void calculateNormaleFaces(final List materialsNames) { this.listFacesNormal.clear(); - for (String name : materialsNames) { + for (final String name : materialsNames) { LOGGER.warn("generate normal for: '" + name + "'"); calculateNormaleFaceLocal(name); } @@ -803,9 +908,9 @@ public class ResourceMesh extends ResourceStaticMesh { public void generateVBO() { this.listFacesDrawIndex.clear(); this.outPosition = new ArrayList<>(); - List outNormal = new ArrayList<>(); - List outTexturePosition = new ArrayList<>(); - List outColor = new ArrayList<>(); + final List outNormal = new ArrayList<>(); + final List outTexturePosition = new ArrayList<>(); + final List outColor = new ArrayList<>(); // calculate the normal of all faces if needed if (this.normalMode != NormalMode.NONE && this.listFacesNormal.size() == 0) { // when no normal detected == > auto generate Face normal .... @@ -813,18 +918,19 @@ public class ResourceMesh extends ResourceStaticMesh { // calculateNormaleFace(this.listFaces.getKeys()[0]); } - LOGGER.warn("Generate VBO for nb faces layers: " + this.listFaces.size() + " list layer=" + this.listFaces.keySet()); + LOGGER.warn("Generate VBO for nb faces layers: " + this.listFaces.size() + " list layer=" + + this.listFaces.keySet()); // generate element in 2 pass: // - create new index depending on a vertex is a unique component of position, texture, normal // - the index list generation (can be dynamic ... (TODO later)) //for (int kkk=0; kkk elem : this.listFaces.entrySet()) { + for (final Entry elem : this.listFaces.entrySet()) { // clean faces indexes : elem.getValue().index().clear(); - int outPositionIndewStart = this.outPosition.size(); + final int outPositionIndewStart = this.outPosition.size(); int nbIndicInFace = 3; - if (this.materials.containsKey(elem.getKey()) == false) { + if (!this.materials.containsKey(elem.getKey())) { LOGGER.warn("missing materials : '" + elem.getKey() + "' not in " + this.materials.keySet()); continue; } @@ -835,12 +941,12 @@ public class ResourceMesh extends ResourceStaticMesh { case QUAD, QUAD_STRIP -> 4; case POLYGON -> 3; }; - FaceIndexing tmpFaceList = elem.getValue(); - for (Face face : tmpFaceList.face()) { - int[] vertexVBOId = new int[3]; + final FaceIndexing tmpFaceList = elem.getValue(); + for (final Face face : tmpFaceList.face()) { + final int[] vertexVBOId = new int[3]; for (int indice = 0; indice < nbIndicInFace; indice++) { // get position - Vector3f position = this.listVertex.get(face.vertex[indice]); + final Vector3f position = this.listVertex.get(face.vertex[indice]); // get Color Color color; if (face.color[indice] != -1) { @@ -864,10 +970,11 @@ public class ResourceMesh extends ResourceStaticMesh { // get Texture Position Vector2f texturepos = Vector2f.ZERO; if (face.uv[indice] >= 0) { - texturepos = new Vector2f(this.listUV.get(face.uv[indice]).x(), 1.0f - this.listUV.get(face.uv[indice]).y()); + texturepos = new Vector2f(this.listUV.get(face.uv[indice]).x(), + 1.0f - this.listUV.get(face.uv[indice]).y()); } // Create the vectex Buffer list: - boolean elementFind = false; + final boolean elementFind = false; // #ifdef TRY_MINIMAL_VBO // for (int jjj=0; jjj outIndex = new ArrayList<>(); + final List outIndex = new ArrayList<>(); if (this.listPaletteFaces.size() != 0) { - int outPositionIndewStart = this.outPosition.size(); - FaceIndexing outputIndex = new FaceIndexing(); + final int outPositionIndewStart = this.outPosition.size(); + final FaceIndexing outputIndex = new FaceIndexing(); //Add palette virtual material: this.listFaces.put("palette", outputIndex); // manage Palette interfaces: - for (Entry elem : this.listPaletteFaces.entrySet()) { + for (final Entry elem : this.listPaletteFaces.entrySet()) { int nbIndicInFace = 3; - if (this.materials.containsKey(elem.getKey()) == false) { + if (!this.materials.containsKey(elem.getKey())) { LOGGER.warn("missing materials : '" + elem.getKey() + "' not in " + this.materials.keySet()); continue; } @@ -929,26 +1037,28 @@ public class ResourceMesh extends ResourceStaticMesh { case QUAD: case QUAD_STRIP: case POLYGON: - LOGGER.critical("Unsupported palet mode: " + this.materials.get(elem.getKey()).getRenderMode()); + LOGGER.error("Unsupported palet mode: " + this.materials.get(elem.getKey()).getRenderMode()); + System.exit(-1); break; } - float maxValues = ResourcePaletteFile.getColorMax(); - float height = ResourcePaletteFile.getHeight(); - int indexColor = ResourcePaletteFile.getColorId(elem.getKey().substring(8)); - Vector2f texturepos = new Vector2f((indexColor + 0.5f) / maxValues, 0.5f / height); - LOGGER.error("find color : " + elem.getKey().substring(8) + " ==> " + indexColor + " pos = " + texturepos); + final float maxValues = ResourcePaletteFile.getColorMax(); + final float height = ResourcePaletteFile.getHeight(); + final int indexColor = ResourcePaletteFile.getColorId(elem.getKey().substring(8)); + final Vector2f texturepos = new Vector2f((indexColor + 0.5f) / maxValues, 0.5f / height); + LOGGER.error( + "find color : " + elem.getKey().substring(8) + " ==> " + indexColor + " pos = " + texturepos); int faceId = -1; - FaceIndexing tmpFaceList = elem.getValue(); - for (Face face : tmpFaceList.face()) { + final FaceIndexing tmpFaceList = elem.getValue(); + for (final Face face : tmpFaceList.face()) { faceId++; //LOGGER.warn("Parse faceID = " + faceId); - int[] vertexVBOId = new int[3]; + final int[] vertexVBOId = new int[3]; for (int indice = 0; indice < nbIndicInFace; indice++) { //LOGGER.warn("find position indice = " + indice + " / " + face.vertex.length); // get position - Vector3f position = this.listVertex.get(face.vertex[indice]); + final Vector3f position = this.listVertex.get(face.vertex[indice]); // get Color - Color color = Color.WHITE; + final Color color = Color.WHITE; // get Normal Vector3f normal = new Vector3f(1, 0, 0); switch (this.normalMode) { @@ -1016,7 +1126,7 @@ public class ResourceMesh extends ResourceStaticMesh { LOGGER.info(" - " + elem); } */ - Vector2i elements = this.listFacesDrawIndex.get(layerName); + final Vector2i elements = this.listFacesDrawIndex.get(layerName); super.render(elements.x(), elements.y()); } diff --git a/src/org/atriasoft/loader3d/resources/ResourceMeshEmf.java b/src/org/atriasoft/loader3d/resources/ResourceMeshEmf.java index e4ee08c..9fb7676 100644 --- a/src/org/atriasoft/loader3d/resources/ResourceMeshEmf.java +++ b/src/org/atriasoft/loader3d/resources/ResourceMeshEmf.java @@ -16,12 +16,14 @@ import org.atriasoft.gale.backend3d.OpenGL.RenderMode; import org.atriasoft.loader3d.Face; import org.atriasoft.loader3d.FaceIndexing; import org.atriasoft.loader3d.NormalMode; -import org.atriasoft.loader3d.internal.Log; import org.atriasoft.loader3d.model.Material; import org.atriasoft.loader3d.model.PhysicShape; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ResourceMeshEmf extends ResourceMesh { - + private static final Logger LOGGER = LoggerFactory.getLogger(ResourceMeshEmf.class); + enum emfModuleMode { EMFModuleSkip(-1), //!< skip the current module ==> filtered... EMFModuleNone(0), //!< Nothing in parsing @@ -42,25 +44,25 @@ public class ResourceMeshEmf extends ResourceMesh { EMFModulePhysics(301), //!< EMFModulePhysicsNamed(302), //!< EMFModulePhysics_END(400); //!< - + private final int value; - - emfModuleMode(int value) { + + emfModuleMode(final int value) { this.value = value; } - + int getValue() { return this.value; } } - + // TODO : rework with string line extractor /** * Create a mesh from Ewol Mesh File. * @param fileName generic URI if parameter filter is set the mesh is partially loaded applying the filter * @throws Exception pb in parsing the file maybe no vertices inside... */ - public ResourceMeshEmf(Uri fileName) throws Exception { + public ResourceMeshEmf(final Uri fileName) throws Exception { super(fileName); Pattern filterPattern = null; if (fileName.hasProperty("filter")) { @@ -69,23 +71,23 @@ public class ResourceMeshEmf extends ResourceMesh { this.mode = RenderMode.TRIANGLE; this.checkNormal = true; this.normalMode = NormalMode.NONE; - InputStream fileIOStream = Uri.getStream(fileName); + final InputStream fileIOStream = Uri.getStream(fileName); if (fileIOStream == null) { LOGGER.error("CAn not get the file named='" + fileName + "'"); return; // TODO false; } - BufferedReader fileIO = new BufferedReader(new InputStreamReader(fileIOStream)); + final BufferedReader fileIO = new BufferedReader(new InputStreamReader(fileIOStream)); // get the fileSize ... - + //int size = fileIO.size(); - + String inputDataLine; - Dynamic levelIO = new Dynamic<>(0); + final Dynamic levelIO = new Dynamic<>(0); // load the first line : inputDataLine = readLine(fileIO, levelIO); - if (inputDataLine.startsWith("EMF(STRING)") == true) { + if (inputDataLine.startsWith("EMF(STRING)")) { // parse in string mode ... - } else if (inputDataLine.startsWith("EMF(BINARY)") == true) { + } else if (inputDataLine.startsWith("EMF(BINARY)")) { LOGGER.error(" file binary mode is not supported now : 'EMF(BINARY)'"); return; // TODO false; } else { @@ -101,14 +103,14 @@ public class ResourceMeshEmf extends ResourceMesh { String materialName = ""; Material material = null; // physical shape: - PhysicShape physics = null; + final PhysicShape physics = null; boolean haveUVMapping = false; int offsetVertexId = 0; int offsetUV = 0; int offsetFaceNormal = 0; int offsetVertexNormal = 0; while ((inputDataLine = readLine(fileIO, levelIO)) != null) { - int level = levelIO.value; + final int level = levelIO.value; if (level == -1) { // detect comment; LOGGER.warn("Detect comment"); @@ -116,11 +118,11 @@ public class ResourceMeshEmf extends ResourceMesh { } if (level == 0) { // new section ... - if (inputDataLine.startsWith("Mesh:") == true) { + if (inputDataLine.startsWith("Mesh:")) { currentMode = emfModuleMode.EMFModuleMesh; currentMeshName = inputDataLine.substring(5); if (filterPattern != null) { - Matcher m = filterPattern.matcher(currentMeshName); + final Matcher m = filterPattern.matcher(currentMeshName); if (!m.matches()) { currentMode = emfModuleMode.EMFModuleSkip; LOGGER.trace("Parse Mesh(SKIP): " + currentMeshName); @@ -169,7 +171,7 @@ public class ResourceMeshEmf extends ResourceMesh { material = new Material(); materialName = inputDataLine.substring(9); LOGGER.trace("Parse Palette: " + materialName); - } else if (inputDataLine.startsWith("Physics:") == true) { + } else if (inputDataLine.startsWith("Physics:")) { currentMode = emfModuleMode.EMFModulePhysics; LOGGER.trace("Parse global Physics: "); } else { @@ -181,25 +183,26 @@ public class ResourceMeshEmf extends ResourceMesh { // skip the content... continue; } - if (currentMode.getValue() >= emfModuleMode.EMFModuleMesh.getValue() && currentMode.getValue() <= emfModuleMode.EMFModuleMesh_END.getValue()) { + if (currentMode.getValue() >= emfModuleMode.EMFModuleMesh.getValue() + && currentMode.getValue() <= emfModuleMode.EMFModuleMesh_END.getValue()) { if (level == 1) { - if (inputDataLine.startsWith("Vertex:") == true) { + if (inputDataLine.startsWith("Vertex:")) { currentMode = emfModuleMode.EMFModuleMeshVertex; LOGGER.trace(" Vertex ..."); - } else if (inputDataLine.startsWith("UV-mapping:") == true) { + } else if (inputDataLine.startsWith("UV-mapping:")) { currentMode = emfModuleMode.EMFModuleMeshUVMapping; haveUVMapping = true; LOGGER.trace(" UV-mapping ..."); - } else if (inputDataLine.startsWith("Normal(vertex):") == true) { + } else if (inputDataLine.startsWith("Normal(vertex):")) { currentMode = emfModuleMode.EMFModuleMeshNormalVertex; LOGGER.trace(" Normal(vertex) ..."); - } else if (inputDataLine.startsWith("Normal(face):") == true) { + } else if (inputDataLine.startsWith("Normal(face):")) { currentMode = emfModuleMode.EMFModuleMeshNormalFace; LOGGER.trace(" Normal(face) ..."); - } else if (inputDataLine.startsWith("Face:") == true) { + } else if (inputDataLine.startsWith("Face:")) { currentMode = emfModuleMode.EMFModuleMeshFace; LOGGER.trace(" Face ..."); - } else if (inputDataLine.startsWith("Physics:") == true) { + } else if (inputDataLine.startsWith("Physics:")) { currentMode = emfModuleMode.EMFModuleMeshPhysics; LOGGER.trace(" Physics ..."); } else { @@ -214,16 +217,16 @@ public class ResourceMeshEmf extends ResourceMesh { LOGGER.error("Unknow ... " + level); break; case EMFModuleMeshVertex: { - for (String elem : inputDataLine.split("\\|")) { - Vector3f vertex = Vector3f.valueOf(elem); + for (final String elem : inputDataLine.split("\\|")) { + final Vector3f vertex = Vector3f.valueOf(elem); this.listVertex.add(vertex); } LOGGER.trace(" " + this.listVertex.size() + " vertex"); break; } case EMFModuleMeshUVMapping: { - for (String elem : inputDataLine.split("\\|")) { - Vector2f uvMap = Vector2f.valueOf(elem); + for (final String elem : inputDataLine.split("\\|")) { + final Vector2f uvMap = Vector2f.valueOf(elem); this.listUV.add(uvMap); } LOGGER.trace(" " + this.listUV.size() + " coord"); @@ -231,8 +234,8 @@ public class ResourceMeshEmf extends ResourceMesh { } case EMFModuleMeshNormalVertex: { this.normalMode = NormalMode.VERTEX; - for (String elem : inputDataLine.split("\\|")) { - Vector3f normal = Vector3f.valueOf(elem); + for (final String elem : inputDataLine.split("\\|")) { + final Vector3f normal = Vector3f.valueOf(elem); this.listVertexNormal.add(normal); } LOGGER.trace(" " + this.listVertexNormal.size() + " Normals"); @@ -241,8 +244,8 @@ public class ResourceMeshEmf extends ResourceMesh { case EMFModuleMeshNormalFace: { LOGGER.error("Change mode in face mode ..."); this.normalMode = NormalMode.FACE; - for (String elem : inputDataLine.split("\\|")) { - Vector3f normal = Vector3f.valueOf(elem); + for (final String elem : inputDataLine.split("\\|")) { + final Vector3f normal = Vector3f.valueOf(elem); this.listFacesNormal.add(normal); } LOGGER.trace(" " + this.listFacesNormal.size() + " Normals"); @@ -251,23 +254,21 @@ public class ResourceMeshEmf extends ResourceMesh { case EMFModuleMeshFace: case EMFModuleMeshFaceMaterial: if (level == 2) { - String meshFaceMaterialID = inputDataLine; + final String meshFaceMaterialID = inputDataLine; // new material selection currentMode = emfModuleMode.EMFModuleMeshFaceMaterial; if (inputDataLine.startsWith("palette:")) { - if (this.listPaletteFaces.containsKey(meshFaceMaterialID) == false) { + if (!this.listPaletteFaces.containsKey(meshFaceMaterialID)) { currentFaceIndexing = new FaceIndexing(); this.listPaletteFaces.put(meshFaceMaterialID, currentFaceIndexing); } else { currentFaceIndexing = this.listPaletteFaces.get(meshFaceMaterialID); } + } else if (!this.listFaces.containsKey(meshFaceMaterialID)) { + currentFaceIndexing = new FaceIndexing(); + this.listFaces.put(meshFaceMaterialID, currentFaceIndexing); } else { - if (this.listFaces.containsKey(meshFaceMaterialID) == false) { - currentFaceIndexing = new FaceIndexing(); - this.listFaces.put(meshFaceMaterialID, currentFaceIndexing); - } else { - currentFaceIndexing = this.listFaces.get(meshFaceMaterialID); - } + currentFaceIndexing = this.listFaces.get(meshFaceMaterialID); } LOGGER.trace(" " + inputDataLine); } else if (currentMode == emfModuleMode.EMFModuleMeshFaceMaterial) { @@ -275,7 +276,7 @@ public class ResourceMeshEmf extends ResourceMesh { LOGGER.error("Get elements without material defined ..."); continue; } - for (String elem : inputDataLine.split("\\|")) { + for (final String elem : inputDataLine.split("\\|")) { Face tmp = null; if (this.normalMode == NormalMode.FACE) { tmp = Face.valueOf(elem, offsetVertexId, offsetUV, offsetFaceNormal); @@ -316,49 +317,51 @@ public class ResourceMeshEmf extends ResourceMesh { } continue; } - if ((currentMode.getValue() >= emfModuleMode.EMFModuleMaterial.getValue() && currentMode.getValue() <= emfModuleMode.EMFModuleMaterial_END.getValue()) - || (currentMode.getValue() >= emfModuleMode.EMFModulePalette.getValue() && currentMode.getValue() <= emfModuleMode.EMFModulePalette_END.getValue())) { + if ((currentMode.getValue() >= emfModuleMode.EMFModuleMaterial.getValue() + && currentMode.getValue() <= emfModuleMode.EMFModuleMaterial_END.getValue()) + || (currentMode.getValue() >= emfModuleMode.EMFModulePalette.getValue() + && currentMode.getValue() <= emfModuleMode.EMFModulePalette_END.getValue())) { if (material == null) { LOGGER.error("material allocation error"); continue; } - if (inputDataLine.startsWith("Ns ") == true) { - float tmpVal = Float.valueOf(inputDataLine.substring(3)); + if (inputDataLine.startsWith("Ns ")) { + final float tmpVal = Float.valueOf(inputDataLine.substring(3)); material.setShininess(tmpVal); LOGGER.trace(" Shininess " + tmpVal); - } else if (inputDataLine.startsWith("Ka ") == true) { + } else if (inputDataLine.startsWith("Ka ")) { Vector4f tmp = Vector4f.valueOf(inputDataLine.substring(3)); tmp = tmp.withW(1); material.setAmbientFactor(tmp); LOGGER.trace(" AmbientFactor " + tmp); - } else if (inputDataLine.startsWith("Kd ") == true) { + } else if (inputDataLine.startsWith("Kd ")) { Vector4f tmp = Vector4f.valueOf(inputDataLine.substring(3)); tmp = tmp.withW(1); material.setDiffuseFactor(tmp); LOGGER.error(" DiffuseFactor " + tmp); - } else if (inputDataLine.startsWith("Ks ") == true) { + } else if (inputDataLine.startsWith("Ks ")) { Vector4f tmp = Vector4f.valueOf(inputDataLine.substring(3)); tmp = tmp.withW(1); material.setSpecularFactor(tmp); LOGGER.trace(" SpecularFactor " + tmp); - } else if (inputDataLine.startsWith("Ni ") == true) { - float tmpVal = Float.valueOf(inputDataLine.substring(3)); + } else if (inputDataLine.startsWith("Ni ")) { + final float tmpVal = Float.valueOf(inputDataLine.substring(3)); // TODO : ... LOGGER.trace(" Ni " + tmpVal); - } else if (inputDataLine.startsWith("d ") == true) { - float tmpVal = Float.valueOf(inputDataLine.substring(2)); + } else if (inputDataLine.startsWith("d ")) { + final float tmpVal = Float.valueOf(inputDataLine.substring(2)); // TODO : ... LOGGER.trace(" d " + tmpVal); - } else if (inputDataLine.startsWith("illum ") == true) { - float tmpVal = Float.valueOf(inputDataLine.substring(6)); + } else if (inputDataLine.startsWith("illum ")) { + final float tmpVal = Float.valueOf(inputDataLine.substring(6)); // TODO : ... LOGGER.trace(" illum " + tmpVal); - } else if (inputDataLine.startsWith("map_Kd ") == true) { + } else if (inputDataLine.startsWith("map_Kd ")) { Uri tmpTexture = fileName.getParent(); tmpTexture = tmpTexture.pathAdd(inputDataLine.substring(7)); material.setTexture0(tmpTexture); LOGGER.trace(" Texture " + tmpTexture); - } else if (inputDataLine.startsWith("renderMode ") == true) { + } else if (inputDataLine.startsWith("renderMode ")) { //RenderMode mode; //frothis.string(mode, &inputDataLine[11]); //material.setRenderMode(mode); @@ -368,7 +371,8 @@ public class ResourceMeshEmf extends ResourceMesh { } continue; } - if (currentMode.getValue() >= emfModuleMode.EMFModulePhysics.getValue() && currentMode.getValue() <= emfModuleMode.EMFModulePhysics_END.getValue()) { + if (currentMode.getValue() >= emfModuleMode.EMFModulePhysics.getValue() + && currentMode.getValue() <= emfModuleMode.EMFModulePhysics_END.getValue()) { if (level == 1) { LOGGER.error("Load shape : " + inputDataLine); // physics = ege::physics::Shape::create(inputDataLine); @@ -406,15 +410,15 @@ public class ResourceMeshEmf extends ResourceMesh { material = null; } LOGGER.trace("Stop parsing Mesh file"); - + try { fileIO.close(); fileIOStream.close(); - } catch (IOException e) { + } catch (final IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } - + LOGGER.trace("New mesh : "); LOGGER.trace(" nb vertex: " + this.listVertex.size()); LOGGER.trace(" nb UV: " + this.listUV.size()); @@ -431,7 +435,7 @@ public class ResourceMeshEmf extends ResourceMesh { } generateVBO(); } - + //private String loadNextData(int _maxData, // BufferedReader _file) { // return loadNextData(_maxData, _file, false, false, true); @@ -492,8 +496,8 @@ public class ResourceMeshEmf extends ResourceMesh { // } // return null; //} - - private String readLine(BufferedReader _file, Dynamic level) { + + private String readLine(final BufferedReader _file, final Dynamic level) { level.value = 0; StringBuffer buf = new StringBuffer(); boolean startLine = true; @@ -502,7 +506,7 @@ public class ResourceMeshEmf extends ResourceMesh { int current = '\0'; try { current = _file.read(); - } catch (IOException e) { + } catch (final IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } @@ -519,11 +523,11 @@ public class ResourceMeshEmf extends ResourceMesh { startLine = false; if (current == '#') { // detect comment ==> remove to the end of file ==> no data availlable - if (differentThanSpace == false) { + if (!differentThanSpace) { while (current != '\0' && current != '\n') { try { current = _file.read(); - } catch (IOException e) { + } catch (final IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } @@ -539,7 +543,7 @@ public class ResourceMeshEmf extends ResourceMesh { while (current != '\0' && current != '\n') { try { current = _file.read(); - } catch (IOException e) { + } catch (final IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } @@ -550,7 +554,7 @@ public class ResourceMeshEmf extends ResourceMesh { if (current == '\t' || current == ' ') { hasSpace = true; } else { - if (hasSpace == true) { + if (hasSpace) { buf.append(' '); hasSpace = false; } @@ -559,7 +563,7 @@ public class ResourceMeshEmf extends ResourceMesh { } try { current = _file.read(); - } catch (IOException e) { + } catch (final IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } @@ -570,5 +574,5 @@ public class ResourceMeshEmf extends ResourceMesh { } return buf.toString(); } - + } diff --git a/src/org/atriasoft/loader3d/resources/ResourcePaletteFile.java b/src/org/atriasoft/loader3d/resources/ResourcePaletteFile.java index 6629abc..a6ecead 100644 --- a/src/org/atriasoft/loader3d/resources/ResourcePaletteFile.java +++ b/src/org/atriasoft/loader3d/resources/ResourcePaletteFile.java @@ -20,14 +20,16 @@ import org.atriasoft.etk.Color; import org.atriasoft.etk.Uri; import org.atriasoft.etk.math.Vector4f; import org.atriasoft.gale.resource.Resource; -import org.atriasoft.loader3d.internal.Log; import org.atriasoft.loader3d.model.MaterialBase; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * ColorFile is a Resource designed to be specific with the theme (for * example black, or white or orange ...) */ public class ResourcePaletteFile extends Resource { + private static final Logger LOGGER = LoggerFactory.getLogger(ResourcePaletteFile.class); private static final int COUNT_HEIGHT_PALETTE = 16; private static final int COUNT_MAX_COLOR_PALETTE = 32; private static final String DEFINE_PALETTE = "palette"; @@ -42,18 +44,21 @@ public class ResourcePaletteFile extends Resource { static { ResourcePaletteFile.PALETTE_ELEMENTS.add("unknown"); } + public static synchronized int getColorId(final String color) { - for (int iii=0; iii listNormal = new TreeMap(); // !< List of all color in the file - private final SortedMap listOver = new TreeMap(); // !< List of all color in the file - private final SortedMap listSelect = new TreeMap(); // !< List of all color in the file + private final SortedMap listNormal = new TreeMap<>(); // !< List of all color in the file + private final SortedMap listOver = new TreeMap<>(); // !< List of all color in the file + private final SortedMap listSelect = new TreeMap<>(); // !< List of all color in the file /** * Constructor of the color property file @@ -108,18 +114,18 @@ public class ResourcePaletteFile extends Resource { if (id == null) { return this.errorColor; } - Vector4f color = this.listNormal.get(id).getAmbientFactor(); + final Vector4f color = this.listNormal.get(id).getAmbientFactor(); return new Color(color.x(), color.y(), color.z(), color.w()); } private MaterialBase configMaterial(final JsonObject node, final MaterialBase parent) { - MaterialBase element = parent.clone(); + final MaterialBase element = parent.clone(); try { if (node != null) { if (node.exist(ResourcePaletteFile.DEFINE_SHINESS)) { final double data = node.get(ResourcePaletteFile.DEFINE_SHINESS).toJsonNumber().getValue(); LOGGER.trace(" Shininess " + data); - element.setShininess((float)data); + element.setShininess((float) data); } if (node.exist(ResourcePaletteFile.DEFINE_AMBIANT_FACTOR)) { final String data = node.get(ResourcePaletteFile.DEFINE_AMBIANT_FACTOR).toJsonString().getValue(); @@ -166,18 +172,20 @@ public class ResourcePaletteFile extends Resource { Ejson.display(out); return; } - for (Entry it : baseObject.getNodes().entrySet()) { - JsonObject nodeMaterial = it.getValue().toJsonObject(); - MaterialBase mat = configMaterial(nodeMaterial, this.base); + for (final Entry it : baseObject.getNodes().entrySet()) { + final JsonObject nodeMaterial = it.getValue().toJsonObject(); + final MaterialBase mat = configMaterial(nodeMaterial, this.base); this.listNormal.put(it.getKey(), mat); if (nodeMaterial.exist(ResourcePaletteFile.DEFINE_OVER)) { - MaterialBase matOver = configMaterial(nodeMaterial.get(ResourcePaletteFile.DEFINE_OVER).toJsonObject(), mat); + final MaterialBase matOver = configMaterial( + nodeMaterial.get(ResourcePaletteFile.DEFINE_OVER).toJsonObject(), mat); this.listOver.put(it.getKey(), matOver); } else { this.listOver.put(it.getKey(), mat); } if (nodeMaterial.exist(ResourcePaletteFile.DEFINE_SELECT)) { - MaterialBase matSelect = configMaterial(nodeMaterial.get(ResourcePaletteFile.DEFINE_SELECT).toJsonObject(), mat); + final MaterialBase matSelect = configMaterial( + nodeMaterial.get(ResourcePaletteFile.DEFINE_SELECT).toJsonObject(), mat); this.listSelect.put(it.getKey(), matSelect); } else { this.listSelect.put(it.getKey(), mat); @@ -199,40 +207,44 @@ public class ResourcePaletteFile extends Resource { } public ImageByte getImageByte() { - int width = ResourcePaletteFile.COUNT_MAX_COLOR_PALETTE; - int height = ResourcePaletteFile.COUNT_HEIGHT_PALETTE; - ImageByteRGBA out = new ImageByteRGBA(width, height); + final int width = ResourcePaletteFile.COUNT_MAX_COLOR_PALETTE; + final int height = ResourcePaletteFile.COUNT_HEIGHT_PALETTE; + final ImageByteRGBA out = new ImageByteRGBA(width, height); //ImageByteRGB out = new ImageByteRGB(width, height); // clear the palette: //float val = 0.0f; - for (int xxx=0; xxx < width; xxx++) { - for (int yyy=0; yyy < ResourcePaletteFile.COUNT_HEIGHT_PALETTE; yyy++) { + for (int xxx = 0; xxx < width; xxx++) { + for (int yyy = 0; yyy < ResourcePaletteFile.COUNT_HEIGHT_PALETTE; yyy++) { out.setColorFloat(xxx, yyy, 1, 1, 1, 1); //out.setColorFloat(xxx, yyy, val, val + 0.125f, val + 0.85f, 1); //val += 0.01f; } } - - for (Entry it : this.listNormal.entrySet()) { - int id = ResourcePaletteFile.getColorId(it.getKey()); - MaterialBase mat = it.getValue(); - MaterialBase matOver = this.listOver.get(it.getKey()); - MaterialBase matSelect = this.listSelect.get(it.getKey()); + + for (final Entry it : this.listNormal.entrySet()) { + final int id = ResourcePaletteFile.getColorId(it.getKey()); + final MaterialBase mat = it.getValue(); + final MaterialBase matOver = this.listOver.get(it.getKey()); + final MaterialBase matSelect = this.listSelect.get(it.getKey()); LOGGER.error("add Material in texture: '" + it.getKey() + "' ==> " + id + " mat=" + mat); // 2 element this will permit to change color in the future on depend on some parameters... putColor(id, 0, out, mat); putColor(id, 1, out, matOver); putColor(id, 2, out, matSelect); putColor(id, 3, out, mat); - // Note: this model permit to have interpolation of color normal <-> over ; normal <-> select ; over <-> select + // Note: this model permit to have interpolation of color normal <-> over ; normal <-> select ; over <-> select } return out; } + private void putColor(final int index, final int offset, final ImageByte image, final MaterialBase mat) { - image.setColorFloat(index, 0+offset, mat.getDiffuseFactor().x(), mat.getDiffuseFactor().y(), mat.getDiffuseFactor().z(), mat.getDiffuseFactor().w()); - image.setColorFloat(index, 4+offset, mat.getSpecularFactor().x(), mat.getSpecularFactor().y(), mat.getSpecularFactor().z(), mat.getSpecularFactor().w()); - image.setColorFloat(index, 8+offset, mat.getAmbientFactor().x(), mat.getAmbientFactor().y(), mat.getAmbientFactor().z(), mat.getAmbientFactor().w()); - image.setColorFloat(index, 12+offset, mat.getShininess(), 1.0f, 1.0f, 1.0f); + image.setColorFloat(index, 0 + offset, mat.getDiffuseFactor().x(), mat.getDiffuseFactor().y(), + mat.getDiffuseFactor().z(), mat.getDiffuseFactor().w()); + image.setColorFloat(index, 4 + offset, mat.getSpecularFactor().x(), mat.getSpecularFactor().y(), + mat.getSpecularFactor().z(), mat.getSpecularFactor().w()); + image.setColorFloat(index, 8 + offset, mat.getAmbientFactor().x(), mat.getAmbientFactor().y(), + mat.getAmbientFactor().z(), mat.getAmbientFactor().w()); + image.setColorFloat(index, 12 + offset, mat.getShininess(), 1.0f, 1.0f, 1.0f); } } diff --git a/src/org/atriasoft/loader3d/resources/ResourceStaticMeshObj.java b/src/org/atriasoft/loader3d/resources/ResourceStaticMeshObj.java index 4484f4e..7c2021b 100644 --- a/src/org/atriasoft/loader3d/resources/ResourceStaticMeshObj.java +++ b/src/org/atriasoft/loader3d/resources/ResourceStaticMeshObj.java @@ -4,10 +4,13 @@ import org.atriasoft.etk.Uri; import org.atriasoft.gale.backend3d.OpenGL.RenderMode; import org.atriasoft.gale.resource.Resource; import org.atriasoft.loader3d.OBJFileLoader; -import org.atriasoft.loader3d.internal.Log; import org.atriasoft.loader3d.model.ModelData; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ResourceStaticMeshObj extends ResourceStaticTexturedMesh { + private static final Logger LOGGER = LoggerFactory.getLogger(ResourceStaticMeshObj.class); + public static ResourceStaticMeshObj create(final Uri uriObj) { ResourceStaticMeshObj resource; Resource resource2; @@ -22,7 +25,8 @@ public class ResourceStaticMeshObj extends ResourceStaticTexturedMesh { resource2.keep(); return (ResourceStaticMeshObj) resource2; } - LOGGER.critical("Request resource file : '" + name + "' With the wrong type (dynamic cast error)"); + LOGGER.error("Request resource file : '" + name + "' With the wrong type (dynamic cast error)"); + System.exit(-1); return null; } resource = new ResourceStaticMeshObj(uriObj); diff --git a/src/org/atriasoft/loader3d/resources/ResourceStaticMeshObjDynamic.java b/src/org/atriasoft/loader3d/resources/ResourceStaticMeshObjDynamic.java index bb50a0c..3e597ee 100644 --- a/src/org/atriasoft/loader3d/resources/ResourceStaticMeshObjDynamic.java +++ b/src/org/atriasoft/loader3d/resources/ResourceStaticMeshObjDynamic.java @@ -3,9 +3,11 @@ package org.atriasoft.loader3d.resources; import org.atriasoft.etk.Uri; import org.atriasoft.gale.resource.Resource; import org.atriasoft.gale.resource.ResourceVirtualArrayObject; -import org.atriasoft.loader3d.internal.Log; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ResourceStaticMeshObjDynamic extends ResourceStaticMeshObj { + private static final Logger LOGGER = LoggerFactory.getLogger(ResourceStaticMeshObjDynamic.class); public static ResourceStaticMeshObjDynamic create(final Uri uriObj) { ResourceStaticMeshObjDynamic resource; @@ -17,11 +19,12 @@ public class ResourceStaticMeshObjDynamic extends ResourceStaticMeshObj { } resource2 = Resource.getManager().localKeep(name); if (resource2 != null) { - if (resource2 instanceof ResourceStaticMeshObjDynamic tmpp) { + if (resource2 instanceof final ResourceStaticMeshObjDynamic tmpp) { resource2.keep(); return tmpp; } - LOGGER.critical("Request resource file : '" + name + "' With the wrong type (dynamic cast error)"); + LOGGER.error("Request resource file : '" + name + "' With the wrong type (dynamic cast error)"); + System.exit(-1); return null; } resource = new ResourceStaticMeshObjDynamic(uriObj); diff --git a/resources/resources/emf/tree1.emf b/src/resources/emf/tree1.emf similarity index 100% rename from resources/resources/emf/tree1.emf rename to src/resources/emf/tree1.emf diff --git a/test/src/resources/emf/Entry.emf b/test/src/resources/emf/Entry.emf deleted file mode 100644 index 4311336..0000000 --- a/test/src/resources/emf/Entry.emf +++ /dev/null @@ -1,71 +0,0 @@ -EMF(STRING) -# Blender v2.92.0 EMF File: 'Entry.blend' -Mesh:EntryBox_Cube - Vertex:16 - 20.042355 7.751226 20.042355|20.042355 7.751226 -20.042355|20.042355 -4.633502 20.042355|20.042355 -4.633502 -20.042355|-20.042355 7.751226 20.042355|-20.042355 7.751226 -20.042355|-20.042355 -4.633502 20.042355|-20.042355 -4.633502 -20.042355|10.127714 -7.726907 10.127714|10.127714 -7.726907 -10.127714|-10.127714 -7.726907 10.127714|-10.127714 -7.726907 -10.127714|-10.127714 -9.146553 -10.127714|-10.127714 -9.146553 10.127714|10.127714 -9.146553 10.127714|10.127714 -9.146553 -10.127714| - UV-mapping: - 0.000100 0.000100|0.999900 0.999900|0.000100 0.999900|0.999900 0.000100|0.074219 0.995849|0.120606 0.943115|0.121582 0.993408|0.112927 0.992387|0.078245 0.948093|0.073324 0.991157|0.101769 0.970961|0.080974 0.959440|0.102023 0.957458|0.111927 0.985005|0.078476 0.953015|0.082167 0.983774|0.074219 0.944092|0.111696 0.944402|0.080720 0.975385|0.113157 0.949323|0.174907 0.947863|0.131613 0.991157|0.132843 0.945402|0.178368 0.944941|0.137534 0.984544|0.142456 0.948632|0.171985 0.949093|0.136074 0.991157|0.137304 0.950323|0.174677 0.949093|0.135074 0.992387|0.136304 0.949093|0.178598 0.993618|0.178368 0.988235|0.173216 0.991157|0.175907 0.989926|0.013265 0.951784|0.051868 0.992387|0.013034 0.993618|0.054098 0.951784|0.137534 0.988235|0.177138 0.947863|0.135074 0.947862|0.172446 0.988465| - Normal(face):22 - 0.000000 -1.000000 0.000000|-0.297843 -0.954615 0.000000|0.000000 -0.954615 -0.297843|0.000000 -0.954615 0.297843|0.297843 -0.954615 0.000000|0.000000 0.000000 1.000000|-1.000000 0.000000 0.000000|0.000000 0.000000 -1.000000|1.000000 0.000000 -0.000000|0.000000 1.000000 -0.000000| - Face:22 - gui_dynamic_1 - 14/0/0 12/1/0 15/2/0| 14/0/0 13/3/0 12/1/0| - palette:gui_border_1 - 7/4/1 10/5/1 6/6/1| 3/7/2 11/8/2 7/9/2| 6/10/3 8/11/3 2/12/3| 2/13/4 9/14/4 3/15/4| 7/4/1 11/16/1 10/5/1| 3/7/2 9/17/2 11/8/2| 6/10/3 10/18/3 8/11/3| 2/13/4 8/19/4 9/14/4| - palette:gui_border_2 - 4/20/5 2/21/5 0/22/5| 6/23/6 5/24/6 7/25/6| 1/26/7 7/27/7 5/28/7| 0/29/8 3/30/8 1/31/8| 4/20/5 6/32/5 2/21/5| 6/23/6 4/33/6 5/24/6| 1/26/7 3/34/7 7/27/7| 0/29/8 2/35/8 3/30/8| - palette:gui_center - 9/36/0 10/37/0 11/38/0| 9/36/0 8/39/0 10/37/0| - palette:gui_back - 5/40/9 0/41/9 1/42/9| 5/40/9 4/43/9 0/41/9| - -Materials:gui_dynamic_1 - Ns 225.000000 - Ka 1.000000 1.000000 1.000000 - Kd 0.800000 0.800000 0.800000 - Ks 0.500000 0.500000 0.500000 - Ke 0.000000 0.000000 0.000000 - vNi 1.450000 - d 1.000000 - illum 2 - map_Kd /home/heero/dev/workspace-game/atriasoft/ewol/resources/resources/ewol/theme/shape/empty_area.png -# Just for information: -Palettes:gui_back - Ns 225.000000 - Ka 1.000000 1.000000 1.000000 - Kd 0.800000 0.000000 0.005632 - Ks 0.500000 0.500000 0.500000 - Ke 0.000000 0.000000 0.000000 - vNi 1.450000 - d 1.000000 - illum 2 -# Just for information: -Palettes:gui_border_1 - Ns 225.000000 - Ka 1.000000 1.000000 1.000000 - Kd 0.000000 0.002615 0.800000 - Ks 0.500000 0.500000 0.500000 - Ke 0.000000 0.000000 0.000000 - vNi 1.450000 - d 1.000000 - illum 2 -# Just for information: -Palettes:gui_border_2 - Ns 225.000000 - Ka 1.000000 1.000000 1.000000 - Kd 0.000000 0.800000 0.170495 - Ks 0.500000 0.500000 0.500000 - Ke 0.000000 0.000000 0.000000 - vNi 1.450000 - d 1.000000 - illum 2 -# Just for information: -Palettes:gui_center - Ns 225.000000 - Ka 1.000000 1.000000 1.000000 - Kd 0.438544 0.438544 0.438544 - Ks 0.500000 0.500000 0.500000 - Ke 0.000000 0.000000 0.000000 - vNi 1.450000 - d 1.000000 - illum 2 diff --git a/test/src/resources/emf/tower.emf b/test/src/resources/emf/tower.emf deleted file mode 100644 index f880304..0000000 --- a/test/src/resources/emf/tower.emf +++ /dev/null @@ -1,57 +0,0 @@ -EMF(STRING) -# Blender v2.92.0 EMF File: 'tower.blend' -Mesh:tower_Cube - Vertex:68 - 1.000000 1.000000 1.968156|1.000000 1.000000 0.509101|1.000000 -1.000000 1.968156|1.000000 -1.000000 0.509101|-1.000000 1.000000 1.968156|-1.000000 1.000000 0.509101|-1.000000 -1.000000 1.968156|-1.000000 -1.000000 0.509101|0.519091 0.519091 2.988363|0.519091 -0.519091 2.988363|-0.519091 0.519091 2.988363|-0.519091 -0.519091 2.988363|1.267435 0.519091 3.279218|1.267435 -0.519091 3.279218|-0.519091 0.519091 3.279218|-0.519091 -0.519091 3.279218|1.267435 0.519091 4.102064|1.267435 -0.519091 4.102064|-0.519091 0.519091 4.102064|-0.519091 -0.519091 4.102064|-1.007701 0.133857 3.584548|-1.007701 -0.133857 3.584548|-1.007701 0.133857 3.796734|-1.007701 -0.133857 3.796734|-3.394721 0.108124 3.604944|-3.394721 -0.108124 3.604944|-3.394721 0.108124 3.776338|-3.394721 -0.108124 3.776338|-3.394721 0.148343 3.573067|-3.394721 -0.148343 3.573067|-3.394721 0.148343 3.808215|-3.394721 -0.148343 3.808215|-3.865651 0.148343 3.573067|-3.865651 -0.148343 3.573067|-3.865651 0.148343 3.808215|-3.865651 -0.148343 3.808215|0.468620 0.227433 3.055862|0.468620 -0.227433 3.055862|-0.227433 0.227433 3.055862|-0.227433 -0.227433 3.055862|0.671236 0.227433 3.376956|0.671236 -0.227433 3.376956|0.216371 0.227433 3.376956|0.216371 -0.227433 3.376956|1.304951 1.304951 0.327262|1.304951 -1.304951 0.327262|-1.304951 1.304951 0.327262|-1.304951 -1.304951 0.327262|1.304951 1.304951 -0.001257|1.304951 -1.304951 -0.001257|-1.304951 1.304951 -0.001257|-1.304951 -1.304951 -0.001257|1.644974 0.319018 3.437792|1.644974 -0.319018 3.437792|1.644974 0.319018 3.943490|1.644974 -0.319018 3.943490|1.469387 0.154815 3.567937|1.469387 -0.154815 3.567937|1.469387 0.154815 3.813344|1.469387 -0.154815 3.813344|-3.865651 0.081533 3.626019|-3.865651 -0.081533 3.626019|-3.865651 0.081533 3.755262|-3.865651 -0.081533 3.755262|0.301836 0.081533 3.626019|0.301836 -0.081533 3.626019|0.301836 0.081533 3.755262|0.301836 -0.081533 3.755262| - Normal(face):128 - -0.000000 0.000000 -1.000000|0.000000 1.000000 -0.000000|0.000000 -0.225474 0.974249|-0.225474 0.000000 0.974249|0.000000 0.000000 1.000000|-0.619140 0.785281 0.000000|0.000000 -1.000000 0.000000|-0.529936 0.000000 0.848038|-0.619140 -0.785281 0.000000|-0.529936 0.000000 -0.848038|1.000000 -0.000000 -0.000000|-1.000000 0.000000 0.000000|0.000000 0.225474 0.974249|0.800875 0.000000 0.598832|0.845703 0.000000 -0.533654|-0.586173 0.000000 0.810186|0.595465 0.000000 0.803381|0.683034 0.730387 0.000000|0.595465 0.000000 -0.803381|0.683034 -0.730387 0.000000|0.468253 0.883595 0.000000|-0.010780 -0.999942 0.000000|-0.008544 0.000000 0.999964|-0.010780 0.999942 0.000000|-0.008544 0.000000 -0.999964|0.387250 0.000000 0.921975|0.468253 -0.883595 0.000000|0.387250 0.000000 -0.921975|-0.008544 0.000000 0.999963|-0.008544 -0.000000 -0.999963|0.000000 0.904541 0.426386|0.000000 -0.904541 0.426386|-0.904541 0.000000 0.426386|0.904541 0.000000 0.426386|-0.000000 -0.512150 0.858896|-0.512150 0.000000 0.858896|0.512150 0.000000 0.858896|-0.000000 0.512150 0.858896| - Face:128 - palette:canon_2 - 15/0 12/0 13/0| 14/1 16/1 12/1| 9/2 39/2 11/2| 36/1 42/1 40/1| 11/3 38/3 10/3| 18/4 17/4 16/4| 14/5 22/5 18/5| 13/6 19/6 15/6| 18/7 23/7 19/7| 19/8 21/8 15/8| 15/9 20/9 14/9| 26/10 31/10 27/10| 28/1 34/1 30/1| 24/10 30/10 26/10| 25/10 28/10 24/10| 27/10 29/10 25/10| 35/11 61/11 33/11| 29/0 32/0 28/0| 31/6 33/6 29/6| 30/4 35/4 31/4| 8/12 38/12 36/12| 8/13 37/13 9/13| 40/4 43/4 41/4| 36/14 41/14 37/14| 37/6 43/6 39/6| 39/15 42/15 38/15| 52/16 57/16 53/16| 56/10 59/10 57/10| 53/17 59/17 55/17| 55/18 58/18 54/18| 54/19 56/19 52/19| 60/6 66/6 62/6| 34/11 63/11 35/11| 32/11 62/11 34/11| 33/11 60/11 32/11| 65/11 66/11 64/11| 61/4 64/4 60/4| 63/1 65/1 61/1| 62/0 67/0 63/0| 15/0 14/0 12/0| 14/1 18/1 16/1| 9/2 37/2 39/2| 36/1 38/1 42/1| 11/3 39/3 38/3| 18/4 19/4 17/4| 14/5 20/5 22/5| 13/6 17/6 19/6| 18/7 22/7 23/7| 19/8 23/8 21/8| 15/9 21/9 20/9| 26/10 30/10 31/10| 28/1 32/1 34/1| 24/10 28/10 30/10| 25/10 29/10 28/10| 27/10 31/10 29/10| 35/11 63/11 61/11| 29/0 33/0 32/0| 31/6 35/6 33/6| 30/4 34/4 35/4| 8/12 10/12 38/12| 8/13 36/13 37/13| 40/4 42/4 43/4| 36/14 40/14 41/14| 37/6 41/6 43/6| 39/15 43/15 42/15| 52/16 56/16 57/16| 56/10 58/10 59/10| 53/17 57/17 59/17| 55/18 59/18 58/18| 54/19 58/19 56/19| 60/6 64/6 66/6| 34/11 62/11 63/11| 32/11 60/11 62/11| 33/11 61/11 60/11| 65/11 67/11 66/11| 61/4 65/4 64/4| 63/1 67/1 65/1| 62/0 66/0 67/0| - palette:canon_1 - 16/20 52/20 12/20| 23/21 25/21 21/21| 22/22 27/22 23/22| 20/23 26/23 22/23| 21/24 24/24 20/24| 17/25 54/25 16/25| 13/26 55/26 17/26| 12/27 53/27 13/27| 16/20 54/20 52/20| 23/21 27/21 25/21| 22/28 26/28 27/28| 20/23 24/23 26/23| 21/29 25/29 24/29| 17/25 55/25 54/25| 13/26 53/26 55/26| 12/27 52/27 53/27| - palette:user_1 - 4/30 8/30 0/30| 2/6 7/6 3/6| 6/11 5/11 7/11| 0/10 3/10 1/10| 4/1 1/1 5/1| 6/31 9/31 11/31| 6/32 10/32 4/32| 0/33 9/33 2/33| 4/30 10/30 8/30| 2/6 6/6 7/6| 6/11 4/11 5/11| 0/10 2/10 3/10| 4/1 0/1 1/1| 6/31 2/31 9/31| 6/32 11/32 10/32| 0/33 8/33 9/33| - palette:bulding_base_1 - 7/34 45/34 3/34| 45/10 48/10 44/10| 5/35 47/35 7/35| 3/36 44/36 1/36| 1/37 46/37 5/37| 48/0 51/0 50/0| 44/1 50/1 46/1| 47/6 49/6 45/6| 46/11 51/11 47/11| 7/34 47/34 45/34| 45/10 49/10 48/10| 5/35 46/35 47/35| 3/36 45/36 44/36| 1/37 44/37 46/37| 48/0 49/0 51/0| 44/1 48/1 50/1| 47/6 51/6 49/6| 46/11 50/11 51/11| - -# Just for information: -Palettes:bulding_base_1 - Ns 225.000000 - Ka 1.000000 1.000000 1.000000 - Kd 0.014670 0.014670 0.014670 - Ks 0.500000 0.500000 0.500000 - Ke 0.000000 0.000000 0.000000 - vNi 1.450000 - d 1.000000 - illum 2 -# Just for information: -Palettes:canon_1 - Ns 225.000000 - Ka 1.000000 1.000000 1.000000 - Kd 0.800000 0.000000 0.008711 - Ks 0.500000 0.500000 0.500000 - Ke 0.000000 0.000000 0.000000 - vNi 1.450000 - d 1.000000 - illum 2 -# Just for information: -Palettes:canon_2 - Ns 323.999994 - Ka 1.000000 1.000000 1.000000 - Kd 0.001354 0.800000 0.053320 - Ks 0.500000 0.500000 0.500000 - Ke 0.000000 0.000000 0.000000 - vNi 1.450000 - d 1.000000 - illum 2 -# Just for information: -Palettes:user_1 - Ns 225.000000 - Ka 1.000000 1.000000 1.000000 - Kd 0.113655 0.510074 0.800000 - Ks 0.500000 0.500000 0.500000 - Ke 0.000000 0.000000 0.000000 - vNi 1.450000 - d 1.000000 - illum 2 diff --git a/test/src/resources/emf/tree1.blend b/test/src/resources/emf/tree1.blend deleted file mode 100644 index 486cf39cbd5f5c401e5aea3293d85e9c61d78a23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 738808 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
    6L~N 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