219 lines
8.3 KiB
Java
219 lines
8.3 KiB
Java
/*
|
|
---------------------------------------------------------------------------
|
|
Open Asset Import Library (ASSIMP)
|
|
---------------------------------------------------------------------------
|
|
|
|
Copyright (c) 2006-2008, ASSIMP Development Team
|
|
|
|
All rights reserved.
|
|
|
|
Redistribution and use of this software in source and binary forms,
|
|
with or without modification, are permitted provided that the following
|
|
conditions are met:
|
|
|
|
* Redistributions of source code must retain the above
|
|
copyright notice, this list of conditions and the
|
|
following disclaimer.
|
|
|
|
* Redistributions in binary form must reproduce the above
|
|
copyright notice, this list of conditions and the
|
|
following disclaimer in the documentation and/or other
|
|
materials provided with the distribution.
|
|
|
|
* Neither the name of the ASSIMP team, nor the names of its
|
|
contributors may be used to endorse or promote products
|
|
derived from this software without specific prior
|
|
written permission of the ASSIMP Development Team.
|
|
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
---------------------------------------------------------------------------
|
|
*/
|
|
|
|
|
|
package assimp;
|
|
|
|
/**
|
|
* Enumeration class that defines postprocess steps that can be executed on a model
|
|
* after it has been loaded. All PPSteps are implemented in C++, so their performance
|
|
* is awesome. Most steps are O(n * log(n)).
|
|
*
|
|
* @author Aramis (Alexander Gessler)
|
|
* @version 1.0
|
|
*/
|
|
public class PostProcessStep {
|
|
|
|
/**
|
|
* Default vertex split limit for the SplitLargeMeshes process
|
|
*/
|
|
public static final int DEFAULT_VERTEX_SPLIT_LIMIT = 1000000;
|
|
|
|
/**
|
|
* Default triangle split limit for the SplitLargeMeshes process
|
|
*/
|
|
public static final int DEFAULT_TRIANGLE_SPLIT_LIMIT = 1000000;
|
|
|
|
private static int s_iVertexSplitLimit = DEFAULT_VERTEX_SPLIT_LIMIT;
|
|
private static int s_iTriangleSplitLimit = DEFAULT_TRIANGLE_SPLIT_LIMIT;
|
|
|
|
/**
|
|
* Identifies and joins identical vertex data sets within all imported
|
|
* meshes. After this step is run each mesh does contain only unique
|
|
* vertices anymore, so a vertex is possibly used by multiple faces.
|
|
* You propably always want to use this post processing step.
|
|
*/
|
|
public static final PostProcessStep JoinIdenticalVertices =
|
|
new PostProcessStep("JoinIdenticalVertices");
|
|
|
|
|
|
/**
|
|
* Splits large meshes into submeshes
|
|
* This is quite useful for realtime rendering where the number of
|
|
* vertices is usually limited by the video driver.
|
|
* <p/>
|
|
* The split limits can be set through SetVertexSplitLimit() and
|
|
* SetTriangleSplitLimit(). The default values are
|
|
* <code>DEFAULT_VERTEX_SPLIT_LIMIT</code> and
|
|
* <code>DEFAULT_TRIANGLE_SPLIT_LIMIT</code>
|
|
*/
|
|
public static final PostProcessStep SplitLargeMeshes =
|
|
new PostProcessStep("SplitLargeMeshes");
|
|
|
|
|
|
/**
|
|
* Omits all normals found in the file. This can be used together
|
|
* with either the <code>GenSmoothNormals</code> or the
|
|
* <code>GenFaceNormal</code> step to force the recomputation of the
|
|
* normals. If none of the two flags is specified, the output mesh
|
|
* won't have normals
|
|
*/
|
|
public static final PostProcessStep KillNormals =
|
|
new PostProcessStep("KillNormals");
|
|
|
|
|
|
/**
|
|
* Generates smooth normals for all vertices in the mesh. This is
|
|
* ignored if normals are already existing. This step may not be used
|
|
* together with <code>GenFaceNormals</code>
|
|
*/
|
|
public static final PostProcessStep GenSmoothNormals =
|
|
new PostProcessStep("GenSmoothNormals");
|
|
|
|
|
|
/**
|
|
* Generates normals for all faces of all meshes. The normals are
|
|
* shared between the three vertices of a face. This is ignored
|
|
* if normals are already existing. This step may not be used together
|
|
* with <code>GenSmoothNormals</code>
|
|
*/
|
|
public static final PostProcessStep GenFaceNormals =
|
|
new PostProcessStep("GenFaceNormals");
|
|
|
|
|
|
/**
|
|
* Calculates the tangents and bitangents for the imported meshes. Does
|
|
* nothing if a mesh does not have normals. You might want this post
|
|
* processing step to be executed if you plan to use tangent space
|
|
* calculations such as normal mapping applied to the meshes.
|
|
*/
|
|
public static final PostProcessStep CalcTangentSpace =
|
|
new PostProcessStep("CalcTangentSpace");
|
|
|
|
|
|
/**
|
|
* Converts all the imported data to a left-handed coordinate space
|
|
* such as the DirectX coordinate system. By default the data is
|
|
* returned in a right-handed coordinate space which for example
|
|
* OpenGL prefers. In this space, +X points to the right, +Y points towards
|
|
* the viewer and and +Z points upwards. In the DirectX coordinate space
|
|
* +X points to the right, +Y points upwards and +Z points away from
|
|
* the viewer.
|
|
*/
|
|
public static final PostProcessStep ConvertToLeftHanded =
|
|
new PostProcessStep("ConvertToLeftHanded ");
|
|
|
|
|
|
/**
|
|
* Removes the node graph and pretransforms all vertices with the local
|
|
* transformation matrices of their nodes. The output scene does still
|
|
* contain nodes, however, there is only a root node with childs, each
|
|
* one referencing only one mesh, each mesh referencing one material.
|
|
* For rendering, you can simply render all meshes in order, you don't
|
|
* need to pay attention to local transformations and the node hierarchy.
|
|
* Animations are removed during this step.
|
|
*/
|
|
public static final PostProcessStep PreTransformVertices =
|
|
new PostProcessStep("PreTransformVertices");
|
|
|
|
|
|
/**
|
|
* Set the vertex split limit for the "SplitLargeMeshes" process
|
|
* If a mesh exceeds this limit it will be splitted
|
|
*
|
|
* @param limit New vertex split limit. Pass 0xffffffff to disable
|
|
* a vertex split limit. However, splitting by triangles is still active
|
|
* then.
|
|
* @return Old vertex split limit
|
|
*/
|
|
public static synchronized int setVertexSplitLimit(int limit) {
|
|
if (s_iVertexSplitLimit != limit) {
|
|
// send to the JNI bridge ...
|
|
s_iVertexSplitLimit = limit;
|
|
_NativeSetVertexSplitLimit(limit);
|
|
}
|
|
return limit;
|
|
}
|
|
|
|
/**
|
|
* Set the triangle split limit for the "SplitLargeMeshes" process
|
|
* If a mesh exceeds this limit it will be splitted
|
|
*
|
|
* @param limit new triangle split limit. Pass 0xffffffff to disable
|
|
* a triangle split limit. However, splitting by vertices is still active
|
|
* then.
|
|
* @return Old triangle split limit
|
|
*/
|
|
public static synchronized int setTriangleSplitLimit(int limit) {
|
|
if (s_iTriangleSplitLimit != limit) {
|
|
// send to the JNI bridge ...
|
|
s_iTriangleSplitLimit = limit;
|
|
_NativeSetTriangleSplitLimit(limit);
|
|
}
|
|
return limit;
|
|
}
|
|
|
|
/**
|
|
* JNI bridge call. For internal use only
|
|
*
|
|
* @param limit New vertex split limit
|
|
*/
|
|
private native static void _NativeSetVertexSplitLimit(int limit);
|
|
|
|
/**
|
|
* JNI bridge call. For internal use only
|
|
*
|
|
* @param limit New triangle split limit
|
|
*/
|
|
private native static void _NativeSetTriangleSplitLimit(int limit);
|
|
|
|
|
|
private final String myName; // for debug only
|
|
|
|
private PostProcessStep(String name) {
|
|
myName = name;
|
|
}
|
|
|
|
public String toString() {
|
|
return myName;
|
|
}
|
|
}
|