diff --git a/code/AssetLib/3DS/3DSHelper.h b/code/AssetLib/3DS/3DSHelper.h index 933795f65..3a5479de2 100644 --- a/code/AssetLib/3DS/3DSHelper.h +++ b/code/AssetLib/3DS/3DSHelper.h @@ -259,7 +259,7 @@ namespace Discreet3DS { // Specifies the file name of a texture CHUNK_MAPFILE = 0xA300, - // Specifies whether a materail requires two-sided rendering + // Specifies whether a material requires two-sided rendering CHUNK_MAT_TWO_SIDE = 0xA081, // ******************************************************************** diff --git a/code/AssetLib/3MF/D3MFExporter.h b/code/AssetLib/3MF/D3MFExporter.h index 3da74fb37..df25e305e 100644 --- a/code/AssetLib/3MF/D3MFExporter.h +++ b/code/AssetLib/3MF/D3MFExporter.h @@ -101,9 +101,11 @@ private: std::vector mRelations; }; -#endif // ASSIMP_BUILD_NO_3MF_EXPORTER -#endif // ASSIMP_BUILD_NO_EXPORT } // Namespace D3MF } // Namespace Assimp +#endif // ASSIMP_BUILD_NO_3MF_EXPORTER +#endif // ASSIMP_BUILD_NO_EXPORT + + diff --git a/code/AssetLib/3MF/XmlSerializer.cpp b/code/AssetLib/3MF/XmlSerializer.cpp index 7a33d08ed..985286fa7 100644 --- a/code/AssetLib/3MF/XmlSerializer.cpp +++ b/code/AssetLib/3MF/XmlSerializer.cpp @@ -159,7 +159,6 @@ bool parseColor(const char *color, aiColor4D &diffuse) { return false; } - //const char *buf(color); if ('#' != color[0]) { return false; } diff --git a/code/AssetLib/AMF/AMFImporter_Postprocess.cpp b/code/AssetLib/AMF/AMFImporter_Postprocess.cpp index d56d6681d..3674f3d25 100644 --- a/code/AssetLib/AMF/AMFImporter_Postprocess.cpp +++ b/code/AssetLib/AMF/AMFImporter_Postprocess.cpp @@ -690,7 +690,7 @@ void AMFImporter::Postprocess_BuildConstellation(AMFConstellation &pConstellatio if (ne->Type == AMFNodeElementBase::ENET_Metadata) continue; if (ne->Type != AMFNodeElementBase::ENET_Instance) throw DeadlyImportError("Only nodes can be in ."); - // create alias for conveniance + // create alias for convenience AMFInstance &als = *((AMFInstance *)ne); // find referenced object if (!Find_ConvertedNode(als.ObjectID, nodeArray, &found_node)) Throw_ID_NotFound(als.ObjectID); diff --git a/code/AssetLib/ASE/ASELoader.cpp b/code/AssetLib/ASE/ASELoader.cpp index 2be103321..fae441f57 100644 --- a/code/AssetLib/ASE/ASELoader.cpp +++ b/code/AssetLib/ASE/ASELoader.cpp @@ -681,7 +681,7 @@ void ASEImporter::BuildNodes(std::vector &nodes) { } } - // Are there ane orphaned nodes? + // Are there any orphaned nodes? if (!aiList.empty()) { std::vector apcNodes; apcNodes.reserve(aiList.size() + pcScene->mRootNode->mNumChildren); diff --git a/code/AssetLib/Assbin/AssbinExporter.h b/code/AssetLib/Assbin/AssbinExporter.h index 4871b5021..b6f2acd3d 100644 --- a/code/AssetLib/Assbin/AssbinExporter.h +++ b/code/AssetLib/Assbin/AssbinExporter.h @@ -48,11 +48,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include +#ifndef ASSIMP_BUILD_NO_EXPORT + // nothing really needed here - reserved for future use like properties namespace Assimp { void ASSIMP_API ExportSceneAssbin(const char* pFile, IOSystem* pIOSystem, const aiScene* pScene, const ExportProperties* /*pProperties*/); } - +#endif #endif // AI_ASSBINEXPORTER_H_INC diff --git a/code/AssetLib/Assbin/AssbinFileWriter.cpp b/code/AssetLib/Assbin/AssbinFileWriter.cpp index 2519b0b93..21bfd8512 100644 --- a/code/AssetLib/Assbin/AssbinFileWriter.cpp +++ b/code/AssetLib/Assbin/AssbinFileWriter.cpp @@ -43,13 +43,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "AssbinFileWriter.h" - #include "Common/assbin_chunks.h" #include "PostProcessing/ProcessHelper.h" #include #include -#include #include #ifdef ASSIMP_BUILD_NO_OWN_ZLIB @@ -58,7 +56,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "../contrib/zlib/zlib.h" #endif -#include +#include #if _MSC_VER #pragma warning(push) @@ -277,7 +275,7 @@ public: // empty } - virtual ~AssbinChunkWriter() { + ~AssbinChunkWriter() override { if (container) { container->Write(&magic, sizeof(uint32_t), 1); container->Write(&cursor, sizeof(uint32_t), 1); @@ -288,26 +286,27 @@ public: void *GetBufferPointer() { return buffer; } - // ------------------------------------------------------------------- - virtual size_t Read(void * /*pvBuffer*/, size_t /*pSize*/, size_t /*pCount*/) { + size_t Read(void * /*pvBuffer*/, size_t /*pSize*/, size_t /*pCount*/) override { return 0; } - virtual aiReturn Seek(size_t /*pOffset*/, aiOrigin /*pOrigin*/) { + + aiReturn Seek(size_t /*pOffset*/, aiOrigin /*pOrigin*/) override { return aiReturn_FAILURE; } - virtual size_t Tell() const { + + size_t Tell() const override { return cursor; } - virtual void Flush() { + + void Flush() override { // not implemented } - virtual size_t FileSize() const { + size_t FileSize() const override { return cursor; } - // ------------------------------------------------------------------- - virtual size_t Write(const void *pvBuffer, size_t pSize, size_t pCount) { + size_t Write(const void *pvBuffer, size_t pSize, size_t pCount) override { pSize *= pCount; if (cursor + pSize > cur_size) { Grow(cursor + pSize); diff --git a/code/AssetLib/Assbin/AssbinLoader.cpp b/code/AssetLib/Assbin/AssbinLoader.cpp index d94407e03..5ca4b3e11 100644 --- a/code/AssetLib/Assbin/AssbinLoader.cpp +++ b/code/AssetLib/Assbin/AssbinLoader.cpp @@ -406,7 +406,7 @@ void AssbinImporter::ReadBinaryMesh(IOStream *stream, aiMesh *mesh) { f.mIndices = new unsigned int[f.mNumIndices]; for (unsigned int a = 0; a < f.mNumIndices; ++a) { - // Check if unsigned short ( 16 bit ) are big enought for the indices + // Check if unsigned short ( 16 bit ) are big enough for the indices if (fitsIntoUI16(mesh->mNumVertices)) { f.mIndices[a] = Read(stream); } else { diff --git a/code/AssetLib/Assxml/AssxmlFileWriter.cpp b/code/AssetLib/Assxml/AssxmlFileWriter.cpp index 24fda5955..d16580a2e 100644 --- a/code/AssetLib/Assxml/AssxmlFileWriter.cpp +++ b/code/AssetLib/Assxml/AssxmlFileWriter.cpp @@ -168,7 +168,7 @@ static void WriteNode(const aiNode *node, IOStream *io, unsigned int depth) { } // ----------------------------------------------------------------------------------- -// Some chuncks of text will need to be encoded for XML +// Some chunks of text will need to be encoded for XML // http://stackoverflow.com/questions/5665231/most-efficient-way-to-escape-xml-html-in-c-string#5665377 static std::string encodeXML(const std::string &data) { std::string buffer; diff --git a/code/AssetLib/BVH/BVHLoader.cpp b/code/AssetLib/BVH/BVHLoader.cpp index 6d9069021..6dc824e2f 100644 --- a/code/AssetLib/BVH/BVHLoader.cpp +++ b/code/AssetLib/BVH/BVHLoader.cpp @@ -178,7 +178,7 @@ void BVHLoader::ReadHierarchy(aiScene *pScene) { } // ------------------------------------------------------------------------------------------------ -// Reads a node and recursively its childs and returns the created node; +// Reads a node and recursively its children and returns the created node; aiNode *BVHLoader::ReadNode() { // first token is name std::string nodeName = GetNextToken(); diff --git a/code/AssetLib/BVH/BVHLoader.h b/code/AssetLib/BVH/BVHLoader.h index a66a20275..70511483d 100644 --- a/code/AssetLib/BVH/BVHLoader.h +++ b/code/AssetLib/BVH/BVHLoader.h @@ -112,7 +112,7 @@ protected: /** Reads the hierarchy */ void ReadHierarchy(aiScene *pScene); - /** Reads a node and recursively its childs and returns the created node. */ + /** Reads a node and recursively its children and returns the created node. */ aiNode *ReadNode(); /** Reads an end node and returns the created node. */ diff --git a/code/AssetLib/Blender/BlenderDNA.h b/code/AssetLib/Blender/BlenderDNA.h index f566554b8..871ee71a1 100644 --- a/code/AssetLib/Blender/BlenderDNA.h +++ b/code/AssetLib/Blender/BlenderDNA.h @@ -476,7 +476,7 @@ public: * in BlenderScene.cpp and is machine-generated. * Converters are used to quickly handle objects whose * exact data type is a runtime-property and not yet - * known at compile time (consier Object::data).*/ + * known at compile time (consider Object::data).*/ void RegisterConverters(); // -------------------------------------------------------- diff --git a/code/AssetLib/COB/COBLoader.cpp b/code/AssetLib/COB/COBLoader.cpp index 88aa88773..647f49052 100644 --- a/code/AssetLib/COB/COBLoader.cpp +++ b/code/AssetLib/COB/COBLoader.cpp @@ -586,7 +586,7 @@ void COBImporter::ReadUnit_Ascii(Scene &out, LineSplitter &splitter, const Chunk return; } - // parent chunks preceede their childs, so we should have the + // parent chunks preceede their children, so we should have the // corresponding chunk already. for (std::shared_ptr &nd : out.nodes) { if (nd->id == nfo.parent_id) { @@ -668,7 +668,7 @@ void COBImporter::ReadCame_Ascii(Scene &out, LineSplitter &splitter, const Chunk ReadBasicNodeInfo_Ascii(msh, ++splitter, nfo); - // skip the next line, we don't know this differenciation between a + // skip the next line, we don't know this differentiation between a // standard camera and a panoramic camera. ++splitter; } @@ -1169,7 +1169,7 @@ void COBImporter::ReadUnit_Binary(COB::Scene &out, StreamReaderLE &reader, const const chunk_guard cn(nfo, reader); - // parent chunks preceede their childs, so we should have the + // parent chunks preceede their children, so we should have the // corresponding chunk already. for (std::shared_ptr &nd : out.nodes) { if (nd->id == nfo.parent_id) { diff --git a/code/AssetLib/FBX/FBXConverter.cpp b/code/AssetLib/FBX/FBXConverter.cpp index fa7ee3986..c025e8954 100644 --- a/code/AssetLib/FBX/FBXConverter.cpp +++ b/code/AssetLib/FBX/FBXConverter.cpp @@ -1595,7 +1595,7 @@ void FBXConverter::ConvertCluster(std::vector &local_mesh_bones, const bone_map.insert(std::pair(deformer_name, bone)); } - ASSIMP_LOG_DEBUG("bone research: Indicies size: ", out_indices.size()); + ASSIMP_LOG_DEBUG("bone research: Indices size: ", out_indices.size()); // lookup must be populated in case something goes wrong // this also allocates bones to mesh instance outside diff --git a/code/AssetLib/FBX/FBXDocument.h b/code/AssetLib/FBX/FBXDocument.h index 1ee526368..eeb173cd0 100644 --- a/code/AssetLib/FBX/FBXDocument.h +++ b/code/AssetLib/FBX/FBXDocument.h @@ -693,7 +693,7 @@ private: typedef std::vector KeyTimeList; typedef std::vector KeyValueList; -/** Represents a FBX animation curve (i.e. a 1-dimensional set of keyframes and values therefor) */ +/** Represents a FBX animation curve (i.e. a 1-dimensional set of keyframes and values therefore) */ class AnimationCurve : public Object { public: AnimationCurve(uint64_t id, const Element& element, const std::string& name, const Document& doc); diff --git a/code/AssetLib/FBX/FBXExporter.cpp b/code/AssetLib/FBX/FBXExporter.cpp index f4a3017d8..66e14c75c 100644 --- a/code/AssetLib/FBX/FBXExporter.cpp +++ b/code/AssetLib/FBX/FBXExporter.cpp @@ -1709,7 +1709,7 @@ void FBXExporter::WriteObjects () //p.AddP70string("UVSet", ""); // TODO: how should this work? p.AddP70bool("UseMaterial", 1); tnode.AddChild(p); - // can't easily detrmine which texture path will be correct, + // can't easily determine which texture path will be correct, // so just store what we have in every field. // these being incorrect is a common problem with FBX anyway. tnode.AddChild("FileName", texture_path); @@ -1915,7 +1915,7 @@ void FBXExporter::WriteObjects () // mark all parent nodes as skeleton as well, // up until we find the root node, // or else the node containing the mesh, - // or else the parent of a node containig the mesh. + // or else the parent of a node containing the mesh. for ( const aiNode* parent = n->mParent; parent && parent != mScene->mRootNode; diff --git a/code/AssetLib/Irr/IRRLoader.cpp b/code/AssetLib/Irr/IRRLoader.cpp index c741159f6..b68671e0d 100644 --- a/code/AssetLib/Irr/IRRLoader.cpp +++ b/code/AssetLib/Irr/IRRLoader.cpp @@ -132,7 +132,7 @@ void IRRImporter::SetupProperties(const Importer *pImp) { } // ------------------------------------------------------------------------------------------------ -// Build a mesh tha consists of a single squad (a side of a skybox) +// Build a mesh that consists of a single squad (a side of a skybox) aiMesh *IRRImporter::BuildSingleQuadMesh(const SkyboxVertex &v1, const SkyboxVertex &v2, const SkyboxVertex &v3, diff --git a/code/AssetLib/M3D/M3DExporter.cpp b/code/AssetLib/M3D/M3DExporter.cpp index bcac1d98a..fdcf9c321 100644 --- a/code/AssetLib/M3D/M3DExporter.cpp +++ b/code/AssetLib/M3D/M3DExporter.cpp @@ -76,7 +76,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * Currently supports static meshes, vertex colors, materials, textures * * For animation, it would require the following conversions: - * - aiNode (bones) -> m3d_t.bone (with parent id, position vector and oriantation quaternion) + * - aiNode (bones) -> m3d_t.bone (with parent id, position vector and orientation quaternion) * - aiMesh.aiBone -> m3d_t.skin (per vertex, with bone id, weight pairs) * - aiAnimation -> m3d_action (frame with timestamp and list of bone id, position, orientation * triplets, instead of per bone timestamp + lists) diff --git a/code/AssetLib/M3D/M3DImporter.cpp b/code/AssetLib/M3D/M3DImporter.cpp index efa1d5475..d87944456 100644 --- a/code/AssetLib/M3D/M3DImporter.cpp +++ b/code/AssetLib/M3D/M3DImporter.cpp @@ -296,7 +296,7 @@ void M3DImporter::importMaterials(const M3DWrapper &m3d) { } // texture map properties if (m->prop[j].type >= 128 && aiTxProps[k].pKey && - // extra check, should never happen, do we have the refered texture? + // extra check, should never happen, do we have the referred texture? m->prop[j].value.textureid < m3d->numtexture && m3d->texture[m->prop[j].value.textureid].name) { name.Set(std::string(std::string(m3d->texture[m->prop[j].value.textureid].name) + ".png")); @@ -474,7 +474,7 @@ void M3DImporter::importMeshes(const M3DWrapper &m3d) { mScene->mMeshes = new aiMesh *[mScene->mNumMeshes]; std::copy(meshes->begin(), meshes->end(), mScene->mMeshes); - // create mesh indeces in root node + // create mesh indices in root node mScene->mRootNode->mNumMeshes = static_cast(meshes->size()); mScene->mRootNode->mMeshes = new unsigned int[meshes->size()]; for (i = 0; i < meshes->size(); i++) { @@ -688,7 +688,7 @@ void M3DImporter::calculateOffsetMatrix(aiNode *pNode, aiMatrix4x4 *m) { // ------------------------------------------------------------------------------------------------ // because M3D has a global mesh, global vertex ids and stores materialid on the face, we need -// temporary lists to collect data for an aiMesh, which requires local arrays and local indeces +// temporary lists to collect data for an aiMesh, which requires local arrays and local indices // this function fills up an aiMesh with those temporary lists void M3DImporter::populateMesh(const M3DWrapper &m3d, aiMesh *pMesh, std::vector *faces, std::vector *vertices, std::vector *normals, std::vector *texcoords, std::vector *colors, diff --git a/code/AssetLib/M3D/m3d.h b/code/AssetLib/M3D/m3d.h index 3adcd5bef..b148c11d7 100644 --- a/code/AssetLib/M3D/m3d.h +++ b/code/AssetLib/M3D/m3d.h @@ -59,7 +59,7 @@ extern "C" { #ifndef M3D_DOUBLE typedef float M3D_FLOAT; #ifndef M3D_EPSILON -/* carefully choosen for IEEE 754 don't change */ +/* carefully chosen for IEEE 754 don't change */ #define M3D_EPSILON ((M3D_FLOAT)1e-7) #endif #else @@ -121,7 +121,7 @@ typedef uint16_t M3D_INDEX; * TMAP texture map chunk (optional) * VRTS vertex data chunk (optional if it's a material library) * BONE bind-pose skeleton, bone hierarchy chunk (optional) - * n x m3db_t contains propably more, but at least one bone + * n x m3db_t contains probably more, but at least one bone * n x m3ds_t skin group records * MTRL* material chunk(s), can be more (optional) * n x m3dp_t each material contains propapbly more, but at least one property @@ -1109,7 +1109,7 @@ void _m3d_inv(M3D_FLOAT *m) { r[15] = det * (m[0] * (m[5] * m[10] - m[6] * m[9]) + m[1] * (m[6] * m[8] - m[4] * m[10]) + m[2] * (m[4] * m[9] - m[5] * m[8])); memcpy(m, &r, sizeof(r)); } -/* compose a coloumn major 4 x 4 matrix from vec3 position and vec4 orientation/rotation quaternion */ +/* compose a column major 4 x 4 matrix from vec3 position and vec4 orientation/rotation quaternion */ void _m3d_mat(M3D_FLOAT *r, m3dv_t *p, m3dv_t *q) { if (q->x == (M3D_FLOAT)0.0 && q->y == (M3D_FLOAT)0.0 && q->z >= (M3D_FLOAT)0.7071065 && q->z <= (M3D_FLOAT)0.7071075 && q->w == (M3D_FLOAT)0.0) { @@ -4033,7 +4033,7 @@ unsigned char *m3d_save(m3d_t *model, int quality, int flags, unsigned int *size out[len] = 0; } else { - /* stricly only use LF (newline) in binary */ + /* strictly only use LF (newline) in binary */ sd = _m3d_safestr(model->desc, 3); if (!sd) goto memerr; /* header */ @@ -4608,7 +4608,7 @@ unsigned char *m3d_save(m3d_t *model, int quality, int flags, unsigned int *size h = (m3dhdr_t *)z; } } - /* add file header at the begining */ + /* add file header at the beginning */ len += 8; out = (unsigned char *)M3D_MALLOC(len); if (!out) goto memerr; diff --git a/code/AssetLib/MD3/MD3FileData.h b/code/AssetLib/MD3/MD3FileData.h index a44f688f9..62b5fb706 100644 --- a/code/AssetLib/MD3/MD3FileData.h +++ b/code/AssetLib/MD3/MD3FileData.h @@ -271,7 +271,7 @@ inline void LatLngNormalToVec3(uint16_t p_iNormal, ai_real* p_afOut) // ------------------------------------------------------------------------------- -/** @brief Pack a Q3 normal into 16bit latitute/longitude representation +/** @brief Pack a Q3 normal into 16bit latitude/longitude representation * @param p_vIn Input vector * @param p_iOut Output normal * diff --git a/code/AssetLib/MD5/MD5Parser.cpp b/code/AssetLib/MD5/MD5Parser.cpp index a69275507..802c9becd 100644 --- a/code/AssetLib/MD5/MD5Parser.cpp +++ b/code/AssetLib/MD5/MD5Parser.cpp @@ -59,7 +59,7 @@ using namespace Assimp; using namespace Assimp::MD5; // ------------------------------------------------------------------------------------------------ -// Parse the segment structure fo a MD5 file +// Parse the segment structure for an MD5 file MD5Parser::MD5Parser(char *_buffer, unsigned int _fileSize) { ai_assert(nullptr != _buffer); ai_assert(0 != _fileSize); diff --git a/code/AssetLib/MDL/MDLMaterialLoader.cpp b/code/AssetLib/MDL/MDLMaterialLoader.cpp index fd287430b..f44896819 100644 --- a/code/AssetLib/MDL/MDLMaterialLoader.cpp +++ b/code/AssetLib/MDL/MDLMaterialLoader.cpp @@ -387,7 +387,7 @@ void MDLImporter::CreateTexture_3DGS_MDL5(const unsigned char *szData, // this should not occur - at least the docs say it shouldn't. // however, one can easily try out what MED does if you have // a model with a DDS texture and export it to MDL5 ... - // yeah, it embedds the DDS file. + // yeah, it embeds the DDS file. if (6 == iType) { // this is a compressed texture in DDS format *piSkip = pcNew->mWidth; @@ -524,7 +524,7 @@ void MDLImporter::ParseSkinLump_3DGS_MDL7( } // sometimes there are MDL7 files which have a monochrome - // texture instead of material colors ... posssible they have + // texture instead of material colors ... possible they have // been converted to MDL7 from other formats, such as MDL5 aiColor4D clrTexture; if (pcNew) diff --git a/code/AssetLib/MMD/MMDPmdParser.h b/code/AssetLib/MMD/MMDPmdParser.h index be8dad5c3..f9f555c6a 100644 --- a/code/AssetLib/MMD/MMDPmdParser.h +++ b/code/AssetLib/MMD/MMDPmdParser.h @@ -195,7 +195,7 @@ namespace pmd public: uint16_t ik_bone_index; uint16_t target_bone_index; - uint16_t interations; + uint16_t iterations; float angle_limit; std::vector ik_child_bone_index; @@ -205,7 +205,7 @@ namespace pmd stream->read((char *) &target_bone_index, sizeof(uint16_t)); uint8_t ik_chain_length; stream->read((char*) &ik_chain_length, sizeof(uint8_t)); - stream->read((char *) &interations, sizeof(uint16_t)); + stream->read((char *) &iterations, sizeof(uint16_t)); stream->read((char *) &angle_limit, sizeof(float)); ik_child_bone_index.resize(ik_chain_length); for (int i = 0; i < ik_chain_length; i++) diff --git a/code/AssetLib/MMD/MMDVmdParser.h b/code/AssetLib/MMD/MMDVmdParser.h index 53f1922b5..0ce24a48f 100644 --- a/code/AssetLib/MMD/MMDVmdParser.h +++ b/code/AssetLib/MMD/MMDVmdParser.h @@ -358,7 +358,7 @@ namespace vmd light_frames[i].Write(stream); } - // self shadow datas + // self shadow data const int self_shadow_num = 0; stream->write(reinterpret_cast(&self_shadow_num), sizeof(int)); diff --git a/code/AssetLib/OFF/OFFLoader.cpp b/code/AssetLib/OFF/OFFLoader.cpp index 8509d0c4d..644579bce 100644 --- a/code/AssetLib/OFF/OFFLoader.cpp +++ b/code/AssetLib/OFF/OFFLoader.cpp @@ -233,7 +233,7 @@ void OFFImporter::InternReadFile( const std::string& pFile, aiScene* pScene, IOS sz = fast_atoreal_move(sz, *vec[dim]); } - // if has homogenous coordinate, divide others by this one + // if has homogeneous coordinate, divide others by this one if (hasHomogenous) { SkipSpaces(&sz); ai_real w = 1.; diff --git a/code/AssetLib/Obj/ObjFileData.h b/code/AssetLib/Obj/ObjFileData.h index 92fe3a261..b14250020 100644 --- a/code/AssetLib/Obj/ObjFileData.h +++ b/code/AssetLib/Obj/ObjFileData.h @@ -233,7 +233,7 @@ struct Mesh { // ------------------------------------------------------------------------------------------------ //! \struct Model -//! \brief Data structure to store all obj-specific model datas +//! \brief Data structure to store all obj-specific model data // ------------------------------------------------------------------------------------------------ struct Model { using GroupMap = std::map *>; diff --git a/code/AssetLib/Ogre/OgreStructs.h b/code/AssetLib/Ogre/OgreStructs.h index c34546a74..1d43b09e9 100644 --- a/code/AssetLib/Ogre/OgreStructs.h +++ b/code/AssetLib/Ogre/OgreStructs.h @@ -555,7 +555,7 @@ public: should be 0 after this reset. */ void Reset(); - /// Covert to Assimp mesh. + /// Convert to Assimp mesh. aiMesh *ConvertToAssimpMesh(Mesh *parent); /// Vertex data. diff --git a/code/AssetLib/OpenGEX/OpenGEXImporter.cpp b/code/AssetLib/OpenGEX/OpenGEXImporter.cpp index bbf689b60..94cf47e73 100644 --- a/code/AssetLib/OpenGEX/OpenGEXImporter.cpp +++ b/code/AssetLib/OpenGEX/OpenGEXImporter.cpp @@ -351,8 +351,8 @@ void OpenGEXImporter::handleNodes(DDLNode *node, aiScene *pScene) { return; } - DDLNode::DllNodeList childs = node->getChildNodeList(); - for (DDLNode::DllNodeList::iterator it = childs.begin(); it != childs.end(); ++it) { + DDLNode::DllNodeList children = node->getChildNodeList(); + for (DDLNode::DllNodeList::iterator it = children.begin(); it != children.end(); ++it) { Grammar::TokenType tokenType(Grammar::matchTokenType((*it)->getType().c_str())); switch (tokenType) { case Grammar::MetricToken: diff --git a/code/AssetLib/Q3BSP/Q3BSPFileData.h b/code/AssetLib/Q3BSP/Q3BSPFileData.h index a121cdbcd..c288af2fc 100644 --- a/code/AssetLib/Q3BSP/Q3BSPFileData.h +++ b/code/AssetLib/Q3BSP/Q3BSPFileData.h @@ -95,7 +95,7 @@ struct sQ3BSPVertex { vec3f vPosition; ///< Position of vertex vec2f vTexCoord; ///< (u,v) Texturecoordinate of detailtexture vec2f vLightmap; ///< (u,v) Texturecoordinate of lightmap - vec3f vNormal; ///< vertex normale + vec3f vNormal; ///< vertex normal unsigned char bColor[ 4 ]; ///< Color in RGBA }; diff --git a/code/AssetLib/SMD/SMDLoader.cpp b/code/AssetLib/SMD/SMDLoader.cpp index 90f0b7697..8d9c745b1 100644 --- a/code/AssetLib/SMD/SMDLoader.cpp +++ b/code/AssetLib/SMD/SMDLoader.cpp @@ -868,7 +868,7 @@ void SMDImporter::ParseNodeInfo(const char* szCurrent, const char** szCurrentOut bool bQuota = true; if ('\"' != *szCurrent) { - LogWarning("Bone name is expcted to be enclosed in " + LogWarning("Bone name is expected to be enclosed in " "double quotation marks. "); bQuota = false; } else { diff --git a/code/AssetLib/X/XFileImporter.cpp b/code/AssetLib/X/XFileImporter.cpp index 111bd0886..8a3047915 100644 --- a/code/AssetLib/X/XFileImporter.cpp +++ b/code/AssetLib/X/XFileImporter.cpp @@ -219,7 +219,7 @@ aiNode* XFileImporter::CreateNodes( aiScene* pScene, aiNode* pParent, const XFil // convert meshes from the source node CreateMeshes( pScene, node, pNode->mMeshes); - // handle childs + // handle children if( !pNode->mChildren.empty() ) { node->mNumChildren = (unsigned int)pNode->mChildren.size(); node->mChildren = new aiNode* [node->mNumChildren]; diff --git a/code/AssetLib/X3D/X3DExporter.cpp b/code/AssetLib/X3D/X3DExporter.cpp index 7404bc760..b3278a528 100644 --- a/code/AssetLib/X3D/X3DExporter.cpp +++ b/code/AssetLib/X3D/X3DExporter.cpp @@ -279,7 +279,7 @@ void X3DExporter::Export_Mesh(const size_t pIdxMesh, const size_t pTabLevel) { const char *NodeName_Shape = "Shape"; list attr_list; - aiMesh &mesh = *mScene->mMeshes[pIdxMesh]; // create alias for conveniance. + aiMesh &mesh = *mScene->mMeshes[pIdxMesh]; // create alias for convenience. // Check if mesh already defined early. if (mDEF_Map_Mesh.find(pIdxMesh) != mDEF_Map_Mesh.end()) { @@ -375,7 +375,7 @@ void X3DExporter::Export_Material(const size_t pIdxMaterial, const size_t pTabLe const char *NodeName_A = "Appearance"; list attr_list; - aiMaterial &material = *mScene->mMaterials[pIdxMaterial]; // create alias for conveniance. + aiMaterial &material = *mScene->mMaterials[pIdxMaterial]; // create alias for convenience. // Check if material already defined early. if (mDEF_Map_Material.find(pIdxMaterial) != mDEF_Map_Material.end()) { @@ -586,7 +586,7 @@ bool X3DExporter::CheckAndExport_Light(const aiNode &pNode, const size_t pTabLev if (!found) return false; // Light source is found. - const aiLight &light = *mScene->mLights[idx_light]; // Alias for conveniance. + const aiLight &light = *mScene->mLights[idx_light]; // Alias for convenience. aiMatrix4x4 trafo_mat = Matrix_GlobalToCurrent(pNode).Inverse(); diff --git a/code/AssetLib/glTF2/glTF2Asset.h b/code/AssetLib/glTF2/glTF2Asset.h index 862fb861d..0be998de8 100644 --- a/code/AssetLib/glTF2/glTF2Asset.h +++ b/code/AssetLib/glTF2/glTF2Asset.h @@ -49,6 +49,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * KHR_materials_sheen full * KHR_materials_clearcoat full * KHR_materials_transmission full + * KHR_materials_volume full + * KHR_materials_ior full */ #ifndef GLTF2ASSET_H_INC #define GLTF2ASSET_H_INC @@ -714,6 +716,7 @@ const vec3 defaultEmissiveFactor = { 0, 0, 0 }; const vec4 defaultDiffuseFactor = { 1, 1, 1, 1 }; const vec3 defaultSpecularFactor = { 1, 1, 1 }; const vec3 defaultSheenFactor = { 0, 0, 0 }; +const vec3 defaultAttenuationColor = { 1, 1, 1 }; struct TextureInfo { Ref texture; @@ -778,6 +781,23 @@ struct MaterialTransmission { float transmissionFactor = 0.f; }; +struct MaterialVolume { + float thicknessFactor = 0.f; + TextureInfo thicknessTexture; + float attenuationDistance = 0.f; + vec3 attenuationColor; + + MaterialVolume() { SetDefaults(); } + void SetDefaults(); +}; + +struct MaterialIOR { + float ior = 0.f; + + MaterialIOR() { SetDefaults(); } + void SetDefaults(); +}; + //! The material appearance of a primitive. struct Material : public Object { //PBR metallic roughness properties @@ -804,6 +824,12 @@ struct Material : public Object { //extension: KHR_materials_transmission Nullable materialTransmission; + //extension: KHR_materials_volume + Nullable materialVolume; + + //extension: KHR_materials_ior + Nullable materialIOR; + //extension: KHR_materials_unlit bool unlit; @@ -1093,6 +1119,8 @@ public: bool KHR_materials_sheen; bool KHR_materials_clearcoat; bool KHR_materials_transmission; + bool KHR_materials_volume; + bool KHR_materials_ior; bool KHR_draco_mesh_compression; bool FB_ngon_encoding; bool KHR_texture_basisu; diff --git a/code/AssetLib/glTF2/glTF2Asset.inl b/code/AssetLib/glTF2/glTF2Asset.inl index 1dec86c0e..d76a2bba8 100644 --- a/code/AssetLib/glTF2/glTF2Asset.inl +++ b/code/AssetLib/glTF2/glTF2Asset.inl @@ -1215,6 +1215,29 @@ inline void Material::Read(Value &material, Asset &r) { } } + if (r.extensionsUsed.KHR_materials_volume) { + if (Value *curMaterialVolume = FindObject(*extensions, "KHR_materials_volume")) { + MaterialVolume volume; + + ReadMember(*curMaterialVolume, "thicknessFactor", volume.thicknessFactor); + ReadTextureProperty(r, *curMaterialVolume, "thicknessTexture", volume.thicknessTexture); + ReadMember(*curMaterialVolume, "attenuationDistance", volume.attenuationDistance); + ReadMember(*curMaterialVolume, "attenuationColor", volume.attenuationColor); + + this->materialVolume = Nullable(volume); + } + } + + if (r.extensionsUsed.KHR_materials_ior) { + if (Value *curMaterialIOR = FindObject(*extensions, "KHR_materials_ior")) { + MaterialIOR ior; + + ReadMember(*curMaterialIOR, "ior", ior.ior); + + this->materialIOR = Nullable(ior); + } + } + unlit = nullptr != FindObject(*extensions, "KHR_materials_unlit"); } } @@ -1260,6 +1283,18 @@ inline void MaterialSheen::SetDefaults() { sheenRoughnessFactor = 0.f; } +inline void MaterialVolume::SetDefaults() { + //KHR_materials_volume properties + thicknessFactor = 0.f; + attenuationDistance = INFINITY; + SetVector(attenuationColor, defaultAttenuationColor); +} + +inline void MaterialIOR::SetDefaults() { + //KHR_materials_ior properties + ior = 1.5f; +} + namespace { template @@ -1975,6 +2010,8 @@ inline void Asset::ReadExtensionsUsed(Document &doc) { CHECK_EXT(KHR_materials_sheen); CHECK_EXT(KHR_materials_clearcoat); CHECK_EXT(KHR_materials_transmission); + CHECK_EXT(KHR_materials_volume); + CHECK_EXT(KHR_materials_ior); CHECK_EXT(KHR_draco_mesh_compression); CHECK_EXT(KHR_texture_basisu); diff --git a/code/AssetLib/glTF2/glTF2AssetWriter.h b/code/AssetLib/glTF2/glTF2AssetWriter.h index 8244a14b9..ce8b4d65e 100644 --- a/code/AssetLib/glTF2/glTF2AssetWriter.h +++ b/code/AssetLib/glTF2/glTF2AssetWriter.h @@ -49,6 +49,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * KHR_materials_sheen: full * KHR_materials_clearcoat: full * KHR_materials_transmission: full + * KHR_materials_volume: full + * KHR_materials_ior: full */ #ifndef GLTF2ASSETWRITER_H_INC #define GLTF2ASSETWRITER_H_INC diff --git a/code/AssetLib/glTF2/glTF2AssetWriter.inl b/code/AssetLib/glTF2/glTF2AssetWriter.inl index 115cdf903..b91553fbe 100644 --- a/code/AssetLib/glTF2/glTF2AssetWriter.inl +++ b/code/AssetLib/glTF2/glTF2AssetWriter.inl @@ -474,6 +474,42 @@ namespace glTF2 { } } + if (m.materialVolume.isPresent) { + Value materialVolume(rapidjson::Type::kObjectType); + + MaterialVolume &volume = m.materialVolume.value; + + if (volume.thicknessFactor != 0.f) { + WriteFloat(materialVolume, volume.thicknessFactor, "thicknessFactor", w.mAl); + } + + WriteTex(materialVolume, volume.thicknessTexture, "thicknessTexture", w.mAl); + + if (volume.attenuationDistance != INFINITY) { + WriteFloat(materialVolume, volume.attenuationDistance, "attenuationDistance", w.mAl); + } + + WriteVec(materialVolume, volume.attenuationColor, "attenuationColor", defaultAttenuationColor, w.mAl); + + if (!materialVolume.ObjectEmpty()) { + exts.AddMember("KHR_materials_volume", materialVolume, w.mAl); + } + } + + if (m.materialIOR.isPresent) { + Value materialIOR(rapidjson::Type::kObjectType); + + MaterialIOR &ior = m.materialIOR.value; + + if (ior.ior != 1.5f) { + WriteFloat(materialIOR, ior.ior, "ior", w.mAl); + } + + if (!materialIOR.ObjectEmpty()) { + exts.AddMember("KHR_materials_ior", materialIOR, w.mAl); + } + } + if (!exts.ObjectEmpty()) { obj.AddMember("extensions", exts, w.mAl); } @@ -890,6 +926,14 @@ namespace glTF2 { exts.PushBack(StringRef("KHR_materials_transmission"), mAl); } + if (this->mAsset.extensionsUsed.KHR_materials_volume) { + exts.PushBack(StringRef("KHR_materials_volume"), mAl); + } + + if (this->mAsset.extensionsUsed.KHR_materials_ior) { + exts.PushBack(StringRef("KHR_materials_ior"), mAl); + } + if (this->mAsset.extensionsUsed.FB_ngon_encoding) { exts.PushBack(StringRef("FB_ngon_encoding"), mAl); } diff --git a/code/AssetLib/glTF2/glTF2Exporter.cpp b/code/AssetLib/glTF2/glTF2Exporter.cpp index 22db4b26d..572c61f2b 100644 --- a/code/AssetLib/glTF2/glTF2Exporter.cpp +++ b/code/AssetLib/glTF2/glTF2Exporter.cpp @@ -704,6 +704,22 @@ bool glTF2Exporter::GetMatTransmission(const aiMaterial &mat, glTF2::MaterialTra return result || transmission.transmissionTexture.texture; } +bool glTF2Exporter::GetMatVolume(const aiMaterial &mat, glTF2::MaterialVolume &volume) { + bool result = mat.Get(AI_MATKEY_VOLUME_THICKNESS_FACTOR, volume.thicknessFactor) != aiReturn_SUCCESS; + + GetMatTex(mat, volume.thicknessTexture, AI_MATKEY_VOLUME_THICKNESS_TEXTURE); + + result = result || mat.Get(AI_MATKEY_VOLUME_ATTENUATION_DISTANCE, volume.attenuationDistance); + result = result || GetMatColor(mat, volume.attenuationColor, AI_MATKEY_VOLUME_ATTENUATION_COLOR) != aiReturn_SUCCESS; + + // Valid if any of these properties are available + return result || volume.thicknessTexture.texture; +} + +bool glTF2Exporter::GetMatIOR(const aiMaterial &mat, glTF2::MaterialIOR &ior) { + return mat.Get(AI_MATKEY_REFRACTI, ior.ior) == aiReturn_SUCCESS; +} + void glTF2Exporter::ExportMaterials() { aiString aiName; for (unsigned int i = 0; i < mScene->mNumMaterials; ++i) { @@ -824,6 +840,18 @@ void glTF2Exporter::ExportMaterials() { mAsset->extensionsUsed.KHR_materials_transmission = true; m->materialTransmission = Nullable(transmission); } + + MaterialVolume volume; + if (GetMatVolume(mat, volume)) { + mAsset->extensionsUsed.KHR_materials_volume = true; + m->materialVolume = Nullable(volume); + } + + MaterialIOR ior; + if (GetMatIOR(mat, ior)) { + mAsset->extensionsUsed.KHR_materials_ior = true; + m->materialIOR = Nullable(ior); + } } } } diff --git a/code/AssetLib/glTF2/glTF2Exporter.h b/code/AssetLib/glTF2/glTF2Exporter.h index 842d29815..6d70d915e 100644 --- a/code/AssetLib/glTF2/glTF2Exporter.h +++ b/code/AssetLib/glTF2/glTF2Exporter.h @@ -77,6 +77,8 @@ struct PbrSpecularGlossiness; struct MaterialSheen; struct MaterialClearcoat; struct MaterialTransmission; +struct MaterialVolume; +struct MaterialIOR; // Vec/matrix types, as raw float arrays typedef float(vec2)[2]; @@ -114,6 +116,8 @@ protected: bool GetMatSheen(const aiMaterial &mat, glTF2::MaterialSheen &sheen); bool GetMatClearcoat(const aiMaterial &mat, glTF2::MaterialClearcoat &clearcoat); bool GetMatTransmission(const aiMaterial &mat, glTF2::MaterialTransmission &transmission); + bool GetMatVolume(const aiMaterial &mat, glTF2::MaterialVolume &volume); + bool GetMatIOR(const aiMaterial &mat, glTF2::MaterialIOR &ior); void ExportMetadata(); void ExportMaterials(); void ExportMeshes(); diff --git a/code/AssetLib/glTF2/glTF2Importer.cpp b/code/AssetLib/glTF2/glTF2Importer.cpp index 02f07a935..a723b571a 100644 --- a/code/AssetLib/glTF2/glTF2Importer.cpp +++ b/code/AssetLib/glTF2/glTF2Importer.cpp @@ -309,7 +309,7 @@ static aiMaterial *ImportMaterial(std::vector &embeddedTexIdxs, Asset &r, M if (mat.materialSheen.isPresent) { MaterialSheen &sheen = mat.materialSheen.value; // Default value {0,0,0} disables Sheen - if (sheen.sheenColorFactor != defaultSheenFactor) { + if (std::memcmp(sheen.sheenColorFactor, defaultSheenFactor, sizeof(glTFCommon::vec3)) != 0) { SetMaterialColorProperty(r, sheen.sheenColorFactor, aimat, AI_MATKEY_SHEEN_COLOR_FACTOR); aimat->AddProperty(&sheen.sheenRoughnessFactor, 1, AI_MATKEY_SHEEN_ROUGHNESS_FACTOR); SetMaterialTextureProperty(embeddedTexIdxs, r, sheen.sheenColorTexture, aimat, AI_MATKEY_SHEEN_COLOR_TEXTURE); @@ -338,6 +338,23 @@ static aiMaterial *ImportMaterial(std::vector &embeddedTexIdxs, Asset &r, M SetMaterialTextureProperty(embeddedTexIdxs, r, transmission.transmissionTexture, aimat, AI_MATKEY_TRANSMISSION_TEXTURE); } + // KHR_materials_volume + if (mat.materialVolume.isPresent) { + MaterialVolume &volume = mat.materialVolume.value; + + aimat->AddProperty(&volume.thicknessFactor, 1, AI_MATKEY_VOLUME_THICKNESS_FACTOR); + SetMaterialTextureProperty(embeddedTexIdxs, r, volume.thicknessTexture, aimat, AI_MATKEY_VOLUME_THICKNESS_TEXTURE); + aimat->AddProperty(&volume.attenuationDistance, 1, AI_MATKEY_VOLUME_ATTENUATION_DISTANCE); + SetMaterialColorProperty(r, volume.attenuationColor, aimat, AI_MATKEY_VOLUME_ATTENUATION_COLOR); + } + + // KHR_materials_ior + if (mat.materialIOR.isPresent) { + MaterialIOR &ior = mat.materialIOR.value; + + aimat->AddProperty(&ior.ior, 1, AI_MATKEY_REFRACTI); + } + return aimat; } catch (...) { delete aimat; diff --git a/code/Common/BaseImporter.cpp b/code/Common/BaseImporter.cpp index fa6cac938..d7e24afab 100644 --- a/code/Common/BaseImporter.cpp +++ b/code/Common/BaseImporter.cpp @@ -207,7 +207,7 @@ void BaseImporter::GetExtensionList(std::set &extensions) { if (!r) { continue; } - // We need to make sure that we didn't accidentially identify the end of another token as our token, + // We need to make sure that we didn't accidentally identify the end of another token as our token, // e.g. in a previous version the "gltf " present in some gltf files was detected as "f " if (noAlphaBeforeTokens && (r != buffer && isalpha(static_cast(r[-1])))) { continue; diff --git a/code/Common/ImporterRegistry.cpp b/code/Common/ImporterRegistry.cpp index 5df096166..77a365844 100644 --- a/code/Common/ImporterRegistry.cpp +++ b/code/Common/ImporterRegistry.cpp @@ -46,6 +46,7 @@ directly (unless you are adding new loaders), instead use the corresponding preprocessor flag to selectively disable formats. */ +#include #include #include #include diff --git a/code/Common/SGSpatialSort.cpp b/code/Common/SGSpatialSort.cpp index 0475bce6e..78b869260 100644 --- a/code/Common/SGSpatialSort.cpp +++ b/code/Common/SGSpatialSort.cpp @@ -52,7 +52,7 @@ using namespace Assimp; // ------------------------------------------------------------------------------------------------ SGSpatialSort::SGSpatialSort() { - // define the reference plane. We choose some arbitrary vector away from all basic axises + // define the reference plane. We choose some arbitrary vector away from all basic axes // in the hope that no model spreads all its vertices along this plane. mPlaneNormal.Set( 0.8523f, 0.34321f, 0.5736f); mPlaneNormal.Normalize(); @@ -121,7 +121,7 @@ void SGSpatialSort::FindPositions( const aiVector3D& pPosition, index++; // Mow start iterating from there until the first position lays outside of the distance range. - // Add all positions inside the distance range within the given radius to the result aray + // Add all positions inside the distance range within the given radius to the result array float squareEpsilon = pRadius * pRadius; std::vector::const_iterator it = mPositions.begin() + index; diff --git a/code/Common/SpatialSort.cpp b/code/Common/SpatialSort.cpp index 66ca2ffc6..9b96887ac 100644 --- a/code/Common/SpatialSort.cpp +++ b/code/Common/SpatialSort.cpp @@ -55,17 +55,19 @@ const aiVector3D PlaneInit(0.8523f, 0.34321f, 0.5736f); // ------------------------------------------------------------------------------------------------ // Constructs a spatially sorted representation from the given position array. -// define the reference plane. We choose some arbitrary vector away from all basic axises +// define the reference plane. We choose some arbitrary vector away from all basic axes // in the hope that no model spreads all its vertices along this plane. SpatialSort::SpatialSort(const aiVector3D *pPositions, unsigned int pNumPositions, unsigned int pElementOffset) : - mPlaneNormal(PlaneInit) { + mPlaneNormal(PlaneInit), + mFinalized(false) { mPlaneNormal.Normalize(); Fill(pPositions, pNumPositions, pElementOffset); } // ------------------------------------------------------------------------------------------------ SpatialSort::SpatialSort() : - mPlaneNormal(PlaneInit) { + mPlaneNormal(PlaneInit), + mFinalized(false) { mPlaneNormal.Normalize(); } @@ -80,28 +82,41 @@ void SpatialSort::Fill(const aiVector3D *pPositions, unsigned int pNumPositions, unsigned int pElementOffset, bool pFinalize /*= true */) { mPositions.clear(); + mFinalized = false; Append(pPositions, pNumPositions, pElementOffset, pFinalize); + mFinalized = pFinalize; +} + +// ------------------------------------------------------------------------------------------------ +ai_real SpatialSort::CalculateDistance(const aiVector3D &pPosition) const { + return (pPosition - mCentroid) * mPlaneNormal; } // ------------------------------------------------------------------------------------------------ void SpatialSort::Finalize() { + const ai_real scale = 1.0f / mPositions.size(); + for (unsigned int i = 0; i < mPositions.size(); i++) { + mCentroid += scale * mPositions[i].mPosition; + } + for (unsigned int i = 0; i < mPositions.size(); i++) { + mPositions[i].mDistance = CalculateDistance(mPositions[i].mPosition); + } std::sort(mPositions.begin(), mPositions.end()); + mFinalized = true; } // ------------------------------------------------------------------------------------------------ void SpatialSort::Append(const aiVector3D *pPositions, unsigned int pNumPositions, unsigned int pElementOffset, bool pFinalize /*= true */) { + ai_assert(!mFinalized && "You cannot add positions to the SpatialSort object after it has been finalized."); // store references to all given positions along with their distance to the reference plane const size_t initial = mPositions.size(); - mPositions.reserve(initial + (pFinalize ? pNumPositions : pNumPositions * 2)); + mPositions.reserve(initial + pNumPositions); for (unsigned int a = 0; a < pNumPositions; a++) { const char *tempPointer = reinterpret_cast(pPositions); const aiVector3D *vec = reinterpret_cast(tempPointer + a * pElementOffset); - - // store position by index and distance - ai_real distance = *vec * mPlaneNormal; - mPositions.push_back(Entry(static_cast(a + initial), *vec, distance)); + mPositions.push_back(Entry(static_cast(a + initial), *vec)); } if (pFinalize) { @@ -114,7 +129,8 @@ void SpatialSort::Append(const aiVector3D *pPositions, unsigned int pNumPosition // Returns an iterator for all positions close to the given position. void SpatialSort::FindPositions(const aiVector3D &pPosition, ai_real pRadius, std::vector &poResults) const { - const ai_real dist = pPosition * mPlaneNormal; + ai_assert(mFinalized && "The SpatialSort object must be finalized before FindPositions can be called."); + const ai_real dist = CalculateDistance(pPosition); const ai_real minDist = dist - pRadius, maxDist = dist + pRadius; // clear the array @@ -148,7 +164,7 @@ void SpatialSort::FindPositions(const aiVector3D &pPosition, index++; // Mow start iterating from there until the first position lays outside of the distance range. - // Add all positions inside the distance range within the given radius to the result aray + // Add all positions inside the distance range within the given radius to the result array std::vector::const_iterator it = mPositions.begin() + index; const ai_real pSquared = pRadius * pRadius; while (it->mDistance < maxDist) { @@ -229,6 +245,7 @@ BinFloat ToBinary(const ai_real &pValue) { // Fills an array with indices of all positions identical to the given position. In opposite to // FindPositions(), not an epsilon is used but a (very low) tolerance of four floating-point units. void SpatialSort::FindIdenticalPositions(const aiVector3D &pPosition, std::vector &poResults) const { + ai_assert(mFinalized && "The SpatialSort object must be finalized before FindIdenticalPositions can be called."); // Epsilons have a huge disadvantage: they are of constant precision, while floating-point // values are of log2 precision. If you apply e=0.01 to 100, the epsilon is rather small, but // if you apply it to 0.001, it is enormous. @@ -254,7 +271,7 @@ void SpatialSort::FindIdenticalPositions(const aiVector3D &pPosition, std::vecto // Convert the plane distance to its signed integer representation so the ULPs tolerance can be // applied. For some reason, VC won't optimize two calls of the bit pattern conversion. - const BinFloat minDistBinary = ToBinary(pPosition * mPlaneNormal) - distanceToleranceInULPs; + const BinFloat minDistBinary = ToBinary(CalculateDistance(pPosition)) - distanceToleranceInULPs; const BinFloat maxDistBinary = minDistBinary + 2 * distanceToleranceInULPs; // clear the array in this strange fashion because a simple clear() would also deallocate @@ -297,13 +314,14 @@ void SpatialSort::FindIdenticalPositions(const aiVector3D &pPosition, std::vecto // ------------------------------------------------------------------------------------------------ unsigned int SpatialSort::GenerateMappingTable(std::vector &fill, ai_real pRadius) const { + ai_assert(mFinalized && "The SpatialSort object must be finalized before GenerateMappingTable can be called."); fill.resize(mPositions.size(), UINT_MAX); ai_real dist, maxDist; unsigned int t = 0; const ai_real pSquared = pRadius * pRadius; for (size_t i = 0; i < mPositions.size();) { - dist = mPositions[i].mPosition * mPlaneNormal; + dist = (mPositions[i].mPosition - mCentroid) * mPlaneNormal; maxDist = dist + pRadius; fill[mPositions[i].mIndex] = t; diff --git a/code/Pbrt/PbrtExporter.cpp b/code/Pbrt/PbrtExporter.cpp index 1c7024c28..c04ab6c19 100644 --- a/code/Pbrt/PbrtExporter.cpp +++ b/code/Pbrt/PbrtExporter.cpp @@ -614,7 +614,7 @@ void PbrtExporter::WriteMaterial(int m) { eta != 1); mOutput << "# - Constants: diffuse " << constantDiffuse << " specular " << constantSpecular << - " transprency " << constantTransparency << " opacity " << constantOpacity << + " transparency " << constantTransparency << " opacity " << constantOpacity << " shininess " << constantShininess << " shininess strength " << constantShininessStrength << " eta " << constantEta << "\n"; diff --git a/code/PostProcessing/RemoveVCProcess.cpp b/code/PostProcessing/RemoveVCProcess.cpp index 43be09196..9ee1da15c 100644 --- a/code/PostProcessing/RemoveVCProcess.cpp +++ b/code/PostProcessing/RemoveVCProcess.cpp @@ -67,7 +67,7 @@ bool RemoveVCProcess::IsActive(unsigned int pFlags) const { } // ------------------------------------------------------------------------------------------------ -// Small helper function to delete all elements in a T** aray using delete +// Small helper function to delete all elements in a T** array using delete template inline void ArrayDelete(T **&in, unsigned int &num) { for (unsigned int i = 0; i < num; ++i) diff --git a/code/PostProcessing/ScaleProcess.cpp b/code/PostProcessing/ScaleProcess.cpp index 63dd0443d..8fb3dc903 100644 --- a/code/PostProcessing/ScaleProcess.cpp +++ b/code/PostProcessing/ScaleProcess.cpp @@ -118,7 +118,7 @@ void ScaleProcess::Execute( aiScene* pScene ) { { aiMesh *mesh = pScene->mMeshes[meshID]; - // Reconstruct mesh vertexes to the new unit system + // Reconstruct mesh vertices to the new unit system for( unsigned int vertexID = 0; vertexID < mesh->mNumVertices; vertexID++) { aiVector3D& vertex = mesh->mVertices[vertexID]; diff --git a/code/PostProcessing/SplitLargeMeshes.cpp b/code/PostProcessing/SplitLargeMeshes.cpp index cb614edaa..b601a1331 100644 --- a/code/PostProcessing/SplitLargeMeshes.cpp +++ b/code/PostProcessing/SplitLargeMeshes.cpp @@ -129,7 +129,7 @@ void SplitLargeMeshesProcess_Triangle::UpdateNode(aiNode* pcNode, pcNode->mMeshes[b] = aiEntries[b]; } - // recusively update all other nodes + // recursively update all other nodes for (unsigned int i = 0; i < pcNode->mNumChildren;++i) { UpdateNode ( pcNode->mChildren[i], avList ); } diff --git a/code/PostProcessing/TextureTransform.cpp b/code/PostProcessing/TextureTransform.cpp index 74b00d92c..1cb7f293e 100644 --- a/code/PostProcessing/TextureTransform.cpp +++ b/code/PostProcessing/TextureTransform.cpp @@ -178,7 +178,7 @@ void TextureTransformStep::PreProcessUVTransform(STransformVecInfo& info) } else if (aiTextureMapMode_Clamp == info.mapV || aiTextureMapMode_Decal == info.mapV) { // Clamp - translations beyond 1,1 are senseless - ::ai_snprintf(szTemp,512,"[c] UV V offset %f canbe clamped to 1.0f",info.mTranslation.y); + ::ai_snprintf(szTemp,512,"[c] UV V offset %f can be clamped to 1.0f",info.mTranslation.y); out = 1.f; } @@ -539,7 +539,7 @@ void TextureTransformStep::Execute( aiScene* pScene) m5.a3 += trl.x; m5.b3 += trl.y; matrix = m2 * m4 * matrix * m3 * m5; - for (src = dest; src != end; ++src) { /* manual homogenious divide */ + for (src = dest; src != end; ++src) { /* manual homogeneous divide */ src->z = 1.f; *src = matrix * *src; src->x /= src->z; diff --git a/contrib/irrXML/fast_atof.h b/contrib/irrXML/fast_atof.h deleted file mode 100644 index 14212429b..000000000 --- a/contrib/irrXML/fast_atof.h +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright (C) 2002-2005 Nikolaus Gebhardt -// This file is part of the "Irrlicht Engine" and the "irrXML" project. -// For conditions of distribution and use, see copyright notice in irrlicht.h and irrXML.h - -#ifndef __FAST_A_TO_F_H_INCLUDED__ -#define __FAST_A_TO_F_H_INCLUDED__ - -#include -#include - -namespace irr -{ -namespace core -{ - -const float fast_atof_table[] = { - 0.f, - 0.1f, - 0.01f, - 0.001f, - 0.0001f, - 0.00001f, - 0.000001f, - 0.0000001f, - 0.00000001f, - 0.000000001f, - 0.0000000001f, - 0.00000000001f, - 0.000000000001f, - 0.0000000000001f, - 0.00000000000001f, - 0.000000000000001f - }; - -//! Provides a fast function for converting a string into a float, -//! about 6 times faster than atof in win32. -// If you find any bugs, please send them to me, niko (at) irrlicht3d.org. -inline char* fast_atof_move(char* c, float& out) -{ - bool inv = false; - char *t; - float f; - - if (*c=='-') - { - c++; - inv = true; - } - - f = (float)strtol(c, &t, 10); - - c = t; - - if (*c == '.') - { - c++; - - float pl = (float)strtol(c, &t, 10); - pl *= fast_atof_table[t-c]; - - f += pl; - - c = t; - - if (*c == 'e') - { - ++c; - float exp = (float)strtol(c, &t, 10); - f *= (float)pow(10.0f, exp); - c = t; - } - } - - if (inv) - f *= -1.0f; - - out = f; - return c; -} - -//! Provides a fast function for converting a string into a float, -//! about 6 times faster than atof in win32. -// If you find any bugs, please send them to me, niko (at) irrlicht3d.org. -inline const char* fast_atof_move_const(const char* c, float& out) -{ - bool inv = false; - char *t; - float f; - - if (*c=='-') - { - c++; - inv = true; - } - - f = (float)strtol(c, &t, 10); - - c = t; - - if (*c == '.') - { - c++; - - float pl = (float)strtol(c, &t, 10); - pl *= fast_atof_table[t-c]; - - f += pl; - - c = t; - - if (*c == 'e') - { - ++c; - f32 exp = (f32)strtol(c, &t, 10); - f *= (f32)powf(10.0f, exp); - c = t; - } - } - - if (inv) - f *= -1.0f; - - out = f; - return c; -} - - -inline float fast_atof(const char* c) -{ - float ret; - fast_atof_move_const(c, ret); - return ret; -} - -} // end namespace core -}// end namespace irr - -#endif - diff --git a/doc/dox.h b/doc/dox.h index 409e775d4..1d5f59aa4 100644 --- a/doc/dox.h +++ b/doc/dox.h @@ -85,7 +85,7 @@ as long as you retain the license information and take own responsibility for wh the LICENSE file. You can find test models for almost all formats in the /test/models directory. Beware, they're *free*, -but not all of them are *open-source*. If there's an accompagning '\source.txt' file don't forget to read it. +but not all of them are *open-source*. If there's an accompanying '\source.txt' file don't forget to read it. @section main_install Installation @@ -687,7 +687,7 @@ There are two cases: format such as DDS or PNG. The term "compressed" does not mean that the texture data must actually be compressed, however the texture was found in the model file as if it was stored in a separate file on the harddisk. Appropriate decoders (such as libjpeg, libpng, D3DX, DevIL) are - required to load theses textures. aiTexture::mWidth specifies the size of the texture data in + required to load these textures. aiTexture::mWidth specifies the size of the texture data in bytes, aiTexture::pcData is a pointer to the raw image data and aiTexture::achFormatHint is either zeroed or contains the most common file extension of the embedded texture's format. This value is only set if assimp is able to determine the file format. @@ -1181,7 +1181,7 @@ You can get assigned shader sources by using the following material keys:
  • AI_MATKEY_SHADER_VERTEX
  • Assigned vertex shader code stored as a string.
  • AI_MATKEY_SHADER_FRAGMENT
  • Assigned fragment shader code stored as a string.
  • AI_MATKEY_SHADER_GEO
  • Assigned geometry shader code stored as a string. -
  • AI_MATKEY_SHADER_TESSELATION
  • Assigned tesselation shader code stored as a string. +
  • AI_MATKEY_SHADER_TESSELATION
  • Assigned tessellation shader code stored as a string.
  • AI_MATKEY_SHADER_PRIMITIVE
  • Assigned primitive shader code stored as a string.
  • AI_MATKEY_SHADER_COMPUTE
  • Assigned compute shader code stored as a string. @@ -1359,7 +1359,7 @@ When filing bugs on the Blender loader, always give the Blender version (or, eve This section contains implementation notes on the IFC-STEP importer. @subsection ifc_overview Overview -The library provides a partial implementation of the IFC2x3 industry standard for automatized exchange of CAE/architectural +The library provides a partial implementation of the IFC2x3 industry standard for automated exchange of CAE/architectural data sets. See http://en.wikipedia.org/wiki/Industry_Foundation_Classes for more information on the format. We aim at getting as much 3D data out of the files as possible. @@ -1503,7 +1503,7 @@ like Windows and Linux ( 32 bit and 64 bit ).
  • Provide some _free_ test models in <root>/test/models/<FormatName>/ and credit their authors. -Test files for a file format shouldn't be too large (~500 KiB in total), and not too repetive. Try to cover all format features with test data. +Test files for a file format shouldn't be too large (~500 KiB in total), and not too repetitive. Try to cover all format features with test data.
  • Done! Please, share your loader that everyone can profit from it! diff --git a/include/assimp/ByteSwapper.h b/include/assimp/ByteSwapper.h index 9e1eea10f..94df04b7f 100644 --- a/include/assimp/ByteSwapper.h +++ b/include/assimp/ByteSwapper.h @@ -40,7 +40,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -/** @file Helper class tp perform various byte oder swappings +/** @file Helper class tp perform various byte order swappings (e.g. little to big endian) */ #pragma once #ifndef AI_BYTESWAPPER_H_INC diff --git a/include/assimp/LogAux.h b/include/assimp/LogAux.h index 70e07790e..01a7d6375 100644 --- a/include/assimp/LogAux.h +++ b/include/assimp/LogAux.h @@ -56,7 +56,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace Assimp { -/// @brief Logger class, which will exten the class by log-functions. +/// @brief Logger class, which will extend the class by log-functions. /// @tparam TDeriving template class LogFunctions { diff --git a/include/assimp/MemoryIOWrapper.h b/include/assimp/MemoryIOWrapper.h index 24f6a85d1..0e509d997 100644 --- a/include/assimp/MemoryIOWrapper.h +++ b/include/assimp/MemoryIOWrapper.h @@ -41,7 +41,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** @file MemoryIOWrapper.h - * Handy IOStream/IOSystem implemetation to read directly from a memory buffer */ + * Handy IOStream/IOSystem implementation to read directly from a memory buffer */ #pragma once #ifndef AI_MEMORYIOSTREAM_H_INC #define AI_MEMORYIOSTREAM_H_INC diff --git a/include/assimp/SpatialSort.h b/include/assimp/SpatialSort.h index 39ebae77b..c0c4a0292 100644 --- a/include/assimp/SpatialSort.h +++ b/include/assimp/SpatialSort.h @@ -51,6 +51,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include +#include namespace Assimp { @@ -142,24 +143,35 @@ public: ai_real pRadius) const; protected: - /** Normal of the sorting plane, normalized. The center is always at (0, 0, 0) */ + /** Return the distance to the sorting plane. */ + ai_real CalculateDistance(const aiVector3D &pPosition) const; + +protected: + /** Normal of the sorting plane, normalized. + */ aiVector3D mPlaneNormal; + /** The centroid of the positions, which is used as a point on the sorting plane + * when calculating distance. This value is calculated in Finalize. + */ + aiVector3D mCentroid; + /** An entry in a spatially sorted position array. Consists of a vertex index, * its position and its pre-calculated distance from the reference plane */ struct Entry { unsigned int mIndex; ///< The vertex referred by this entry aiVector3D mPosition; ///< Position - ai_real mDistance; ///< Distance of this vertex to the sorting plane + /// Distance of this vertex to the sorting plane. This is set by Finalize. + ai_real mDistance; Entry() AI_NO_EXCEPT - : mIndex(999999999), + : mIndex(std::numeric_limits::max()), mPosition(), - mDistance(99999.) { + mDistance(std::numeric_limits::max()) { // empty } - Entry(unsigned int pIndex, const aiVector3D &pPosition, ai_real pDistance) : - mIndex(pIndex), mPosition(pPosition), mDistance(pDistance) { + Entry(unsigned int pIndex, const aiVector3D &pPosition) : + mIndex(pIndex), mPosition(pPosition), mDistance(std::numeric_limits::max()) { // empty } @@ -168,6 +180,9 @@ protected: // all positions, sorted by distance to the sorting plane std::vector mPositions; + + /// false until the Finalize method is called. + bool mFinalized; }; } // end of namespace Assimp diff --git a/include/assimp/StreamReader.h b/include/assimp/StreamReader.h index 1880f66b6..c6c17762d 100644 --- a/include/assimp/StreamReader.h +++ b/include/assimp/StreamReader.h @@ -207,7 +207,7 @@ public: // --------------------------------------------------------------------- /** Set current file pointer (Get it from #GetPtr). This is if you - * prefer to do pointer arithmetics on your own or want to copy + * prefer to do pointer arithmetic on your own or want to copy * large chunks of data at once. * @param p The new pointer, which is validated against the size * limit and buffer boundaries. */ diff --git a/include/assimp/Vertex.h b/include/assimp/Vertex.h index e749e3633..ad5ff476c 100644 --- a/include/assimp/Vertex.h +++ b/include/assimp/Vertex.h @@ -93,7 +93,7 @@ namespace Assimp { // ------------------------------------------------------------------------------------------------ /** Intermediate description a vertex with all possible components. Defines a full set of - * operators, so you may use such a 'Vertex' in basic arithmetics. All operators are applied + * operators, so you may use such a 'Vertex' in basic arithmetic. All operators are applied * to *all* vertex components equally. This is useful for stuff like interpolation * or subdivision, but won't work if special handling is required for some vertex components. */ // ------------------------------------------------------------------------------------------------ @@ -222,7 +222,7 @@ private: } // ---------------------------------------------------------------------------- - /** This time binary arithmetics of v0 with a floating-point number */ + /** This time binary arithmetic of v0 with a floating-point number */ template