Merge branch 'master' into fix_gltf2_camera_fov
commit
20acfeaf97
|
@ -388,14 +388,6 @@ IF (NOT TARGET uninstall AND ASSIMP_INSTALL)
|
||||||
ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
|
ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
# cmake configuration files
|
|
||||||
if(${BUILD_SHARED_LIBS})
|
|
||||||
set(BUILD_LIB_TYPE SHARED)
|
|
||||||
else()
|
|
||||||
set(BUILD_LIB_TYPE STATIC)
|
|
||||||
add_definitions(-DDDL_STATIC_LIBRARY=OFF)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
IF( UNIX )
|
IF( UNIX )
|
||||||
# Use GNUInstallDirs for Unix predefined directories
|
# Use GNUInstallDirs for Unix predefined directories
|
||||||
INCLUDE(GNUInstallDirs)
|
INCLUDE(GNUInstallDirs)
|
||||||
|
|
|
@ -76,10 +76,13 @@ The source code is organized in the following way:
|
||||||
code/AssetLib/<FormatName> Implementation for import and export for the format
|
code/AssetLib/<FormatName> Implementation for import and export for the format
|
||||||
|
|
||||||
### Where to get help ###
|
### Where to get help ###
|
||||||
For more information, visit [our website](http://assimp.org/). Or check out the `./doc`- folder, which contains the official documentation in HTML format.
|
To find our documentation, visit [our website](https://assimp.org/) or check out [Wiki](https://github.com/assimp/assimp/wiki)
|
||||||
(CHMs for Windows are included in some release packages and should be located right here in the root folder).
|
|
||||||
|
|
||||||
If the docs don't solve your problem, ask on [StackOverflow with the assimp-tag](http://stackoverflow.com/questions/tagged/assimp?sort=newest). If you think you found a bug, please open an issue on Github.
|
If the docs don't solve your problem, you can:
|
||||||
|
- Ask on [StackOverflow with the assimp-tag](http://stackoverflow.com/questions/tagged/assimp?sort=newest).
|
||||||
|
- Ask on [Assimp-Community on Reddit](https://www.reddit.com/r/Assimp/)
|
||||||
|
- Ask a question at [The Assimp-Discussion Board](https://github.com/assimp/assimp/discussions)
|
||||||
|
- Nothing has worked? File a question or an issue-report at [The Assimp-Issue Tracker](https://github.com/assimp/assimp/issues)
|
||||||
|
|
||||||
Open Asset Import Library is a library to load various 3d file formats into a shared, in-memory format. It supports more than __40 file formats__ for import and a growing selection of file formats for export.
|
Open Asset Import Library is a library to load various 3d file formats into a shared, in-memory format. It supports more than __40 file formats__ for import and a growing selection of file formats for export.
|
||||||
|
|
||||||
|
|
|
@ -448,7 +448,7 @@ void ColladaExporter::WriteLight(size_t pIndex) {
|
||||||
PushTag();
|
PushTag();
|
||||||
switch (light->mType) {
|
switch (light->mType) {
|
||||||
case aiLightSource_AMBIENT:
|
case aiLightSource_AMBIENT:
|
||||||
WriteAmbienttLight(light);
|
WriteAmbientLight(light);
|
||||||
break;
|
break;
|
||||||
case aiLightSource_DIRECTIONAL:
|
case aiLightSource_DIRECTIONAL:
|
||||||
WriteDirectionalLight(light);
|
WriteDirectionalLight(light);
|
||||||
|
@ -543,7 +543,7 @@ void ColladaExporter::WriteSpotLight(const aiLight *const light) {
|
||||||
mOutput << startstr << "</spot>" << endstr;
|
mOutput << startstr << "</spot>" << endstr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColladaExporter::WriteAmbienttLight(const aiLight *const light) {
|
void ColladaExporter::WriteAmbientLight(const aiLight *const light) {
|
||||||
|
|
||||||
const aiColor3D &color = light->mColorAmbient;
|
const aiColor3D &color = light->mColorAmbient;
|
||||||
mOutput << startstr << "<ambient>" << endstr;
|
mOutput << startstr << "<ambient>" << endstr;
|
||||||
|
|
|
@ -101,7 +101,7 @@ protected:
|
||||||
void WritePointLight(const aiLight *const light);
|
void WritePointLight(const aiLight *const light);
|
||||||
void WriteDirectionalLight(const aiLight *const light);
|
void WriteDirectionalLight(const aiLight *const light);
|
||||||
void WriteSpotLight(const aiLight *const light);
|
void WriteSpotLight(const aiLight *const light);
|
||||||
void WriteAmbienttLight(const aiLight *const light);
|
void WriteAmbientLight(const aiLight *const light);
|
||||||
|
|
||||||
/// Writes the controller library
|
/// Writes the controller library
|
||||||
void WriteControllerLibrary();
|
void WriteControllerLibrary();
|
||||||
|
|
|
@ -666,7 +666,7 @@ struct ChannelEntry {
|
||||||
const Collada::Accessor *mTimeAccessor; ///> Collada accessor to the time values
|
const Collada::Accessor *mTimeAccessor; ///> Collada accessor to the time values
|
||||||
const Collada::Data *mTimeData; ///> Source data array for the time values
|
const Collada::Data *mTimeData; ///> Source data array for the time values
|
||||||
const Collada::Accessor *mValueAccessor; ///> Collada accessor to the key value values
|
const Collada::Accessor *mValueAccessor; ///> Collada accessor to the key value values
|
||||||
const Collada::Data *mValueData; ///> Source datat array for the key value values
|
const Collada::Data *mValueData; ///> Source data array for the key value values
|
||||||
|
|
||||||
ChannelEntry() :
|
ChannelEntry() :
|
||||||
mChannel(),
|
mChannel(),
|
||||||
|
|
|
@ -762,6 +762,7 @@ void ColladaParser::ReadControllerWeights(XmlNode &node, Collada::Controller &pC
|
||||||
if (text == nullptr) {
|
if (text == nullptr) {
|
||||||
throw DeadlyImportError("Out of data while reading <vertex_weights>");
|
throw DeadlyImportError("Out of data while reading <vertex_weights>");
|
||||||
}
|
}
|
||||||
|
SkipSpacesAndLineEnd(&text);
|
||||||
it->first = strtoul10(text, &text);
|
it->first = strtoul10(text, &text);
|
||||||
SkipSpacesAndLineEnd(&text);
|
SkipSpacesAndLineEnd(&text);
|
||||||
if (*text == 0) {
|
if (*text == 0) {
|
||||||
|
|
|
@ -154,7 +154,6 @@ private:
|
||||||
const unsigned int column;
|
const unsigned int column;
|
||||||
};
|
};
|
||||||
|
|
||||||
// XXX should use C++11's unique_ptr - but assimp's need to keep working with 03
|
|
||||||
typedef const Token* TokenPtr;
|
typedef const Token* TokenPtr;
|
||||||
typedef std::vector< TokenPtr > TokenList;
|
typedef std::vector< TokenPtr > TokenList;
|
||||||
|
|
||||||
|
|
|
@ -162,8 +162,11 @@ void AnimResolver::UpdateAnimRangeSetup() {
|
||||||
const double my_last = (*it).keys.back().time;
|
const double my_last = (*it).keys.back().time;
|
||||||
|
|
||||||
const double delta = my_last - my_first;
|
const double delta = my_last - my_first;
|
||||||
|
if (delta == 0.0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
const size_t old_size = (*it).keys.size();
|
const size_t old_size = (*it).keys.size();
|
||||||
|
|
||||||
const float value_delta = (*it).keys.back().value - (*it).keys.front().value;
|
const float value_delta = (*it).keys.back().value - (*it).keys.front().value;
|
||||||
|
|
||||||
// NOTE: We won't handle reset, linear and constant here.
|
// NOTE: We won't handle reset, linear and constant here.
|
||||||
|
@ -176,8 +179,7 @@ void AnimResolver::UpdateAnimRangeSetup() {
|
||||||
case LWO::PrePostBehaviour_Oscillate: {
|
case LWO::PrePostBehaviour_Oscillate: {
|
||||||
const double start_time = delta - std::fmod(my_first - first, delta);
|
const double start_time = delta - std::fmod(my_first - first, delta);
|
||||||
std::vector<LWO::Key>::iterator n = std::find_if((*it).keys.begin(), (*it).keys.end(),
|
std::vector<LWO::Key>::iterator n = std::find_if((*it).keys.begin(), (*it).keys.end(),
|
||||||
[start_time](double t) { return start_time > t; }),
|
[start_time](double t) { return start_time > t; }), m;
|
||||||
m;
|
|
||||||
|
|
||||||
size_t ofs = 0;
|
size_t ofs = 0;
|
||||||
if (n != (*it).keys.end()) {
|
if (n != (*it).keys.end()) {
|
||||||
|
|
|
@ -39,8 +39,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
#ifndef ASSIMP_BUILD_NO_M3D_IMPORTER
|
#if !defined ASSIMP_BUILD_NO_M3D_IMPORTER || !(defined ASSIMP_BUILD_NO_EXPORT || defined ASSIMP_BUILD_NO_M3D_EXPORTER)
|
||||||
#if !(ASSIMP_BUILD_NO_EXPORT || ASSIMP_BUILD_NO_M3D_EXPORTER)
|
|
||||||
|
|
||||||
#include "M3DWrapper.h"
|
#include "M3DWrapper.h"
|
||||||
|
|
||||||
|
@ -149,4 +148,3 @@ void M3DWrapper::ClearSave() {
|
||||||
} // namespace Assimp
|
} // namespace Assimp
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
|
@ -47,8 +47,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#ifndef AI_M3DWRAPPER_H_INC
|
#ifndef AI_M3DWRAPPER_H_INC
|
||||||
#define AI_M3DWRAPPER_H_INC
|
#define AI_M3DWRAPPER_H_INC
|
||||||
|
|
||||||
#ifndef ASSIMP_BUILD_NO_M3D_IMPORTER
|
#if !defined ASSIMP_BUILD_NO_M3D_IMPORTER || !(defined ASSIMP_BUILD_NO_EXPORT || defined ASSIMP_BUILD_NO_M3D_EXPORTER)
|
||||||
#if !(ASSIMP_BUILD_NO_EXPORT || ASSIMP_BUILD_NO_M3D_EXPORTER)
|
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
@ -126,7 +125,6 @@ inline m3d_t *M3DWrapper::M3D() const {
|
||||||
|
|
||||||
} // namespace Assimp
|
} // namespace Assimp
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif // ASSIMP_BUILD_NO_M3D_IMPORTER
|
#endif // ASSIMP_BUILD_NO_M3D_IMPORTER
|
||||||
|
|
||||||
#endif // AI_M3DWRAPPER_H_INC
|
#endif // AI_M3DWRAPPER_H_INC
|
||||||
|
|
|
@ -270,8 +270,8 @@ if (NOT ASSIMP_NO_EXPORT)
|
||||||
# ASSIMP_BUILD_XXX_EXPORTER to TRUE for each exporter
|
# ASSIMP_BUILD_XXX_EXPORTER to TRUE for each exporter
|
||||||
OPTION(ASSIMP_BUILD_ALL_EXPORTERS_BY_DEFAULT "default value of all ASSIMP_BUILD_XXX_EXPORTER values" TRUE)
|
OPTION(ASSIMP_BUILD_ALL_EXPORTERS_BY_DEFAULT "default value of all ASSIMP_BUILD_XXX_EXPORTER values" TRUE)
|
||||||
|
|
||||||
# macro to add the CMake Option ADD_ASSIMP_IMPORTER_<name> which enables compile of loader
|
# macro to add the CMake Option ADD_ASSIMP_EXPORTER_<name> which enables compilation of an exporter
|
||||||
# this way selective loaders can be compiled (reduces filesize + compile time)
|
# this way selective exporters can be compiled (reduces filesize + compile time)
|
||||||
MACRO(ADD_ASSIMP_EXPORTER name)
|
MACRO(ADD_ASSIMP_EXPORTER name)
|
||||||
IF (ASSIMP_NO_EXPORT)
|
IF (ASSIMP_NO_EXPORT)
|
||||||
set(ASSIMP_EXPORTER_ENABLED FALSE)
|
set(ASSIMP_EXPORTER_ENABLED FALSE)
|
||||||
|
|
|
@ -105,7 +105,11 @@ void JoinVerticesProcess::Execute( aiScene* pScene) {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
bool areVerticesEqual(const Vertex &lhs, const Vertex &rhs, bool complex) {
|
bool areVerticesEqual(
|
||||||
|
const Vertex &lhs,
|
||||||
|
const Vertex &rhs,
|
||||||
|
unsigned numUVChannels,
|
||||||
|
unsigned numColorChannels) {
|
||||||
// A little helper to find locally close vertices faster.
|
// A little helper to find locally close vertices faster.
|
||||||
// Try to reuse the lookup table from the last step.
|
// Try to reuse the lookup table from the last step.
|
||||||
const static float epsilon = 1e-5f;
|
const static float epsilon = 1e-5f;
|
||||||
|
@ -124,10 +128,6 @@ bool areVerticesEqual(const Vertex &lhs, const Vertex &rhs, bool complex) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((lhs.texcoords[0] - rhs.texcoords[0]).SquareLength() > squareEpsilon) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((lhs.tangent - rhs.tangent).SquareLength() > squareEpsilon) {
|
if ((lhs.tangent - rhs.tangent).SquareLength() > squareEpsilon) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -136,19 +136,18 @@ bool areVerticesEqual(const Vertex &lhs, const Vertex &rhs, bool complex) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Usually we won't have vertex colors or multiple UVs, so we can skip from here
|
for (unsigned i = 0; i < numUVChannels; i++) {
|
||||||
// Actually this increases runtime performance slightly, at least if branch
|
if ((lhs.texcoords[i] - rhs.texcoords[i]).SquareLength() > squareEpsilon) {
|
||||||
// prediction is on our side.
|
return false;
|
||||||
if (complex) {
|
|
||||||
for (int i = 0; i < 8; i++) {
|
|
||||||
if (i > 0 && (lhs.texcoords[i] - rhs.texcoords[i]).SquareLength() > squareEpsilon) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (GetColorDifference(lhs.colors[i], rhs.colors[i]) > squareEpsilon) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < numColorChannels; i++) {
|
||||||
|
if (GetColorDifference(lhs.colors[i], rhs.colors[i]) > squareEpsilon) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -241,9 +240,16 @@ struct std::hash<Vertex> {
|
||||||
//template specialization for std::equal_to for Vertex
|
//template specialization for std::equal_to for Vertex
|
||||||
template<>
|
template<>
|
||||||
struct std::equal_to<Vertex> {
|
struct std::equal_to<Vertex> {
|
||||||
|
equal_to(unsigned numUVChannels, unsigned numColorChannels) :
|
||||||
|
mNumUVChannels(numUVChannels),
|
||||||
|
mNumColorChannels(numColorChannels) {}
|
||||||
bool operator()(const Vertex &lhs, const Vertex &rhs) const {
|
bool operator()(const Vertex &lhs, const Vertex &rhs) const {
|
||||||
return areVerticesEqual(lhs, rhs, false);
|
return areVerticesEqual(lhs, rhs, mNumUVChannels, mNumColorChannels);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
unsigned mNumUVChannels;
|
||||||
|
unsigned mNumColorChannels;
|
||||||
};
|
};
|
||||||
// now start the JoinVerticesProcess
|
// now start the JoinVerticesProcess
|
||||||
int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) {
|
int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) {
|
||||||
|
@ -316,8 +322,13 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) {
|
||||||
uniqueAnimatedVertices[animMeshIndex].reserve(pMesh->mNumVertices);
|
uniqueAnimatedVertices[animMeshIndex].reserve(pMesh->mNumVertices);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// a map that maps a vertix to its new index
|
// a map that maps a vertex to its new index
|
||||||
std::unordered_map<Vertex,int> vertex2Index;
|
const auto numBuckets = pMesh->mNumVertices;
|
||||||
|
const auto hasher = std::hash<Vertex>();
|
||||||
|
const auto comparator = std::equal_to<Vertex>(
|
||||||
|
pMesh->GetNumUVChannels(),
|
||||||
|
pMesh->GetNumColorChannels());
|
||||||
|
std::unordered_map<Vertex, int> vertex2Index(numBuckets, hasher, comparator);
|
||||||
// we can not end up with more vertices than we started with
|
// we can not end up with more vertices than we started with
|
||||||
vertex2Index.reserve(pMesh->mNumVertices);
|
vertex2Index.reserve(pMesh->mNumVertices);
|
||||||
// Now check each vertex if it brings something new to the table
|
// Now check each vertex if it brings something new to the table
|
||||||
|
|
|
@ -113,7 +113,7 @@ namespace Assimp {
|
||||||
* If you need the Importer to do custom file handling to access the files,
|
* If you need the Importer to do custom file handling to access the files,
|
||||||
* implement IOSystem and IOStream and supply an instance of your custom
|
* implement IOSystem and IOStream and supply an instance of your custom
|
||||||
* IOSystem implementation by calling SetIOHandler() before calling ReadFile().
|
* IOSystem implementation by calling SetIOHandler() before calling ReadFile().
|
||||||
* If you do not assign a custion IO handler, a default handler using the
|
* If you do not assign a custom IO handler, a default handler using the
|
||||||
* standard C++ IO logic will be used.
|
* standard C++ IO logic will be used.
|
||||||
*
|
*
|
||||||
* @note One Importer instance is not thread-safe. If you use multiple
|
* @note One Importer instance is not thread-safe. If you use multiple
|
||||||
|
|
|
@ -241,7 +241,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* @brief Configures the #aiProcess_FindDegenerates to check the area of a
|
* @brief Configures the #aiProcess_FindDegenerates to check the area of a
|
||||||
* trinagle to be greates than e-6. If this is not the case the triangle will
|
* triangle to be greater than e-6. If this is not the case the triangle will
|
||||||
* be removed if #AI_CONFIG_PP_FD_REMOVE is set to true.
|
* be removed if #AI_CONFIG_PP_FD_REMOVE is set to true.
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_PP_FD_CHECKAREA \
|
#define AI_CONFIG_PP_FD_CHECKAREA \
|
||||||
|
@ -662,7 +662,7 @@ enum aiComponent
|
||||||
"AI_CONFIG_FBX_CONVERT_TO_M"
|
"AI_CONFIG_FBX_CONVERT_TO_M"
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
/** @brief Will enable the skeleton structo to store bone data.
|
/** @brief Will enable the skeleton struct to store bone data.
|
||||||
*
|
*
|
||||||
* This will decouple the bone coupling to the mesh. This feature is
|
* This will decouple the bone coupling to the mesh. This feature is
|
||||||
* experimental.
|
* experimental.
|
||||||
|
@ -1083,7 +1083,7 @@ enum aiComponent
|
||||||
#define AI_CONFIG_EXPORT_BLOB_NAME "EXPORT_BLOB_NAME"
|
#define AI_CONFIG_EXPORT_BLOB_NAME "EXPORT_BLOB_NAME"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Specifies a gobal key factor for scale, float value
|
* @brief Specifies a global key factor for scale, float value
|
||||||
*/
|
*/
|
||||||
#define AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY "GLOBAL_SCALE_FACTOR"
|
#define AI_CONFIG_GLOBAL_SCALE_FACTOR_KEY "GLOBAL_SCALE_FACTOR"
|
||||||
|
|
||||||
|
|
|
@ -306,7 +306,7 @@ enum aiTextureType {
|
||||||
aiTextureType_SHEEN = 19,
|
aiTextureType_SHEEN = 19,
|
||||||
|
|
||||||
/** Clearcoat
|
/** Clearcoat
|
||||||
* Simulates a layer of 'polish' or 'laquer' layered on top of a PBR substrate
|
* Simulates a layer of 'polish' or 'lacquer' layered on top of a PBR substrate
|
||||||
* https://autodesk.github.io/standard-surface/#closures/coating
|
* https://autodesk.github.io/standard-surface/#closures/coating
|
||||||
* https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat
|
* https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -566,6 +566,9 @@ struct aiAnimMesh {
|
||||||
/** @brief Enumerates the methods of mesh morphing supported by Assimp.
|
/** @brief Enumerates the methods of mesh morphing supported by Assimp.
|
||||||
*/
|
*/
|
||||||
enum aiMorphingMethod {
|
enum aiMorphingMethod {
|
||||||
|
/** Morphing method to be determined */
|
||||||
|
aiMorphingMethod_UNKNOWN = 0x0,
|
||||||
|
|
||||||
/** Interpolation between morph targets */
|
/** Interpolation between morph targets */
|
||||||
aiMorphingMethod_VERTEX_BLEND = 0x1,
|
aiMorphingMethod_VERTEX_BLEND = 0x1,
|
||||||
|
|
||||||
|
@ -747,7 +750,7 @@ struct aiMesh {
|
||||||
* Method of morphing when anim-meshes are specified.
|
* Method of morphing when anim-meshes are specified.
|
||||||
* @see aiMorphingMethod to learn more about the provided morphing targets.
|
* @see aiMorphingMethod to learn more about the provided morphing targets.
|
||||||
*/
|
*/
|
||||||
unsigned int mMethod;
|
enum aiMorphingMethod mMethod;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The bounding box.
|
* The bounding box.
|
||||||
|
@ -778,7 +781,7 @@ struct aiMesh {
|
||||||
mMaterialIndex(0),
|
mMaterialIndex(0),
|
||||||
mNumAnimMeshes(0),
|
mNumAnimMeshes(0),
|
||||||
mAnimMeshes(nullptr),
|
mAnimMeshes(nullptr),
|
||||||
mMethod(0),
|
mMethod(aiMorphingMethod_UNKNOWN),
|
||||||
mAABB(),
|
mAABB(),
|
||||||
mTextureCoordsNames(nullptr) {
|
mTextureCoordsNames(nullptr) {
|
||||||
for (unsigned int a = 0; a < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++a) {
|
for (unsigned int a = 0; a < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++a) {
|
||||||
|
@ -1002,7 +1005,7 @@ struct aiSkeletonBone {
|
||||||
#endif // __cplusplus
|
#endif // __cplusplus
|
||||||
};
|
};
|
||||||
/**
|
/**
|
||||||
* @brief
|
* @brief
|
||||||
*/
|
*/
|
||||||
struct aiSkeleton {
|
struct aiSkeleton {
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -433,7 +433,7 @@ struct aiScene
|
||||||
for (unsigned int i = 0; i < mNumTextures; i++) {
|
for (unsigned int i = 0; i < mNumTextures; i++) {
|
||||||
const char* shortTextureFilename = GetShortFilename(mTextures[i]->mFilename.C_Str());
|
const char* shortTextureFilename = GetShortFilename(mTextures[i]->mFilename.C_Str());
|
||||||
if (strcmp(shortTextureFilename, shortFilename) == 0) {
|
if (strcmp(shortTextureFilename, shortFilename) == 0) {
|
||||||
return std::make_pair(mTextures[i], i);
|
return std::make_pair(mTextures[i], static_cast<int>(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return std::make_pair(nullptr, -1);
|
return std::make_pair(nullptr, -1);
|
||||||
|
|
Loading…
Reference in New Issue