Added the ASSIMP library
Added the files provided for the tutorial Added the SplitMeshNode and SubMeshNode classes
This commit is contained in:
384
Assimp/include/assimp/scene.h
Normal file
384
Assimp/include/assimp/scene.h
Normal file
@ -0,0 +1,384 @@
|
||||
/*
|
||||
---------------------------------------------------------------------------
|
||||
Open Asset Import Library (assimp)
|
||||
---------------------------------------------------------------------------
|
||||
|
||||
Copyright (c) 2006-2017, assimp 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 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.
|
||||
---------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/** @file scene.h
|
||||
* @brief Defines the data structures in which the imported scene is returned.
|
||||
*/
|
||||
#pragma once
|
||||
#ifndef AI_SCENE_H_INC
|
||||
#define AI_SCENE_H_INC
|
||||
|
||||
#include "types.h"
|
||||
#include "texture.h"
|
||||
#include "mesh.h"
|
||||
#include "light.h"
|
||||
#include "camera.h"
|
||||
#include "material.h"
|
||||
#include "anim.h"
|
||||
#include "metadata.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifdef __GNUC__
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wattributes"
|
||||
#endif
|
||||
|
||||
// -------------------------------------------------------------------------------
|
||||
/**
|
||||
* A node in the imported hierarchy.
|
||||
*
|
||||
* Each node has name, a parent node (except for the root node),
|
||||
* a transformation relative to its parent and possibly several child nodes.
|
||||
* Simple file formats don't support hierarchical structures - for these formats
|
||||
* the imported scene does consist of only a single root node without children.
|
||||
*/
|
||||
// -------------------------------------------------------------------------------
|
||||
struct ASSIMP_API aiNode
|
||||
{
|
||||
/** The name of the node.
|
||||
*
|
||||
* The name might be empty (length of zero) but all nodes which
|
||||
* need to be referenced by either bones or animations are named.
|
||||
* Multiple nodes may have the same name, except for nodes which are referenced
|
||||
* by bones (see #aiBone and #aiMesh::mBones). Their names *must* be unique.
|
||||
*
|
||||
* Cameras and lights reference a specific node by name - if there
|
||||
* are multiple nodes with this name, they are assigned to each of them.
|
||||
* <br>
|
||||
* There are no limitations with regard to the characters contained in
|
||||
* the name string as it is usually taken directly from the source file.
|
||||
*
|
||||
* Implementations should be able to handle tokens such as whitespace, tabs,
|
||||
* line feeds, quotation marks, ampersands etc.
|
||||
*
|
||||
* Sometimes assimp introduces new nodes not present in the source file
|
||||
* into the hierarchy (usually out of necessity because sometimes the
|
||||
* source hierarchy format is simply not compatible). Their names are
|
||||
* surrounded by @verbatim <> @endverbatim e.g.
|
||||
* @verbatim<DummyRootNode> @endverbatim.
|
||||
*/
|
||||
C_STRUCT aiString mName;
|
||||
|
||||
/** The transformation relative to the node's parent. */
|
||||
C_STRUCT aiMatrix4x4 mTransformation;
|
||||
|
||||
/** Parent node. NULL if this node is the root node. */
|
||||
C_STRUCT aiNode* mParent;
|
||||
|
||||
/** The number of child nodes of this node. */
|
||||
unsigned int mNumChildren;
|
||||
|
||||
/** The child nodes of this node. NULL if mNumChildren is 0. */
|
||||
C_STRUCT aiNode** mChildren;
|
||||
|
||||
/** The number of meshes of this node. */
|
||||
unsigned int mNumMeshes;
|
||||
|
||||
/** The meshes of this node. Each entry is an index into the
|
||||
* mesh list of the #aiScene.
|
||||
*/
|
||||
unsigned int* mMeshes;
|
||||
|
||||
/** Metadata associated with this node or NULL if there is no metadata.
|
||||
* Whether any metadata is generated depends on the source file format. See the
|
||||
* @link importer_notes @endlink page for more information on every source file
|
||||
* format. Importers that don't document any metadata don't write any.
|
||||
*/
|
||||
C_STRUCT aiMetadata* mMetaData;
|
||||
|
||||
#ifdef __cplusplus
|
||||
/** Constructor */
|
||||
aiNode();
|
||||
|
||||
/** Construction from a specific name */
|
||||
explicit aiNode(const std::string& name);
|
||||
|
||||
/** Destructor */
|
||||
~aiNode();
|
||||
|
||||
/** Searches for a node with a specific name, beginning at this
|
||||
* nodes. Normally you will call this method on the root node
|
||||
* of the scene.
|
||||
*
|
||||
* @param name Name to search for
|
||||
* @return NULL or a valid Node if the search was successful.
|
||||
*/
|
||||
inline
|
||||
const aiNode* FindNode(const aiString& name) const {
|
||||
return FindNode(name.data);
|
||||
}
|
||||
|
||||
inline
|
||||
aiNode* FindNode(const aiString& name) {
|
||||
return FindNode(name.data);
|
||||
}
|
||||
|
||||
const aiNode* FindNode(const char* name) const;
|
||||
|
||||
aiNode* FindNode(const char* name);
|
||||
|
||||
/**
|
||||
* @brief Will add new children.
|
||||
* @param numChildren Number of children to add.
|
||||
* @param children The array with pointers showing to the children.
|
||||
*/
|
||||
void addChildren(unsigned int numChildren, aiNode **children);
|
||||
#endif // __cplusplus
|
||||
};
|
||||
|
||||
#ifdef __GNUC__
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
// -------------------------------------------------------------------------------
|
||||
/**
|
||||
* Specifies that the scene data structure that was imported is not complete.
|
||||
* This flag bypasses some internal validations and allows the import
|
||||
* of animation skeletons, material libraries or camera animation paths
|
||||
* using Assimp. Most applications won't support such data.
|
||||
*/
|
||||
#define AI_SCENE_FLAGS_INCOMPLETE 0x1
|
||||
|
||||
/**
|
||||
* This flag is set by the validation postprocess-step (aiPostProcess_ValidateDS)
|
||||
* if the validation is successful. In a validated scene you can be sure that
|
||||
* any cross references in the data structure (e.g. vertex indices) are valid.
|
||||
*/
|
||||
#define AI_SCENE_FLAGS_VALIDATED 0x2
|
||||
|
||||
/**
|
||||
* This flag is set by the validation postprocess-step (aiPostProcess_ValidateDS)
|
||||
* if the validation is successful but some issues have been found.
|
||||
* This can for example mean that a texture that does not exist is referenced
|
||||
* by a material or that the bone weights for a vertex don't sum to 1.0 ... .
|
||||
* In most cases you should still be able to use the import. This flag could
|
||||
* be useful for applications which don't capture Assimp's log output.
|
||||
*/
|
||||
#define AI_SCENE_FLAGS_VALIDATION_WARNING 0x4
|
||||
|
||||
/**
|
||||
* This flag is currently only set by the aiProcess_JoinIdenticalVertices step.
|
||||
* It indicates that the vertices of the output meshes aren't in the internal
|
||||
* verbose format anymore. In the verbose format all vertices are unique,
|
||||
* no vertex is ever referenced by more than one face.
|
||||
*/
|
||||
#define AI_SCENE_FLAGS_NON_VERBOSE_FORMAT 0x8
|
||||
|
||||
/**
|
||||
* Denotes pure height-map terrain data. Pure terrains usually consist of quads,
|
||||
* sometimes triangles, in a regular grid. The x,y coordinates of all vertex
|
||||
* positions refer to the x,y coordinates on the terrain height map, the z-axis
|
||||
* stores the elevation at a specific point.
|
||||
*
|
||||
* TER (Terragen) and HMP (3D Game Studio) are height map formats.
|
||||
* @note Assimp is probably not the best choice for loading *huge* terrains -
|
||||
* fully triangulated data takes extremely much free store and should be avoided
|
||||
* as long as possible (typically you'll do the triangulation when you actually
|
||||
* need to render it).
|
||||
*/
|
||||
#define AI_SCENE_FLAGS_TERRAIN 0x10
|
||||
|
||||
/**
|
||||
* Specifies that the scene data can be shared between structures. For example:
|
||||
* one vertex in few faces. \ref AI_SCENE_FLAGS_NON_VERBOSE_FORMAT can not be
|
||||
* used for this because \ref AI_SCENE_FLAGS_NON_VERBOSE_FORMAT has internal
|
||||
* meaning about postprocessing steps.
|
||||
*/
|
||||
#define AI_SCENE_FLAGS_ALLOW_SHARED 0x20
|
||||
|
||||
// -------------------------------------------------------------------------------
|
||||
/** The root structure of the imported data.
|
||||
*
|
||||
* Everything that was imported from the given file can be accessed from here.
|
||||
* Objects of this class are generally maintained and owned by Assimp, not
|
||||
* by the caller. You shouldn't want to instance it, nor should you ever try to
|
||||
* delete a given scene on your own.
|
||||
*/
|
||||
// -------------------------------------------------------------------------------
|
||||
struct aiScene
|
||||
{
|
||||
/** Any combination of the AI_SCENE_FLAGS_XXX flags. By default
|
||||
* this value is 0, no flags are set. Most applications will
|
||||
* want to reject all scenes with the AI_SCENE_FLAGS_INCOMPLETE
|
||||
* bit set.
|
||||
*/
|
||||
unsigned int mFlags;
|
||||
|
||||
/** The root node of the hierarchy.
|
||||
*
|
||||
* There will always be at least the root node if the import
|
||||
* was successful (and no special flags have been set).
|
||||
* Presence of further nodes depends on the format and content
|
||||
* of the imported file.
|
||||
*/
|
||||
C_STRUCT aiNode* mRootNode;
|
||||
|
||||
/** The number of meshes in the scene. */
|
||||
unsigned int mNumMeshes;
|
||||
|
||||
/** The array of meshes.
|
||||
*
|
||||
* Use the indices given in the aiNode structure to access
|
||||
* this array. The array is mNumMeshes in size. If the
|
||||
* AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always
|
||||
* be at least ONE material.
|
||||
*/
|
||||
C_STRUCT aiMesh** mMeshes;
|
||||
|
||||
/** The number of materials in the scene. */
|
||||
unsigned int mNumMaterials;
|
||||
|
||||
/** The array of materials.
|
||||
*
|
||||
* Use the index given in each aiMesh structure to access this
|
||||
* array. The array is mNumMaterials in size. If the
|
||||
* AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always
|
||||
* be at least ONE material.
|
||||
*/
|
||||
C_STRUCT aiMaterial** mMaterials;
|
||||
|
||||
/** The number of animations in the scene. */
|
||||
unsigned int mNumAnimations;
|
||||
|
||||
/** The array of animations.
|
||||
*
|
||||
* All animations imported from the given file are listed here.
|
||||
* The array is mNumAnimations in size.
|
||||
*/
|
||||
C_STRUCT aiAnimation** mAnimations;
|
||||
|
||||
/** The number of textures embedded into the file */
|
||||
unsigned int mNumTextures;
|
||||
|
||||
/** The array of embedded textures.
|
||||
*
|
||||
* Not many file formats embed their textures into the file.
|
||||
* An example is Quake's MDL format (which is also used by
|
||||
* some GameStudio versions)
|
||||
*/
|
||||
C_STRUCT aiTexture** mTextures;
|
||||
|
||||
/** The number of light sources in the scene. Light sources
|
||||
* are fully optional, in most cases this attribute will be 0
|
||||
*/
|
||||
unsigned int mNumLights;
|
||||
|
||||
/** The array of light sources.
|
||||
*
|
||||
* All light sources imported from the given file are
|
||||
* listed here. The array is mNumLights in size.
|
||||
*/
|
||||
C_STRUCT aiLight** mLights;
|
||||
|
||||
/** The number of cameras in the scene. Cameras
|
||||
* are fully optional, in most cases this attribute will be 0
|
||||
*/
|
||||
unsigned int mNumCameras;
|
||||
|
||||
/** The array of cameras.
|
||||
*
|
||||
* All cameras imported from the given file are listed here.
|
||||
* The array is mNumCameras in size. The first camera in the
|
||||
* array (if existing) is the default camera view into
|
||||
* the scene.
|
||||
*/
|
||||
C_STRUCT aiCamera** mCameras;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
//! Default constructor - set everything to 0/NULL
|
||||
ASSIMP_API aiScene();
|
||||
|
||||
//! Destructor
|
||||
ASSIMP_API ~aiScene();
|
||||
|
||||
//! Check whether the scene contains meshes
|
||||
//! Unless no special scene flags are set this will always be true.
|
||||
inline bool HasMeshes() const {
|
||||
return mMeshes != NULL && mNumMeshes > 0;
|
||||
}
|
||||
|
||||
//! Check whether the scene contains materials
|
||||
//! Unless no special scene flags are set this will always be true.
|
||||
inline bool HasMaterials() const {
|
||||
return mMaterials != NULL && mNumMaterials > 0;
|
||||
}
|
||||
|
||||
//! Check whether the scene contains lights
|
||||
inline bool HasLights() const {
|
||||
return mLights != NULL && mNumLights > 0;
|
||||
}
|
||||
|
||||
//! Check whether the scene contains textures
|
||||
inline bool HasTextures() const {
|
||||
return mTextures != NULL && mNumTextures > 0;
|
||||
}
|
||||
|
||||
//! Check whether the scene contains cameras
|
||||
inline bool HasCameras() const {
|
||||
return mCameras != NULL && mNumCameras > 0;
|
||||
}
|
||||
|
||||
//! Check whether the scene contains animations
|
||||
inline bool HasAnimations() const {
|
||||
return mAnimations != NULL && mNumAnimations > 0;
|
||||
}
|
||||
|
||||
#endif // __cplusplus
|
||||
|
||||
/** Internal data, do not touch */
|
||||
#ifdef __cplusplus
|
||||
void* mPrivate;
|
||||
#else
|
||||
char* mPrivate;
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
} //! namespace Assimp
|
||||
#endif
|
||||
|
||||
#endif // AI_SCENE_H_INC
|
Reference in New Issue
Block a user