Merge
commit
526027999b
|
@ -1509,7 +1509,7 @@ void ColladaParser::ReadEffectParam( Collada::EffectParam& pParam)
|
||||||
// don't care for remaining stuff
|
// don't care for remaining stuff
|
||||||
SkipElement( "surface");
|
SkipElement( "surface");
|
||||||
}
|
}
|
||||||
else if( IsElement( "sampler2D"))
|
else if( IsElement( "sampler2D") && (FV_1_4_n == mFormat || FV_1_3_n == mFormat))
|
||||||
{
|
{
|
||||||
// surface ID is given inside <source> tags
|
// surface ID is given inside <source> tags
|
||||||
TestOpening( "source");
|
TestOpening( "source");
|
||||||
|
@ -1520,6 +1520,19 @@ void ColladaParser::ReadEffectParam( Collada::EffectParam& pParam)
|
||||||
|
|
||||||
// don't care for remaining stuff
|
// don't care for remaining stuff
|
||||||
SkipElement( "sampler2D");
|
SkipElement( "sampler2D");
|
||||||
|
}
|
||||||
|
else if( IsElement( "sampler2D"))
|
||||||
|
{
|
||||||
|
// surface ID is given inside <instance_image> tags
|
||||||
|
TestOpening( "instance_image");
|
||||||
|
int attrURL = GetAttribute("url");
|
||||||
|
const char* url = mReader->getAttributeValue( attrURL);
|
||||||
|
if( url[0] != '#')
|
||||||
|
ThrowException( "Unsupported URL format in instance_image");
|
||||||
|
url++;
|
||||||
|
pParam.mType = Param_Sampler;
|
||||||
|
pParam.mReference = url;
|
||||||
|
SkipElement( "sampler2D");
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
// ignore unknown element
|
// ignore unknown element
|
||||||
|
|
|
@ -2546,8 +2546,9 @@ private:
|
||||||
// need to convert from TRS order to SRT?
|
// need to convert from TRS order to SRT?
|
||||||
if(reverse_order) {
|
if(reverse_order) {
|
||||||
|
|
||||||
aiVector3D def_scale, def_translate;
|
aiVector3D def_scale = PropertyGet(props,"Lcl Scaling",aiVector3D(1.f,1.f,1.f));
|
||||||
aiQuaternion def_rot;
|
aiVector3D def_translate = PropertyGet(props,"Lcl Translation",aiVector3D(0.f,0.f,0.f));
|
||||||
|
aiVector3D def_rot = PropertyGet(props,"Lcl Rotation",aiVector3D(0.f,0.f,0.f));
|
||||||
|
|
||||||
KeyFrameListList scaling;
|
KeyFrameListList scaling;
|
||||||
KeyFrameListList translation;
|
KeyFrameListList translation;
|
||||||
|
@ -2556,24 +2557,14 @@ private:
|
||||||
if(chain[TransformationComp_Scaling] != iter_end) {
|
if(chain[TransformationComp_Scaling] != iter_end) {
|
||||||
scaling = GetKeyframeList((*chain[TransformationComp_Scaling]).second, start, stop);
|
scaling = GetKeyframeList((*chain[TransformationComp_Scaling]).second, start, stop);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
def_scale = PropertyGet(props,"Lcl Scaling",aiVector3D(1.f,1.f,1.f));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(chain[TransformationComp_Translation] != iter_end) {
|
if(chain[TransformationComp_Translation] != iter_end) {
|
||||||
translation = GetKeyframeList((*chain[TransformationComp_Translation]).second, start, stop);
|
translation = GetKeyframeList((*chain[TransformationComp_Translation]).second, start, stop);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
def_translate = PropertyGet(props,"Lcl Translation",aiVector3D(0.f,0.f,0.f));
|
|
||||||
}
|
|
||||||
|
|
||||||
if(chain[TransformationComp_Rotation] != iter_end) {
|
if(chain[TransformationComp_Rotation] != iter_end) {
|
||||||
rotation = GetKeyframeList((*chain[TransformationComp_Rotation]).second, start, stop);
|
rotation = GetKeyframeList((*chain[TransformationComp_Rotation]).second, start, stop);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
def_rot = EulerToQuaternion(PropertyGet(props,"Lcl Rotation",aiVector3D(0.f,0.f,0.f)),
|
|
||||||
target.RotationOrder());
|
|
||||||
}
|
|
||||||
|
|
||||||
KeyFrameListList joined;
|
KeyFrameListList joined;
|
||||||
joined.insert(joined.end(), scaling.begin(), scaling.end());
|
joined.insert(joined.end(), scaling.begin(), scaling.end());
|
||||||
|
@ -2790,7 +2781,7 @@ private:
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void InterpolateKeys(aiVectorKey* valOut,const KeyTimeList& keys, const KeyFrameListList& inputs,
|
void InterpolateKeys(aiVectorKey* valOut,const KeyTimeList& keys, const KeyFrameListList& inputs,
|
||||||
const bool geom,
|
const aiVector3D& def_value,
|
||||||
double& max_time,
|
double& max_time,
|
||||||
double& min_time)
|
double& min_time)
|
||||||
|
|
||||||
|
@ -2804,10 +2795,7 @@ private:
|
||||||
next_pos.resize(inputs.size(),0);
|
next_pos.resize(inputs.size(),0);
|
||||||
|
|
||||||
BOOST_FOREACH(KeyTimeList::value_type time, keys) {
|
BOOST_FOREACH(KeyTimeList::value_type time, keys) {
|
||||||
float result[3] = {0.0f, 0.0f, 0.0f};
|
float result[3] = {def_value.x, def_value.y, def_value.z};
|
||||||
if(geom) {
|
|
||||||
result[0] = result[1] = result[2] = 1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (size_t i = 0; i < count; ++i) {
|
for (size_t i = 0; i < count; ++i) {
|
||||||
const KeyFrameList& kfl = inputs[i];
|
const KeyFrameList& kfl = inputs[i];
|
||||||
|
@ -2832,12 +2820,7 @@ private:
|
||||||
const double factor = timeB == timeA ? 0. : static_cast<double>((time - timeA) / (timeB - timeA));
|
const double factor = timeB == timeA ? 0. : static_cast<double>((time - timeA) / (timeB - timeA));
|
||||||
const float interpValue = static_cast<float>(valueA + (valueB - valueA) * factor);
|
const float interpValue = static_cast<float>(valueA + (valueB - valueA) * factor);
|
||||||
|
|
||||||
if(geom) {
|
result[kfl.get<2>()] = interpValue;
|
||||||
result[kfl.get<2>()] *= interpValue;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
result[kfl.get<2>()] += interpValue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// magic value to convert fbx times to seconds
|
// magic value to convert fbx times to seconds
|
||||||
|
@ -2857,7 +2840,7 @@ private:
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void InterpolateKeys(aiQuatKey* valOut,const KeyTimeList& keys, const KeyFrameListList& inputs,
|
void InterpolateKeys(aiQuatKey* valOut,const KeyTimeList& keys, const KeyFrameListList& inputs,
|
||||||
const bool geom,
|
const aiVector3D& def_value,
|
||||||
double& maxTime,
|
double& maxTime,
|
||||||
double& minTime,
|
double& minTime,
|
||||||
Model::RotOrder order)
|
Model::RotOrder order)
|
||||||
|
@ -2866,7 +2849,7 @@ private:
|
||||||
ai_assert(valOut);
|
ai_assert(valOut);
|
||||||
|
|
||||||
boost::scoped_array<aiVectorKey> temp(new aiVectorKey[keys.size()]);
|
boost::scoped_array<aiVectorKey> temp(new aiVectorKey[keys.size()]);
|
||||||
InterpolateKeys(temp.get(),keys,inputs,geom,maxTime, minTime);
|
InterpolateKeys(temp.get(), keys, inputs, def_value, maxTime, minTime);
|
||||||
|
|
||||||
aiMatrix4x4 m;
|
aiMatrix4x4 m;
|
||||||
|
|
||||||
|
@ -2908,20 +2891,20 @@ private:
|
||||||
Model::RotOrder order,
|
Model::RotOrder order,
|
||||||
const aiVector3D& def_scale,
|
const aiVector3D& def_scale,
|
||||||
const aiVector3D& def_translate,
|
const aiVector3D& def_translate,
|
||||||
const aiQuaternion& def_rotation)
|
const aiVector3D& def_rotation)
|
||||||
{
|
{
|
||||||
if (rotation.size()) {
|
if (rotation.size()) {
|
||||||
InterpolateKeys(out_quat, times, rotation, false, maxTime, minTime, order);
|
InterpolateKeys(out_quat, times, rotation, def_rotation, maxTime, minTime, order);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (size_t i = 0; i < times.size(); ++i) {
|
for (size_t i = 0; i < times.size(); ++i) {
|
||||||
out_quat[i].mTime = CONVERT_FBX_TIME(times[i]) * anim_fps;
|
out_quat[i].mTime = CONVERT_FBX_TIME(times[i]) * anim_fps;
|
||||||
out_quat[i].mValue = def_rotation;
|
out_quat[i].mValue = EulerToQuaternion(def_rotation, order);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scaling.size()) {
|
if (scaling.size()) {
|
||||||
InterpolateKeys(out_scale, times, scaling, true, maxTime, minTime);
|
InterpolateKeys(out_scale, times, scaling, def_scale, maxTime, minTime);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (size_t i = 0; i < times.size(); ++i) {
|
for (size_t i = 0; i < times.size(); ++i) {
|
||||||
|
@ -2931,7 +2914,7 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
if (translation.size()) {
|
if (translation.size()) {
|
||||||
InterpolateKeys(out_translation, times, translation, false, maxTime, minTime);
|
InterpolateKeys(out_translation, times, translation, def_translate, maxTime, minTime);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (size_t i = 0; i < times.size(); ++i) {
|
for (size_t i = 0; i < times.size(); ++i) {
|
||||||
|
@ -2985,7 +2968,7 @@ private:
|
||||||
na->mNumScalingKeys = static_cast<unsigned int>(keys.size());
|
na->mNumScalingKeys = static_cast<unsigned int>(keys.size());
|
||||||
na->mScalingKeys = new aiVectorKey[keys.size()];
|
na->mScalingKeys = new aiVectorKey[keys.size()];
|
||||||
if (keys.size() > 0)
|
if (keys.size() > 0)
|
||||||
InterpolateKeys(na->mScalingKeys, keys, inputs, true, maxTime, minTime);
|
InterpolateKeys(na->mScalingKeys, keys, inputs, aiVector3D(1.0f, 1.0f, 1.0f), maxTime, minTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3005,7 +2988,7 @@ private:
|
||||||
na->mNumPositionKeys = static_cast<unsigned int>(keys.size());
|
na->mNumPositionKeys = static_cast<unsigned int>(keys.size());
|
||||||
na->mPositionKeys = new aiVectorKey[keys.size()];
|
na->mPositionKeys = new aiVectorKey[keys.size()];
|
||||||
if (keys.size() > 0)
|
if (keys.size() > 0)
|
||||||
InterpolateKeys(na->mPositionKeys, keys, inputs, false, maxTime, minTime);
|
InterpolateKeys(na->mPositionKeys, keys, inputs, aiVector3D(0.0f, 0.0f, 0.0f), maxTime, minTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3026,7 +3009,7 @@ private:
|
||||||
na->mNumRotationKeys = static_cast<unsigned int>(keys.size());
|
na->mNumRotationKeys = static_cast<unsigned int>(keys.size());
|
||||||
na->mRotationKeys = new aiQuatKey[keys.size()];
|
na->mRotationKeys = new aiQuatKey[keys.size()];
|
||||||
if (keys.size() > 0)
|
if (keys.size() > 0)
|
||||||
InterpolateKeys(na->mRotationKeys, keys, inputs, false, maxTime, minTime, order);
|
InterpolateKeys(na->mRotationKeys, keys, inputs, aiVector3D(0.0f, 0.0f, 0.0f), maxTime, minTime, order);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -167,13 +167,12 @@ corresponding preprocessor flag to selectively disable formats.
|
||||||
#ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
|
#ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
|
||||||
# include "FBXImporter.h"
|
# include "FBXImporter.h"
|
||||||
#endif
|
#endif
|
||||||
#ifndef ASSIMP_BUILD_NO_GLTF_IMPORTER
|
|
||||||
# include "glTFImporter.h"
|
|
||||||
#endif
|
|
||||||
#ifndef ASSIMP_BUILD_NO_ASSBIN_IMPORTER
|
#ifndef ASSIMP_BUILD_NO_ASSBIN_IMPORTER
|
||||||
# include "AssbinLoader.h"
|
# include "AssbinLoader.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef ASSIMP_BUILD_NO_GLTF_IMPORTER
|
||||||
|
# include "glTFImporter.h"
|
||||||
|
#endif
|
||||||
#ifndef ASSIMP_BUILD_NO_C4D_IMPORTER
|
#ifndef ASSIMP_BUILD_NO_C4D_IMPORTER
|
||||||
# include "C4DImporter.h"
|
# include "C4DImporter.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -305,14 +304,13 @@ void GetImporterInstanceList(std::vector< BaseImporter* >& out)
|
||||||
#if ( !defined ASSIMP_BUILD_NO_FBX_IMPORTER )
|
#if ( !defined ASSIMP_BUILD_NO_FBX_IMPORTER )
|
||||||
out.push_back( new FBXImporter() );
|
out.push_back( new FBXImporter() );
|
||||||
#endif
|
#endif
|
||||||
#if ( !defined ASSIMP_BUILD_NO_GLTF_IMPORTER )
|
|
||||||
out.push_back( new glTFImporter() );
|
|
||||||
#endif
|
|
||||||
#if ( !defined ASSIMP_BUILD_NO_ASSBIN_IMPORTER )
|
#if ( !defined ASSIMP_BUILD_NO_ASSBIN_IMPORTER )
|
||||||
out.push_back( new AssbinImporter() );
|
out.push_back( new AssbinImporter() );
|
||||||
#endif
|
#endif
|
||||||
|
#if ( !defined ASSIMP_BUILD_NO_GLTF_IMPORTER )
|
||||||
#ifndef ASSIMP_BUILD_NO_C4D_IMPORTER
|
out.push_back( new glTFImporter() );
|
||||||
|
#endif
|
||||||
|
#if ( !defined ASSIMP_BUILD_NO_C4D_IMPORTER )
|
||||||
out.push_back( new C4DImporter() );
|
out.push_back( new C4DImporter() );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,6 +37,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef ASSIMP_BUILD_NO_GLTF_IMPORTER
|
||||||
|
|
||||||
#include "glTFImporter.h"
|
#include "glTFImporter.h"
|
||||||
#include "StreamReader.h"
|
#include "StreamReader.h"
|
||||||
#include "DefaultIOSystem.h"
|
#include "DefaultIOSystem.h"
|
||||||
|
@ -1078,6 +1081,8 @@ aiNode* glTFReader::LoadNode(const char* id, Value& node)
|
||||||
|
|
||||||
template<> const std::string LogFunctions<glTFImporter>::log_prefix = "glTF: ";
|
template<> const std::string LogFunctions<glTFImporter>::log_prefix = "glTF: ";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static const aiImporterDesc desc = {
|
static const aiImporterDesc desc = {
|
||||||
"glTF Importer",
|
"glTF Importer",
|
||||||
"",
|
"",
|
||||||
|
@ -1203,3 +1208,6 @@ void glTFImporter::InternReadFile( const std::string& pFile, aiScene* pScene, IO
|
||||||
pScene->mFlags |= AI_SCENE_FLAGS_INCOMPLETE;
|
pScene->mFlags |= AI_SCENE_FLAGS_INCOMPLETE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // ASSIMP_BUILD_NO_GLTF_IMPORTER
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue