Model loading and texturing
							
								
								
									
										170
									
								
								thirdparty/assimp/tools/assimp_view/AnimEvaluator.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,170 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2019, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "assimp_view.h"
 | 
			
		||||
 | 
			
		||||
#include <tuple>
 | 
			
		||||
 | 
			
		||||
using namespace AssimpView;
 | 
			
		||||
 | 
			
		||||
// ------------------------------------------------------------------------------------------------
 | 
			
		||||
// Constructor on a given animation.
 | 
			
		||||
AnimEvaluator::AnimEvaluator( const aiAnimation *pAnim )
 | 
			
		||||
: mAnim(pAnim)
 | 
			
		||||
, mLastTime(0.0) {
 | 
			
		||||
    mLastPositions.resize( pAnim->mNumChannels, std::make_tuple( 0, 0, 0));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ------------------------------------------------------------------------------------------------
 | 
			
		||||
// Destructor.
 | 
			
		||||
AnimEvaluator::~AnimEvaluator() {
 | 
			
		||||
    // empty
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ------------------------------------------------------------------------------------------------
 | 
			
		||||
// Evaluates the animation tracks for a given time stamp.
 | 
			
		||||
void AnimEvaluator::Evaluate( double pTime ) {
 | 
			
		||||
    // extract ticks per second. Assume default value if not given
 | 
			
		||||
    double ticksPerSecond = mAnim->mTicksPerSecond != 0.0 ? mAnim->mTicksPerSecond : 25.0;
 | 
			
		||||
    // every following time calculation happens in ticks
 | 
			
		||||
    pTime *= ticksPerSecond;
 | 
			
		||||
 | 
			
		||||
    // map into anim's duration
 | 
			
		||||
    double time = 0.0f;
 | 
			
		||||
    if (mAnim->mDuration > 0.0) {
 | 
			
		||||
        time = fmod(pTime, mAnim->mDuration);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (mTransforms.size() != mAnim->mNumChannels) {
 | 
			
		||||
        mTransforms.resize(mAnim->mNumChannels);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // calculate the transformations for each animation channel
 | 
			
		||||
    for( unsigned int a = 0; a < mAnim->mNumChannels; ++a ) {
 | 
			
		||||
        const aiNodeAnim* channel = mAnim->mChannels[a];
 | 
			
		||||
 | 
			
		||||
        // ******** Position *****
 | 
			
		||||
        aiVector3D presentPosition( 0, 0, 0);
 | 
			
		||||
        if( channel->mNumPositionKeys > 0) {
 | 
			
		||||
            // Look for present frame number. Search from last position if time is after the last time, else from beginning
 | 
			
		||||
            // Should be much quicker than always looking from start for the average use case.
 | 
			
		||||
            unsigned int frame = (time >= mLastTime) ? std::get<0>(mLastPositions[a]) : 0;
 | 
			
		||||
            while( frame < channel->mNumPositionKeys - 1) {
 | 
			
		||||
                if (time < channel->mPositionKeys[frame + 1].mTime) {
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
                ++frame;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // interpolate between this frame's value and next frame's value
 | 
			
		||||
            unsigned int nextFrame = (frame + 1) % channel->mNumPositionKeys;
 | 
			
		||||
            const aiVectorKey& key = channel->mPositionKeys[frame];
 | 
			
		||||
            const aiVectorKey& nextKey = channel->mPositionKeys[nextFrame];
 | 
			
		||||
            double diffTime = nextKey.mTime - key.mTime;
 | 
			
		||||
            if (diffTime < 0.0) {
 | 
			
		||||
                diffTime += mAnim->mDuration;
 | 
			
		||||
            }
 | 
			
		||||
            if( diffTime > 0) {
 | 
			
		||||
                float factor = float( (time - key.mTime) / diffTime);
 | 
			
		||||
                presentPosition = key.mValue + (nextKey.mValue - key.mValue) * factor;
 | 
			
		||||
            } else {
 | 
			
		||||
                presentPosition = key.mValue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            std::get<0>(mLastPositions[a]) = frame;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // ******** Rotation *********
 | 
			
		||||
        aiQuaternion presentRotation( 1, 0, 0, 0);
 | 
			
		||||
        if( channel->mNumRotationKeys > 0) {
 | 
			
		||||
            unsigned int frame = (time >= mLastTime) ? std::get<1>(mLastPositions[a]) : 0;
 | 
			
		||||
            while( frame < channel->mNumRotationKeys - 1) {
 | 
			
		||||
                if (time < channel->mRotationKeys[frame + 1].mTime) {
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
                ++frame;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // interpolate between this frame's value and next frame's value
 | 
			
		||||
            unsigned int nextFrame = (frame + 1) % channel->mNumRotationKeys;
 | 
			
		||||
            const aiQuatKey& key = channel->mRotationKeys[frame];
 | 
			
		||||
            const aiQuatKey& nextKey = channel->mRotationKeys[nextFrame];
 | 
			
		||||
            double diffTime = nextKey.mTime - key.mTime;
 | 
			
		||||
            if (diffTime < 0.0) {
 | 
			
		||||
                diffTime += mAnim->mDuration;
 | 
			
		||||
            }
 | 
			
		||||
            if( diffTime > 0) {
 | 
			
		||||
                float factor = float( (time - key.mTime) / diffTime);
 | 
			
		||||
                aiQuaternion::Interpolate( presentRotation, key.mValue, nextKey.mValue, factor);
 | 
			
		||||
            } else {
 | 
			
		||||
                presentRotation = key.mValue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            std::get<1>(mLastPositions[a]) = frame;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // ******** Scaling **********
 | 
			
		||||
        aiVector3D presentScaling( 1, 1, 1);
 | 
			
		||||
        if( channel->mNumScalingKeys > 0) {
 | 
			
		||||
            unsigned int frame = (time >= mLastTime) ? std::get<2>(mLastPositions[a]) : 0;
 | 
			
		||||
            while( frame < channel->mNumScalingKeys - 1) {
 | 
			
		||||
                if (time < channel->mScalingKeys[frame + 1].mTime) {
 | 
			
		||||
                    break;
 | 
			
		||||
                }
 | 
			
		||||
                ++frame;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // TODO: (thom) interpolation maybe? This time maybe even logarithmic, not linear
 | 
			
		||||
            presentScaling = channel->mScalingKeys[frame].mValue;
 | 
			
		||||
            std::get<2>(mLastPositions[a]) = frame;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // build a transformation matrix from it
 | 
			
		||||
        aiMatrix4x4& mat = mTransforms[a];
 | 
			
		||||
        mat = aiMatrix4x4( presentRotation.GetMatrix());
 | 
			
		||||
        mat.a1 *= presentScaling.x; mat.b1 *= presentScaling.x; mat.c1 *= presentScaling.x;
 | 
			
		||||
        mat.a2 *= presentScaling.y; mat.b2 *= presentScaling.y; mat.c2 *= presentScaling.y;
 | 
			
		||||
        mat.a3 *= presentScaling.z; mat.b3 *= presentScaling.z; mat.c3 *= presentScaling.z;
 | 
			
		||||
        mat.a4 = presentPosition.x; mat.b4 = presentPosition.y; mat.c4 = presentPosition.z;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    mLastTime = time;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										86
									
								
								thirdparty/assimp/tools/assimp_view/AnimEvaluator.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,86 @@
 | 
			
		||||
/** Calculates a pose for a given time of an animation */
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2019, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#ifndef AV_ANIMEVALUATOR_H_INCLUDED
 | 
			
		||||
#define AV_ANIMEVALUATOR_H_INCLUDED
 | 
			
		||||
 | 
			
		||||
#include <tuple>
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
namespace AssimpView {
 | 
			
		||||
 | 
			
		||||
/** 
 | 
			
		||||
 *  @brief  Calculates transformations for a given timestamp from a set of animation tracks. Not directly useful,
 | 
			
		||||
 *          better use the AnimPlayer class.
 | 
			
		||||
 */
 | 
			
		||||
class AnimEvaluator {
 | 
			
		||||
public:
 | 
			
		||||
    /// @brief  Constructor on a given animation. The animation is fixed throughout the lifetime of
 | 
			
		||||
    /// the object.
 | 
			
		||||
    /// @param pAnim    The animation to calculate poses for. Ownership of the animation object stays
 | 
			
		||||
    ///                 at the caller, the evaluator just keeps a reference to it as long as it persists.
 | 
			
		||||
    AnimEvaluator( const aiAnimation* pAnim);
 | 
			
		||||
 | 
			
		||||
    /// @brief  The class destructor.
 | 
			
		||||
    ~AnimEvaluator();
 | 
			
		||||
 | 
			
		||||
    /** Evaluates the animation tracks for a given time stamp. The calculated pose can be retrieved as a
 | 
			
		||||
     * array of transformation matrices afterwards by calling GetTransformations().
 | 
			
		||||
     * @param pTime The time for which you want to evaluate the animation, in seconds. Will be mapped into the animation cycle, so
 | 
			
		||||
     *   it can be an arbitrary value. Best use with ever-increasing time stamps.
 | 
			
		||||
     */
 | 
			
		||||
    void Evaluate( double pTime);
 | 
			
		||||
 | 
			
		||||
    /** Returns the transform matrices calculated at the last Evaluate() call. The array matches the mChannels array of
 | 
			
		||||
     * the aiAnimation. */
 | 
			
		||||
    const std::vector<aiMatrix4x4>& GetTransformations() const { return mTransforms; }
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    const aiAnimation* mAnim;
 | 
			
		||||
    double mLastTime;
 | 
			
		||||
    std::vector<std::tuple<unsigned int, unsigned int, unsigned int> > mLastPositions;
 | 
			
		||||
    std::vector<aiMatrix4x4> mTransforms;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // end of namespace AssimpView
 | 
			
		||||
 | 
			
		||||
#endif // AV_ANIMEVALUATOR_H_INCLUDED
 | 
			
		||||
							
								
								
									
										250
									
								
								thirdparty/assimp/tools/assimp_view/AssetHelper.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,250 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2012, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if (!defined AV_ASSET_HELPER_H_INCLUDED)
 | 
			
		||||
#define AV_ASSET_HELPER_H_INCLUDED
 | 
			
		||||
 | 
			
		||||
#include <d3d9.h>
 | 
			
		||||
#include <d3dx9.h>
 | 
			
		||||
#include <d3dx9mesh.h>
 | 
			
		||||
 | 
			
		||||
#include <assimp/scene.h>
 | 
			
		||||
 | 
			
		||||
namespace AssimpView {
 | 
			
		||||
 | 
			
		||||
    class SceneAnimator;
 | 
			
		||||
 | 
			
		||||
    //-------------------------------------------------------------------------------
 | 
			
		||||
    /** \brief Class to wrap ASSIMP's asset output structures
 | 
			
		||||
    */
 | 
			
		||||
    //-------------------------------------------------------------------------------
 | 
			
		||||
    class AssetHelper
 | 
			
		||||
    {
 | 
			
		||||
    public:
 | 
			
		||||
        enum
 | 
			
		||||
        {
 | 
			
		||||
            // the original normal set will be used
 | 
			
		||||
            ORIGINAL = 0x0u,
 | 
			
		||||
 | 
			
		||||
            // a smoothed normal set will be used
 | 
			
		||||
            SMOOTH = 0x1u,
 | 
			
		||||
 | 
			
		||||
            // a hard normal set will be used
 | 
			
		||||
            HARD = 0x2u,
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        // default constructor
 | 
			
		||||
        AssetHelper()
 | 
			
		||||
            : iNormalSet( ORIGINAL )
 | 
			
		||||
        {
 | 
			
		||||
            mAnimator = NULL;
 | 
			
		||||
            apcMeshes = NULL;
 | 
			
		||||
            pcScene = NULL;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //---------------------------------------------------------------
 | 
			
		||||
        // default vertex data structure
 | 
			
		||||
        // (even if tangents, bitangents or normals aren't
 | 
			
		||||
        // required by the shader they will be committed to the GPU)
 | 
			
		||||
        //---------------------------------------------------------------
 | 
			
		||||
        struct Vertex
 | 
			
		||||
        {
 | 
			
		||||
            aiVector3D vPosition;
 | 
			
		||||
            aiVector3D vNormal;
 | 
			
		||||
 | 
			
		||||
            D3DCOLOR dColorDiffuse;
 | 
			
		||||
            aiVector3D vTangent;
 | 
			
		||||
            aiVector3D vBitangent;
 | 
			
		||||
            aiVector2D vTextureUV;
 | 
			
		||||
            aiVector2D vTextureUV2;
 | 
			
		||||
            unsigned char mBoneIndices[ 4 ];
 | 
			
		||||
            unsigned char mBoneWeights[ 4 ]; // last Weight not used, calculated inside the vertex shader
 | 
			
		||||
 | 
			
		||||
            /** Returns the vertex declaration elements to create a declaration from. */
 | 
			
		||||
            static D3DVERTEXELEMENT9* GetDeclarationElements()
 | 
			
		||||
            {
 | 
			
		||||
                static D3DVERTEXELEMENT9 decl[] =
 | 
			
		||||
                {
 | 
			
		||||
                    { 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
 | 
			
		||||
                    { 0, 12, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0 },
 | 
			
		||||
                    { 0, 24, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
 | 
			
		||||
                    { 0, 28, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TANGENT, 0 },
 | 
			
		||||
                    { 0, 40, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BINORMAL, 0 },
 | 
			
		||||
                    { 0, 52, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 },
 | 
			
		||||
                    { 0, 60, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 1 },
 | 
			
		||||
                    { 0, 68, D3DDECLTYPE_UBYTE4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BLENDINDICES, 0 },
 | 
			
		||||
                    { 0, 72, D3DDECLTYPE_UBYTE4N, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_BLENDWEIGHT, 0 },
 | 
			
		||||
                    D3DDECL_END()
 | 
			
		||||
                };
 | 
			
		||||
 | 
			
		||||
                return decl;
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        //---------------------------------------------------------------
 | 
			
		||||
        // FVF vertex structure used for normals
 | 
			
		||||
        //---------------------------------------------------------------
 | 
			
		||||
        struct LineVertex
 | 
			
		||||
        {
 | 
			
		||||
            aiVector3D vPosition;
 | 
			
		||||
            DWORD dColorDiffuse;
 | 
			
		||||
 | 
			
		||||
            // retrieves the FVF code of the vertex type
 | 
			
		||||
            static DWORD GetFVF()
 | 
			
		||||
            {
 | 
			
		||||
                return D3DFVF_DIFFUSE | D3DFVF_XYZ;
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        //---------------------------------------------------------------
 | 
			
		||||
        // Helper class to store GPU related resources created for
 | 
			
		||||
        // a given aiMesh
 | 
			
		||||
        //---------------------------------------------------------------
 | 
			
		||||
        class MeshHelper
 | 
			
		||||
        {
 | 
			
		||||
        public:
 | 
			
		||||
 | 
			
		||||
            MeshHelper()
 | 
			
		||||
                :
 | 
			
		||||
                eShadingMode(),
 | 
			
		||||
                piVB( NULL ),
 | 
			
		||||
                piIB( NULL ),
 | 
			
		||||
                piVBNormals( NULL ),
 | 
			
		||||
                piEffect( NULL ),
 | 
			
		||||
                bSharedFX( false ),
 | 
			
		||||
                piDiffuseTexture( NULL ),
 | 
			
		||||
                piSpecularTexture( NULL ),
 | 
			
		||||
                piAmbientTexture( NULL ),
 | 
			
		||||
                piEmissiveTexture( NULL ),
 | 
			
		||||
                piNormalTexture( NULL ),
 | 
			
		||||
                piOpacityTexture( NULL ),
 | 
			
		||||
                piShininessTexture( NULL ),
 | 
			
		||||
                piLightmapTexture( NULL ),
 | 
			
		||||
                fOpacity(),
 | 
			
		||||
                fShininess(),
 | 
			
		||||
                fSpecularStrength(),
 | 
			
		||||
                twosided( false ),
 | 
			
		||||
                pvOriginalNormals( NULL )
 | 
			
		||||
            {}
 | 
			
		||||
 | 
			
		||||
            ~MeshHelper()
 | 
			
		||||
            {
 | 
			
		||||
                // NOTE: This is done in DeleteAssetData()
 | 
			
		||||
                // TODO: Make this a proper d'tor
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // shading mode to use. Either Lambert or otherwise phong
 | 
			
		||||
            // will be used in every case
 | 
			
		||||
            aiShadingMode eShadingMode;
 | 
			
		||||
 | 
			
		||||
            // vertex buffer
 | 
			
		||||
            IDirect3DVertexBuffer9* piVB;
 | 
			
		||||
 | 
			
		||||
            // index buffer. For partially transparent meshes
 | 
			
		||||
            // created with dynamic usage to be able to update
 | 
			
		||||
            // the buffer contents quickly
 | 
			
		||||
            IDirect3DIndexBuffer9* piIB;
 | 
			
		||||
 | 
			
		||||
            // vertex buffer to be used to draw vertex normals
 | 
			
		||||
            // (vertex normals are generated in every case)
 | 
			
		||||
            IDirect3DVertexBuffer9* piVBNormals;
 | 
			
		||||
 | 
			
		||||
            // shader to be used
 | 
			
		||||
            ID3DXEffect* piEffect;
 | 
			
		||||
            bool bSharedFX;
 | 
			
		||||
 | 
			
		||||
            // material textures
 | 
			
		||||
            IDirect3DTexture9* piDiffuseTexture;
 | 
			
		||||
            IDirect3DTexture9* piSpecularTexture;
 | 
			
		||||
            IDirect3DTexture9* piAmbientTexture;
 | 
			
		||||
            IDirect3DTexture9* piEmissiveTexture;
 | 
			
		||||
            IDirect3DTexture9* piNormalTexture;
 | 
			
		||||
            IDirect3DTexture9* piOpacityTexture;
 | 
			
		||||
            IDirect3DTexture9* piShininessTexture;
 | 
			
		||||
            IDirect3DTexture9* piLightmapTexture;
 | 
			
		||||
 | 
			
		||||
            // material colors
 | 
			
		||||
            D3DXVECTOR4 vDiffuseColor;
 | 
			
		||||
            D3DXVECTOR4 vSpecularColor;
 | 
			
		||||
            D3DXVECTOR4 vAmbientColor;
 | 
			
		||||
            D3DXVECTOR4 vEmissiveColor;
 | 
			
		||||
 | 
			
		||||
            // opacity for the material
 | 
			
		||||
            float fOpacity;
 | 
			
		||||
 | 
			
		||||
            // shininess for the material
 | 
			
		||||
            float fShininess;
 | 
			
		||||
 | 
			
		||||
            // strength of the specular highlight
 | 
			
		||||
            float fSpecularStrength;
 | 
			
		||||
 | 
			
		||||
            // two-sided?
 | 
			
		||||
            bool twosided;
 | 
			
		||||
 | 
			
		||||
            // Stores a pointer to the original normal set of the asset
 | 
			
		||||
            aiVector3D* pvOriginalNormals;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        // One instance per aiMesh in the globally loaded asset
 | 
			
		||||
        MeshHelper** apcMeshes;
 | 
			
		||||
 | 
			
		||||
        // Scene wrapper instance
 | 
			
		||||
        aiScene* pcScene;
 | 
			
		||||
 | 
			
		||||
        // Animation player to animate the scene if necessary
 | 
			
		||||
        SceneAnimator* mAnimator;
 | 
			
		||||
 | 
			
		||||
        // Specifies the normal set to be used
 | 
			
		||||
        unsigned int iNormalSet;
 | 
			
		||||
 | 
			
		||||
        // ------------------------------------------------------------------
 | 
			
		||||
        // set the normal set to be used
 | 
			
		||||
        void SetNormalSet( unsigned int iSet );
 | 
			
		||||
 | 
			
		||||
        // ------------------------------------------------------------------
 | 
			
		||||
        // flip all normal vectors
 | 
			
		||||
        void FlipNormals();
 | 
			
		||||
        void FlipNormalsInt();
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // !! IG
 | 
			
		||||
							
								
								
									
										471
									
								
								thirdparty/assimp/tools/assimp_view/Background.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,471 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2019, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
copyright notice, this list of conditions and the
 | 
			
		||||
following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
copyright notice, this list of conditions and the
 | 
			
		||||
following disclaimer in the documentation and/or other
 | 
			
		||||
materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
contributors may be used to endorse or promote products
 | 
			
		||||
derived from this software without specific prior
 | 
			
		||||
written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "assimp_view.h"
 | 
			
		||||
#include <assimp/StringUtils.h>
 | 
			
		||||
 | 
			
		||||
namespace AssimpView {
 | 
			
		||||
 | 
			
		||||
extern std::string g_szSkyboxShader;
 | 
			
		||||
 | 
			
		||||
// From: U3D build 1256 (src\kernel\graphic\scenegraph\SkyBox.cpp)
 | 
			
		||||
// ------------------------------------------------------------------------------
 | 
			
		||||
/** \brief Vertex structure for the skybox
 | 
			
		||||
*/
 | 
			
		||||
// ------------------------------------------------------------------------------
 | 
			
		||||
struct SkyBoxVertex
 | 
			
		||||
{
 | 
			
		||||
    float x,y,z;
 | 
			
		||||
    float u,v,w;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ------------------------------------------------------------------------------
 | 
			
		||||
/** \brief Vertices for the skybox
 | 
			
		||||
*/
 | 
			
		||||
// ------------------------------------------------------------------------------
 | 
			
		||||
SkyBoxVertex g_cubeVertices_indexed[] =
 | 
			
		||||
{
 | 
			
		||||
    { -1.0f, 1.0f, -1.0f,   -1.0f,1.0f,-1.0f },     // 0
 | 
			
		||||
    { 1.0f, 1.0f,  -1.0f,   1.0f,1.0f,-1.0f },      // 1
 | 
			
		||||
    { -1.0f, -1.0f, -1.0f,  -1.0f,-1.0f,-1.0f },    // 2
 | 
			
		||||
    { 1.0f,-1.0f,-1.0f,      1.0f,-1.0f,-1.0f },    // 3
 | 
			
		||||
    {-1.0f, 1.0f, 1.0f,     -1.0f,1.0f,1.0f },      // 4
 | 
			
		||||
    {-1.0f,-1.0f, 1.0f,     -1.0f,-1.0f,1.0f },     // 5
 | 
			
		||||
    { 1.0f, 1.0f, 1.0f,     1.0f,1.0f,1.0f },       // 6
 | 
			
		||||
    { 1.0f,-1.0f, 1.0f,     1.0f,-1.0f,1.0f }       // 7
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ------------------------------------------------------------------------------
 | 
			
		||||
/** \brief Indices for the skybox
 | 
			
		||||
*/
 | 
			
		||||
// ------------------------------------------------------------------------------
 | 
			
		||||
unsigned short g_cubeIndices[] =
 | 
			
		||||
{
 | 
			
		||||
    0, 1, 2, 3, 2, 1,4, 5, 6,
 | 
			
		||||
    7, 6, 5, 4, 6,  0, 1, 6, 0,
 | 
			
		||||
    5, 2, 7,3, 2, 7, 1, 6, 3,
 | 
			
		||||
    7, 3, 6, 0, 2, 4, 5, 4, 2,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
CBackgroundPainter CBackgroundPainter::s_cInstance;
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CBackgroundPainter::SetColor (D3DCOLOR p_clrNew)
 | 
			
		||||
{
 | 
			
		||||
    if (TEXTURE_CUBE == eMode)
 | 
			
		||||
        RemoveSBDeps();
 | 
			
		||||
 | 
			
		||||
    clrColor = p_clrNew;
 | 
			
		||||
    eMode = SIMPLE_COLOR;
 | 
			
		||||
 | 
			
		||||
    if (pcTexture)
 | 
			
		||||
    {
 | 
			
		||||
        pcTexture->Release();
 | 
			
		||||
        pcTexture = NULL;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CBackgroundPainter::RemoveSBDeps()
 | 
			
		||||
{
 | 
			
		||||
    MODE e = eMode;
 | 
			
		||||
    eMode = SIMPLE_COLOR;
 | 
			
		||||
    if (g_pcAsset && g_pcAsset->pcScene)
 | 
			
		||||
    {
 | 
			
		||||
        for (unsigned int i = 0; i < g_pcAsset->pcScene->mNumMeshes;++i)
 | 
			
		||||
        {
 | 
			
		||||
            if (aiShadingMode_Gouraud != g_pcAsset->apcMeshes[i]->eShadingMode)
 | 
			
		||||
            {
 | 
			
		||||
                CMaterialManager::Instance().DeleteMaterial(g_pcAsset->apcMeshes[i]);
 | 
			
		||||
                CMaterialManager::Instance().CreateMaterial(
 | 
			
		||||
                    g_pcAsset->apcMeshes[i],g_pcAsset->pcScene->mMeshes[i]);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    eMode = e;
 | 
			
		||||
}
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CBackgroundPainter::ResetSB()
 | 
			
		||||
{
 | 
			
		||||
    mMatrix = aiMatrix4x4();
 | 
			
		||||
}
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CBackgroundPainter::SetCubeMapBG (const char* p_szPath)
 | 
			
		||||
{
 | 
			
		||||
    bool bHad = false;
 | 
			
		||||
    if (pcTexture)
 | 
			
		||||
    {
 | 
			
		||||
        pcTexture->Release();
 | 
			
		||||
        pcTexture = NULL;
 | 
			
		||||
        if(TEXTURE_CUBE ==eMode)bHad = true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    eMode = TEXTURE_CUBE;
 | 
			
		||||
 | 
			
		||||
    szPath = std::string( p_szPath );
 | 
			
		||||
 | 
			
		||||
    // ARRRGHH... ugly. TODO: Rewrite this!
 | 
			
		||||
    aiString sz;
 | 
			
		||||
    sz.Set(szPath);
 | 
			
		||||
    CMaterialManager::Instance().FindValidPath(&sz);
 | 
			
		||||
    szPath = std::string( sz.data );
 | 
			
		||||
 | 
			
		||||
    // now recreate all native resources
 | 
			
		||||
    RecreateNativeResource();
 | 
			
		||||
 | 
			
		||||
    if (SIMPLE_COLOR != this->eMode)
 | 
			
		||||
    {
 | 
			
		||||
        // this influences all material with specular components
 | 
			
		||||
        if (!bHad)
 | 
			
		||||
        {
 | 
			
		||||
            if (g_pcAsset && g_pcAsset->pcScene)
 | 
			
		||||
            {
 | 
			
		||||
                for (unsigned int i = 0; i < g_pcAsset->pcScene->mNumMeshes;++i)
 | 
			
		||||
                {
 | 
			
		||||
                    if (aiShadingMode_Phong == g_pcAsset->apcMeshes[i]->eShadingMode)
 | 
			
		||||
                    {
 | 
			
		||||
                        CMaterialManager::Instance().DeleteMaterial(g_pcAsset->apcMeshes[i]);
 | 
			
		||||
                        CMaterialManager::Instance().CreateMaterial(
 | 
			
		||||
                            g_pcAsset->apcMeshes[i],g_pcAsset->pcScene->mMeshes[i]);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            if (g_pcAsset && g_pcAsset->pcScene)
 | 
			
		||||
            {
 | 
			
		||||
                for (unsigned int i = 0; i < g_pcAsset->pcScene->mNumMeshes;++i)
 | 
			
		||||
                {
 | 
			
		||||
                    if (aiShadingMode_Phong == g_pcAsset->apcMeshes[i]->eShadingMode)
 | 
			
		||||
                    {
 | 
			
		||||
                        g_pcAsset->apcMeshes[i]->piEffect->SetTexture(
 | 
			
		||||
                            "lw_tex_envmap",CBackgroundPainter::Instance().GetTexture());
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CBackgroundPainter::RotateSB(const aiMatrix4x4* pm)
 | 
			
		||||
{
 | 
			
		||||
    this->mMatrix = mMatrix * (*pm);
 | 
			
		||||
}
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CBackgroundPainter::SetTextureBG (const char* p_szPath)
 | 
			
		||||
{
 | 
			
		||||
    if (TEXTURE_CUBE == this->eMode)this->RemoveSBDeps();
 | 
			
		||||
 | 
			
		||||
    if (pcTexture)
 | 
			
		||||
    {
 | 
			
		||||
        pcTexture->Release();
 | 
			
		||||
        pcTexture = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    eMode = TEXTURE_2D;
 | 
			
		||||
    szPath = std::string( p_szPath );
 | 
			
		||||
 | 
			
		||||
    // ARRRGHH... ugly. TODO: Rewrite this!
 | 
			
		||||
    aiString sz;
 | 
			
		||||
    sz.Set(szPath);
 | 
			
		||||
    CMaterialManager::Instance().FindValidPath(&sz);
 | 
			
		||||
    szPath = std::string( sz.data );
 | 
			
		||||
 | 
			
		||||
    // now recreate all native resources
 | 
			
		||||
    RecreateNativeResource();
 | 
			
		||||
}
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CBackgroundPainter::OnPreRender()
 | 
			
		||||
{
 | 
			
		||||
    if (SIMPLE_COLOR != eMode)
 | 
			
		||||
    {
 | 
			
		||||
        // clear the z-buffer only (in wireframe mode we must also clear
 | 
			
		||||
        // the color buffer )
 | 
			
		||||
        if (g_sOptions.eDrawMode == RenderOptions::WIREFRAME)
 | 
			
		||||
        {
 | 
			
		||||
            g_piDevice->Clear(0,NULL,D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET,
 | 
			
		||||
                D3DCOLOR_ARGB(0xff,100,100,100),1.0f,0);
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            g_piDevice->Clear(0,NULL,D3DCLEAR_ZBUFFER,0,1.0f,0);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (TEXTURE_2D == eMode)
 | 
			
		||||
        {
 | 
			
		||||
            RECT sRect;
 | 
			
		||||
            GetWindowRect(GetDlgItem(g_hDlg,IDC_RT),&sRect);
 | 
			
		||||
            sRect.right -= sRect.left;
 | 
			
		||||
            sRect.bottom -= sRect.top;
 | 
			
		||||
 | 
			
		||||
            struct SVertex
 | 
			
		||||
            {
 | 
			
		||||
                float x,y,z,w,u,v;
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            UINT dw;
 | 
			
		||||
            this->piSkyBoxEffect->Begin(&dw,0);
 | 
			
		||||
            this->piSkyBoxEffect->BeginPass(0);
 | 
			
		||||
 | 
			
		||||
            SVertex as[4];
 | 
			
		||||
            as[1].x = 0.0f;
 | 
			
		||||
            as[1].y = 0.0f;
 | 
			
		||||
            as[1].z = 0.2f;
 | 
			
		||||
            as[1].w = 1.0f;
 | 
			
		||||
            as[1].u = 0.0f;
 | 
			
		||||
            as[1].v = 0.0f;
 | 
			
		||||
 | 
			
		||||
            as[3].x = (float)sRect.right;
 | 
			
		||||
            as[3].y = 0.0f;
 | 
			
		||||
            as[3].z = 0.2f;
 | 
			
		||||
            as[3].w = 1.0f;
 | 
			
		||||
            as[3].u = 1.0f;
 | 
			
		||||
            as[3].v = 0.0f;
 | 
			
		||||
 | 
			
		||||
            as[0].x = 0.0f;
 | 
			
		||||
            as[0].y = (float)sRect.bottom;
 | 
			
		||||
            as[0].z = 0.2f;
 | 
			
		||||
            as[0].w = 1.0f;
 | 
			
		||||
            as[0].u = 0.0f;
 | 
			
		||||
            as[0].v = 1.0f;
 | 
			
		||||
 | 
			
		||||
            as[2].x = (float)sRect.right;
 | 
			
		||||
            as[2].y = (float)sRect.bottom;
 | 
			
		||||
            as[2].z = 0.2f;
 | 
			
		||||
            as[2].w = 1.0f;
 | 
			
		||||
            as[2].u = 1.0f;
 | 
			
		||||
            as[2].v = 1.0f;
 | 
			
		||||
 | 
			
		||||
            as[0].x -= 0.5f;as[1].x -= 0.5f;as[2].x -= 0.5f;as[3].x -= 0.5f;
 | 
			
		||||
            as[0].y -= 0.5f;as[1].y -= 0.5f;as[2].y -= 0.5f;as[3].y -= 0.5f;
 | 
			
		||||
 | 
			
		||||
            DWORD dw2;g_piDevice->GetFVF(&dw2);
 | 
			
		||||
            g_piDevice->SetFVF(D3DFVF_XYZRHW | D3DFVF_TEX1);
 | 
			
		||||
 | 
			
		||||
            g_piDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,2,
 | 
			
		||||
                &as,sizeof(SVertex));
 | 
			
		||||
 | 
			
		||||
            piSkyBoxEffect->EndPass();
 | 
			
		||||
            piSkyBoxEffect->End();
 | 
			
		||||
 | 
			
		||||
            g_piDevice->SetFVF(dw2);
 | 
			
		||||
        }
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    // clear both the render target and the z-buffer
 | 
			
		||||
    g_piDevice->Clear(0,NULL,D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
 | 
			
		||||
        clrColor,1.0f,0);
 | 
			
		||||
}
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CBackgroundPainter::OnPostRender()
 | 
			
		||||
{
 | 
			
		||||
    if (TEXTURE_CUBE == eMode)
 | 
			
		||||
    {
 | 
			
		||||
        aiMatrix4x4 pcProj;
 | 
			
		||||
        GetProjectionMatrix(pcProj);
 | 
			
		||||
 | 
			
		||||
        aiMatrix4x4 pcCam;
 | 
			
		||||
        aiVector3D vPos = GetCameraMatrix(pcCam);
 | 
			
		||||
 | 
			
		||||
        aiMatrix4x4 aiMe;
 | 
			
		||||
        aiMe[3][0] = vPos.x;
 | 
			
		||||
        aiMe[3][1] = vPos.y;
 | 
			
		||||
        aiMe[3][2] = vPos.z;
 | 
			
		||||
        aiMe = mMatrix * aiMe;
 | 
			
		||||
 | 
			
		||||
        pcProj = (aiMe * pcCam) * pcProj;
 | 
			
		||||
 | 
			
		||||
        piSkyBoxEffect->SetMatrix("WorldViewProjection",
 | 
			
		||||
            (const D3DXMATRIX*)&pcProj);
 | 
			
		||||
 | 
			
		||||
        UINT dwPasses;
 | 
			
		||||
        piSkyBoxEffect->Begin(&dwPasses,0);
 | 
			
		||||
        piSkyBoxEffect->BeginPass(0);
 | 
			
		||||
 | 
			
		||||
        DWORD dw2;
 | 
			
		||||
        g_piDevice->GetFVF(&dw2);
 | 
			
		||||
        g_piDevice->SetFVF(D3DFVF_XYZ | D3DFVF_TEX1 | D3DFVF_TEXCOORDSIZE3(0));
 | 
			
		||||
 | 
			
		||||
        g_piDevice->DrawIndexedPrimitiveUP(
 | 
			
		||||
            D3DPT_TRIANGLELIST,0,8,12,g_cubeIndices,D3DFMT_INDEX16,
 | 
			
		||||
            g_cubeVertices_indexed,sizeof(SkyBoxVertex));
 | 
			
		||||
 | 
			
		||||
        g_piDevice->SetFVF(dw2);
 | 
			
		||||
 | 
			
		||||
        piSkyBoxEffect->EndPass();
 | 
			
		||||
        piSkyBoxEffect->End();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CBackgroundPainter::ReleaseNativeResource()
 | 
			
		||||
{
 | 
			
		||||
    if ( piSkyBoxEffect)
 | 
			
		||||
    {
 | 
			
		||||
        piSkyBoxEffect->Release();
 | 
			
		||||
        piSkyBoxEffect = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    if (pcTexture)
 | 
			
		||||
    {
 | 
			
		||||
        pcTexture->Release();
 | 
			
		||||
        pcTexture = NULL;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CBackgroundPainter::RecreateNativeResource()
 | 
			
		||||
{
 | 
			
		||||
    if (SIMPLE_COLOR == eMode)return;
 | 
			
		||||
    if (TEXTURE_CUBE == eMode)
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
        // many skyboxes are 16bit FP format which isn't supported
 | 
			
		||||
        // with bilinear filtering on older cards
 | 
			
		||||
        D3DFORMAT eFmt = D3DFMT_UNKNOWN;
 | 
			
		||||
        if(FAILED(g_piD3D->CheckDeviceFormat(0,D3DDEVTYPE_HAL,
 | 
			
		||||
            D3DFMT_X8R8G8B8,D3DUSAGE_QUERY_FILTER,D3DRTYPE_CUBETEXTURE,D3DFMT_A16B16G16R16F)))
 | 
			
		||||
        {
 | 
			
		||||
            eFmt = D3DFMT_A8R8G8B8;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (FAILED(D3DXCreateCubeTextureFromFileEx(
 | 
			
		||||
            g_piDevice,
 | 
			
		||||
            szPath.c_str(),
 | 
			
		||||
            D3DX_DEFAULT,
 | 
			
		||||
            0,
 | 
			
		||||
            0,
 | 
			
		||||
            eFmt,
 | 
			
		||||
            D3DPOOL_MANAGED,
 | 
			
		||||
            D3DX_DEFAULT,
 | 
			
		||||
            D3DX_DEFAULT,
 | 
			
		||||
            0,
 | 
			
		||||
            NULL,
 | 
			
		||||
            NULL,
 | 
			
		||||
            (IDirect3DCubeTexture9**)&pcTexture)))
 | 
			
		||||
        {
 | 
			
		||||
            const char* szEnd = strrchr(szPath.c_str(),'\\');
 | 
			
		||||
            if (!szEnd)szEnd = strrchr(szPath.c_str(),'/');
 | 
			
		||||
            if (!szEnd)szEnd = szPath.c_str()-1;
 | 
			
		||||
 | 
			
		||||
            char szTemp[1024];
 | 
			
		||||
			ai_snprintf(szTemp,1024,"[ERROR] Unable to load background cubemap %s",szEnd+1);
 | 
			
		||||
 | 
			
		||||
            CLogDisplay::Instance().AddEntry(szTemp,
 | 
			
		||||
                D3DCOLOR_ARGB(0xFF,0xFF,0,0));
 | 
			
		||||
 | 
			
		||||
            eMode = SIMPLE_COLOR;
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        else CLogDisplay::Instance().AddEntry("[OK] The skybox has been imported successfully",
 | 
			
		||||
            D3DCOLOR_ARGB(0xFF,0,0xFF,0));
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        if (FAILED(D3DXCreateTextureFromFileEx(
 | 
			
		||||
            g_piDevice,
 | 
			
		||||
            szPath.c_str(),
 | 
			
		||||
            D3DX_DEFAULT,
 | 
			
		||||
            D3DX_DEFAULT,
 | 
			
		||||
            0,
 | 
			
		||||
            0,
 | 
			
		||||
            D3DFMT_A8R8G8B8,
 | 
			
		||||
            D3DPOOL_MANAGED,
 | 
			
		||||
            D3DX_DEFAULT,
 | 
			
		||||
            D3DX_DEFAULT,
 | 
			
		||||
            0,
 | 
			
		||||
            NULL,
 | 
			
		||||
            NULL,
 | 
			
		||||
            (IDirect3DTexture9**)&pcTexture)))
 | 
			
		||||
        {
 | 
			
		||||
            const char* szEnd = strrchr(szPath.c_str(),'\\');
 | 
			
		||||
            if (!szEnd)szEnd = strrchr(szPath.c_str(),'/');
 | 
			
		||||
            if (!szEnd)szEnd = szPath.c_str()-1;
 | 
			
		||||
 | 
			
		||||
            char szTemp[1024];
 | 
			
		||||
			ai_snprintf(szTemp,1024,"[ERROR] Unable to load background texture %s",szEnd+1);
 | 
			
		||||
 | 
			
		||||
            CLogDisplay::Instance().AddEntry(szTemp,
 | 
			
		||||
                D3DCOLOR_ARGB(0xFF,0xFF,0,0));
 | 
			
		||||
 | 
			
		||||
            eMode = SIMPLE_COLOR;
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        else CLogDisplay::Instance().AddEntry("[OK] The background texture has been imported successfully",
 | 
			
		||||
            D3DCOLOR_ARGB(0xFF,0,0xFF,0));
 | 
			
		||||
    }
 | 
			
		||||
    if (!piSkyBoxEffect)
 | 
			
		||||
    {
 | 
			
		||||
        ID3DXBuffer* piBuffer = NULL;
 | 
			
		||||
        if(FAILED( D3DXCreateEffect(
 | 
			
		||||
            g_piDevice,
 | 
			
		||||
            g_szSkyboxShader.c_str(),
 | 
			
		||||
            (UINT)g_szSkyboxShader.length(),
 | 
			
		||||
            NULL,
 | 
			
		||||
            NULL,
 | 
			
		||||
            AI_SHADER_COMPILE_FLAGS,
 | 
			
		||||
            NULL,
 | 
			
		||||
            &piSkyBoxEffect,&piBuffer)))
 | 
			
		||||
        {
 | 
			
		||||
            // failed to compile the shader
 | 
			
		||||
            if( piBuffer) {
 | 
			
		||||
                MessageBox(g_hDlg,(LPCSTR)piBuffer->GetBufferPointer(),"HLSL",MB_OK);
 | 
			
		||||
                piBuffer->Release();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            CLogDisplay::Instance().AddEntry("[ERROR] Unable to compile skybox shader",
 | 
			
		||||
                D3DCOLOR_ARGB(0xFF,0xFF,0,0));
 | 
			
		||||
            eMode = SIMPLE_COLOR;
 | 
			
		||||
            return ;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    // commit the correct textures to the shader
 | 
			
		||||
    if (TEXTURE_CUBE == eMode)
 | 
			
		||||
    {
 | 
			
		||||
        piSkyBoxEffect->SetTexture("lw_tex_envmap",pcTexture);
 | 
			
		||||
        piSkyBoxEffect->SetTechnique("RenderSkyBox");
 | 
			
		||||
    }
 | 
			
		||||
    else if (TEXTURE_2D == eMode)
 | 
			
		||||
    {
 | 
			
		||||
        piSkyBoxEffect->SetTexture("TEXTURE_2D",pcTexture);
 | 
			
		||||
        piSkyBoxEffect->SetTechnique("RenderImage2D");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										128
									
								
								thirdparty/assimp/tools/assimp_view/Background.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,128 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2015, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
namespace AssimpView
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    class CBackgroundPainter
 | 
			
		||||
    {
 | 
			
		||||
        CBackgroundPainter()
 | 
			
		||||
            :
 | 
			
		||||
            clrColor( D3DCOLOR_ARGB( 0xFF, 100, 100, 100 ) ),
 | 
			
		||||
            pcTexture( NULL ),
 | 
			
		||||
            piSkyBoxEffect( NULL ),
 | 
			
		||||
            eMode( SIMPLE_COLOR )
 | 
			
		||||
        {}
 | 
			
		||||
 | 
			
		||||
    public:
 | 
			
		||||
 | 
			
		||||
        // Supported background draw modi
 | 
			
		||||
        enum MODE { SIMPLE_COLOR, TEXTURE_2D, TEXTURE_CUBE };
 | 
			
		||||
 | 
			
		||||
        // Singleton accessors
 | 
			
		||||
        static CBackgroundPainter s_cInstance;
 | 
			
		||||
        inline static CBackgroundPainter& Instance()
 | 
			
		||||
        {
 | 
			
		||||
            return s_cInstance;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // set the current background color
 | 
			
		||||
        // (this removes any textures loaded)
 | 
			
		||||
        void SetColor( D3DCOLOR p_clrNew );
 | 
			
		||||
 | 
			
		||||
        // Setup a cubemap/a 2d texture as background
 | 
			
		||||
        void SetCubeMapBG( const char* p_szPath );
 | 
			
		||||
        void SetTextureBG( const char* p_szPath );
 | 
			
		||||
 | 
			
		||||
        // Called by the render loop
 | 
			
		||||
        void OnPreRender();
 | 
			
		||||
        void OnPostRender();
 | 
			
		||||
 | 
			
		||||
        // Release any native resources associated with the instance
 | 
			
		||||
        void ReleaseNativeResource();
 | 
			
		||||
 | 
			
		||||
        // Recreate any native resources associated with the instance
 | 
			
		||||
        void RecreateNativeResource();
 | 
			
		||||
 | 
			
		||||
        // Rotate the skybox
 | 
			
		||||
        void RotateSB( const aiMatrix4x4* pm );
 | 
			
		||||
 | 
			
		||||
        // Reset the state of the skybox
 | 
			
		||||
        void ResetSB();
 | 
			
		||||
 | 
			
		||||
        inline MODE GetMode() const
 | 
			
		||||
        {
 | 
			
		||||
            return this->eMode;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        inline IDirect3DBaseTexture9* GetTexture()
 | 
			
		||||
        {
 | 
			
		||||
            return this->pcTexture;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        inline ID3DXBaseEffect* GetEffect()
 | 
			
		||||
        {
 | 
			
		||||
            return this->piSkyBoxEffect;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
 | 
			
		||||
        void RemoveSBDeps();
 | 
			
		||||
 | 
			
		||||
        // current background color
 | 
			
		||||
        D3DCOLOR clrColor;
 | 
			
		||||
 | 
			
		||||
        // current background texture
 | 
			
		||||
        IDirect3DBaseTexture9* pcTexture;
 | 
			
		||||
        ID3DXEffect* piSkyBoxEffect;
 | 
			
		||||
 | 
			
		||||
        // current background mode
 | 
			
		||||
        MODE eMode;
 | 
			
		||||
 | 
			
		||||
        // path to the texture
 | 
			
		||||
        std::string szPath;
 | 
			
		||||
 | 
			
		||||
        // transformation matrix for the skybox
 | 
			
		||||
        aiMatrix4x4 mMatrix;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										107
									
								
								thirdparty/assimp/tools/assimp_view/CMakeLists.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,107 @@
 | 
			
		||||
# Open Asset Import Library (assimp)
 | 
			
		||||
# ----------------------------------------------------------------------
 | 
			
		||||
# 
 | 
			
		||||
# Copyright (c) 2006-2019, assimp team
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# Redistribution and use of this software in source and binary forms,
 | 
			
		||||
# with or without modification, are permitted provided that the
 | 
			
		||||
# following conditions are met:
 | 
			
		||||
#
 | 
			
		||||
# * Redistributions of source code must retain the above
 | 
			
		||||
#   copyright notice, this list of conditions and the
 | 
			
		||||
#   following disclaimer.
 | 
			
		||||
#
 | 
			
		||||
# * Redistributions in binary form must reproduce the above
 | 
			
		||||
#   copyright notice, this list of conditions and the
 | 
			
		||||
#   following disclaimer in the documentation and/or other
 | 
			
		||||
#   materials provided with the distribution.
 | 
			
		||||
#
 | 
			
		||||
# * Neither the name of the assimp team, nor the names of its
 | 
			
		||||
#   contributors may be used to endorse or promote products
 | 
			
		||||
#   derived from this software without specific prior
 | 
			
		||||
#   written permission of the assimp team.
 | 
			
		||||
#
 | 
			
		||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
#
 | 
			
		||||
#----------------------------------------------------------------------
 | 
			
		||||
cmake_minimum_required( VERSION 2.6 )
 | 
			
		||||
 | 
			
		||||
FIND_PACKAGE(DirectX REQUIRED)
 | 
			
		||||
 | 
			
		||||
INCLUDE_DIRECTORIES (
 | 
			
		||||
  ${Assimp_SOURCE_DIR}/include
 | 
			
		||||
  ${Assimp_SOURCE_DIR}/code
 | 
			
		||||
  ${DirectX_INCLUDE_DIR}
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# Make sure the linker can find the Assimp library once it is built.
 | 
			
		||||
LINK_DIRECTORIES (${Assimp_BINARY_DIR} ${AssetImporter_BINARY_DIR}/lib)
 | 
			
		||||
 | 
			
		||||
ADD_EXECUTABLE(  assimp_viewer WIN32
 | 
			
		||||
  AnimEvaluator.cpp
 | 
			
		||||
  Background.cpp
 | 
			
		||||
  Display.cpp
 | 
			
		||||
  HelpDialog.cpp
 | 
			
		||||
  Input.cpp
 | 
			
		||||
  LogDisplay.cpp
 | 
			
		||||
  LogWindow.cpp
 | 
			
		||||
  Material.cpp
 | 
			
		||||
  MeshRenderer.cpp
 | 
			
		||||
  MessageProc.cpp
 | 
			
		||||
  Normals.cpp
 | 
			
		||||
  SceneAnimator.cpp
 | 
			
		||||
  Shaders.cpp
 | 
			
		||||
  assimp_view.h
 | 
			
		||||
  assimp_view.cpp
 | 
			
		||||
  stdafx.cpp
 | 
			
		||||
  assimp_view.rc
 | 
			
		||||
  banner.bmp
 | 
			
		||||
  banner_pure.bmp
 | 
			
		||||
  base_anim.bmp
 | 
			
		||||
  base_display.bmp
 | 
			
		||||
  base_inter.bmp
 | 
			
		||||
  base_rendering.bmp
 | 
			
		||||
  base_stats.bmp
 | 
			
		||||
  fx.bmp
 | 
			
		||||
  n.bmp
 | 
			
		||||
  root.bmp
 | 
			
		||||
  tx.bmp
 | 
			
		||||
  txi.bmp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
SET_PROPERTY(TARGET assimp_viewer PROPERTY DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
IF ( MSVC )
 | 
			
		||||
  ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS )
 | 
			
		||||
  ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS )
 | 
			
		||||
  # assimp_viewer is ANSI (MBCS) throughout
 | 
			
		||||
  REMOVE_DEFINITIONS( -DUNICODE -D_UNICODE )
 | 
			
		||||
ENDIF ( MSVC )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
ADD_CUSTOM_COMMAND(TARGET assimp_viewer
 | 
			
		||||
  PRE_BUILD
 | 
			
		||||
  COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:assimp> $<TARGET_FILE_DIR:assimp_viewer>
 | 
			
		||||
  MAIN_DEPENDENCY assimp)
 | 
			
		||||
 | 
			
		||||
# Link the executable to the assimp + dx libs.
 | 
			
		||||
TARGET_LINK_LIBRARIES ( assimp_viewer assimp ${DirectX_LIBRARY} ${DirectX_D3DX9_LIBRARY} comctl32.lib winmm.lib )
 | 
			
		||||
 | 
			
		||||
INSTALL( TARGETS assimp_viewer
 | 
			
		||||
  DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-dev
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										85
									
								
								thirdparty/assimp/tools/assimp_view/Camera.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,85 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2012, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#if (!defined AV_CAMERA_H_INCLUDED)
 | 
			
		||||
#define AV_CAMERA_H_INCLUDED
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
/** \brief Camera class
 | 
			
		||||
*/
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
class Camera
 | 
			
		||||
    {
 | 
			
		||||
    public:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        Camera ()
 | 
			
		||||
            :
 | 
			
		||||
 | 
			
		||||
            vPos(0.0f,0.0f,-10.0f),
 | 
			
		||||
            vUp(0.0f,1.0f,0.0f),
 | 
			
		||||
            vLookAt(0.0f,0.0f,1.0f),
 | 
			
		||||
            vRight(0.0f,1.0f,0.0f)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
    public:
 | 
			
		||||
 | 
			
		||||
        // position of the camera
 | 
			
		||||
        aiVector3D vPos;
 | 
			
		||||
 | 
			
		||||
        // up-vector of the camera
 | 
			
		||||
        aiVector3D vUp;
 | 
			
		||||
 | 
			
		||||
        // camera's looking point is vPos + vLookAt
 | 
			
		||||
        aiVector3D vLookAt;
 | 
			
		||||
 | 
			
		||||
        // right vector of the camera
 | 
			
		||||
        aiVector3D vRight;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // Equation
 | 
			
		||||
        // (vRight ^ vUp) - vLookAt == 0
 | 
			
		||||
        // needn't apply
 | 
			
		||||
 | 
			
		||||
    } ;
 | 
			
		||||
 | 
			
		||||
#endif // !!IG
 | 
			
		||||
							
								
								
									
										2302
									
								
								thirdparty/assimp/tools/assimp_view/Display.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										542
									
								
								thirdparty/assimp/tools/assimp_view/Display.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,542 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2012, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#if (!defined AV_DISPLAY_H_INCLUDED)
 | 
			
		||||
#define AV_DISPLAY_H_INCLUDE
 | 
			
		||||
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
#include <shellapi.h>
 | 
			
		||||
#include <commctrl.h>
 | 
			
		||||
 | 
			
		||||
// see CDisplay::m_aiImageList
 | 
			
		||||
#define AI_VIEW_IMGLIST_NODE            0x0
 | 
			
		||||
#define AI_VIEW_IMGLIST_MATERIAL        0x1
 | 
			
		||||
#define AI_VIEW_IMGLIST_TEXTURE         0x2
 | 
			
		||||
#define AI_VIEW_IMGLIST_TEXTURE_INVALID 0x3
 | 
			
		||||
#define AI_VIEW_IMGLIST_MODEL           0x4
 | 
			
		||||
 | 
			
		||||
namespace AssimpView
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    //-------------------------------------------------------------------------------
 | 
			
		||||
    /* Corresponds to the "Display" combobox in the UI
 | 
			
		||||
    */
 | 
			
		||||
    //-------------------------------------------------------------------------------
 | 
			
		||||
    class CDisplay
 | 
			
		||||
    {
 | 
			
		||||
    private:
 | 
			
		||||
 | 
			
		||||
        // helper class
 | 
			
		||||
        struct Info
 | 
			
		||||
        {
 | 
			
		||||
            Info( D3DXVECTOR4* p1,
 | 
			
		||||
                AssetHelper::MeshHelper* p2,
 | 
			
		||||
                const char* p3 )
 | 
			
		||||
                : pclrColor( p1 ), pMesh( p2 ), szShaderParam( p3 ) {}
 | 
			
		||||
 | 
			
		||||
            D3DXVECTOR4* pclrColor;
 | 
			
		||||
            AssetHelper::MeshHelper* pMesh;
 | 
			
		||||
            const char* szShaderParam;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        // default constructor
 | 
			
		||||
        CDisplay()
 | 
			
		||||
            : m_iViewMode( VIEWMODE_FULL ),
 | 
			
		||||
            m_pcCurrentTexture( NULL ),
 | 
			
		||||
            m_pcCurrentNode( NULL ),
 | 
			
		||||
            m_pcCurrentMaterial( NULL ),
 | 
			
		||||
            m_hImageList( NULL ),
 | 
			
		||||
            m_hRoot( NULL ),
 | 
			
		||||
            m_fTextureZoom( 1000.0f )
 | 
			
		||||
        {
 | 
			
		||||
            this->m_aiImageList[ 0 ] = 0;
 | 
			
		||||
            this->m_aiImageList[ 1 ] = 1;
 | 
			
		||||
            this->m_aiImageList[ 2 ] = 2;
 | 
			
		||||
            this->m_aiImageList[ 3 ] = 3;
 | 
			
		||||
            this->m_aiImageList[ 4 ] = 4;
 | 
			
		||||
 | 
			
		||||
            this->m_avCheckerColors[ 0 ].x = this->m_avCheckerColors[ 0 ].y = this->m_avCheckerColors[ 0 ].z = 0.4f;
 | 
			
		||||
            this->m_avCheckerColors[ 1 ].x = this->m_avCheckerColors[ 1 ].y = this->m_avCheckerColors[ 1 ].z = 0.6f;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        enum
 | 
			
		||||
        {
 | 
			
		||||
            // the full model is displayed
 | 
			
		||||
            VIEWMODE_FULL,
 | 
			
		||||
 | 
			
		||||
            // a material is displayed on a simple spjere as model
 | 
			
		||||
            VIEWMODE_MATERIAL,
 | 
			
		||||
 | 
			
		||||
            // a texture with an UV set mapped on it is displayed
 | 
			
		||||
            VIEWMODE_TEXTURE,
 | 
			
		||||
 | 
			
		||||
            // a single node in the scenegraph is displayed
 | 
			
		||||
            VIEWMODE_NODE,
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // represents a texture in the tree view
 | 
			
		||||
        struct TextureInfo
 | 
			
		||||
        {
 | 
			
		||||
            // texture info
 | 
			
		||||
            IDirect3DTexture9** piTexture;
 | 
			
		||||
 | 
			
		||||
            // Blend factor of the texture
 | 
			
		||||
            float fBlend;
 | 
			
		||||
 | 
			
		||||
            // blend operation for the texture
 | 
			
		||||
            aiTextureOp eOp;
 | 
			
		||||
 | 
			
		||||
            // UV index for the texture
 | 
			
		||||
            unsigned int iUV;
 | 
			
		||||
 | 
			
		||||
            // Associated tree item
 | 
			
		||||
            HTREEITEM hTreeItem;
 | 
			
		||||
 | 
			
		||||
            // Original path to the texture
 | 
			
		||||
            std::string szPath;
 | 
			
		||||
 | 
			
		||||
            // index of the corresponding material
 | 
			
		||||
            unsigned int iMatIndex;
 | 
			
		||||
 | 
			
		||||
            // type of the texture
 | 
			
		||||
            unsigned int iType;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // represents a node in the tree view
 | 
			
		||||
        struct NodeInfo
 | 
			
		||||
        {
 | 
			
		||||
            // node object
 | 
			
		||||
            aiNode* psNode;
 | 
			
		||||
 | 
			
		||||
            // corresponding tree view item
 | 
			
		||||
            HTREEITEM hTreeItem;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // represents a mesh in the tree view
 | 
			
		||||
        struct MeshInfo
 | 
			
		||||
        {
 | 
			
		||||
            // the mesh object
 | 
			
		||||
            aiMesh* psMesh;
 | 
			
		||||
 | 
			
		||||
            // corresponding tree view item
 | 
			
		||||
            HTREEITEM hTreeItem;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // represents a material in the tree view
 | 
			
		||||
        struct MaterialInfo
 | 
			
		||||
        {
 | 
			
		||||
            // material index
 | 
			
		||||
            unsigned int iIndex;
 | 
			
		||||
 | 
			
		||||
            // material object
 | 
			
		||||
            aiMaterial* psMaterial;
 | 
			
		||||
 | 
			
		||||
            // ID3DXEffect interface
 | 
			
		||||
            ID3DXEffect* piEffect;
 | 
			
		||||
 | 
			
		||||
            // corresponding tree view item
 | 
			
		||||
            HTREEITEM hTreeItem;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Singleton accessors
 | 
			
		||||
        static CDisplay s_cInstance;
 | 
			
		||||
        inline static CDisplay& Instance()
 | 
			
		||||
        {
 | 
			
		||||
            return s_cInstance;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Called during the render loop. Renders the scene (including the
 | 
			
		||||
        // HUD etc) in the current view mode
 | 
			
		||||
        int OnRender();
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // called when the user selects another item in the "Display" tree
 | 
			
		||||
        // view the method determines the new view mode and performs all
 | 
			
		||||
        // required operations
 | 
			
		||||
        // \param p_hTreeItem Selected tree view item
 | 
			
		||||
        int OnSetup( HTREEITEM p_hTreeItem );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Variant 1: Render the full scene with the asset
 | 
			
		||||
        int RenderFullScene();
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Variant 2: Render only a part of the scene. One node to
 | 
			
		||||
        // be exact
 | 
			
		||||
        int RenderScenePart();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Variant 3: Render a large sphere and map a given material on it
 | 
			
		||||
        int RenderMaterialView();
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Variant 4: Render a flat plane, map a texture on it and
 | 
			
		||||
        // display the UV wire on it
 | 
			
		||||
        int RenderTextureView();
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Fill the UI combobox with a list of all supported view modi
 | 
			
		||||
        //
 | 
			
		||||
        // The display modes are added in order
 | 
			
		||||
        int FillDisplayList( void );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Add a material and all sub textures to the display mode list
 | 
			
		||||
        // hRoot - Handle to the root of the tree view
 | 
			
		||||
        // iIndex - Material index
 | 
			
		||||
        int AddMaterialToDisplayList( HTREEITEM hRoot,
 | 
			
		||||
            unsigned int iIndex );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Add a texture to the display list
 | 
			
		||||
        // pcMat - material containing the texture
 | 
			
		||||
        // hTexture - Handle to the material tree item
 | 
			
		||||
        // szPath - Path to the texture
 | 
			
		||||
        // iUVIndex - UV index to be used for the texture
 | 
			
		||||
        // fBlendFactor - Blend factor to be used for the texture
 | 
			
		||||
        // eTextureOp - texture operation to be used for the texture
 | 
			
		||||
        int AddTextureToDisplayList( unsigned int iType,
 | 
			
		||||
            unsigned int iIndex,
 | 
			
		||||
            const aiString* szPath,
 | 
			
		||||
            HTREEITEM hFX,
 | 
			
		||||
            unsigned int iUVIndex = 0,
 | 
			
		||||
            const float fBlendFactor = 0.0f,
 | 
			
		||||
            aiTextureOp eTextureOp = aiTextureOp_Multiply,
 | 
			
		||||
            unsigned int iMesh = 0 );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Add a node to the display list
 | 
			
		||||
        // Recusrivly adds all subnodes as well
 | 
			
		||||
        // iIndex - Index of the node in the parent's child list
 | 
			
		||||
        // iDepth - Current depth of the node
 | 
			
		||||
        // pcNode - Node object
 | 
			
		||||
        // hRoot - Parent tree view node
 | 
			
		||||
        int AddNodeToDisplayList(
 | 
			
		||||
            unsigned int iIndex,
 | 
			
		||||
            unsigned int iDepth,
 | 
			
		||||
            aiNode* pcNode,
 | 
			
		||||
            HTREEITEM hRoot );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Add a mesh to the display list
 | 
			
		||||
        // iIndex - Index of the mesh in the scene's mesh list
 | 
			
		||||
        // hRoot - Parent tree view node
 | 
			
		||||
        int AddMeshToDisplayList(
 | 
			
		||||
            unsigned int iIndex,
 | 
			
		||||
            HTREEITEM hRoot );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Load the image list for the tree view item
 | 
			
		||||
        int LoadImageList( void );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Expand all nodes in the tree
 | 
			
		||||
        int ExpandTree();
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Fill the UI combobox with a list of all supported animations
 | 
			
		||||
        // The animations are added in order
 | 
			
		||||
        int FillAnimList( void );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Clear the combox box containing the list of animations
 | 
			
		||||
        int ClearAnimList( void );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Clear the combox box containing the list of scenegraph items
 | 
			
		||||
        int ClearDisplayList( void );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Fill in the default statistics
 | 
			
		||||
        int FillDefaultStatistics( void );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Called by LoadAsset()
 | 
			
		||||
        // reset the class instance to the default values
 | 
			
		||||
        int Reset( void );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Replace the texture that is current selected with
 | 
			
		||||
        // a new texture
 | 
			
		||||
        int ReplaceCurrentTexture( const char* szPath );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Display the context menu (if there) for the specified tree item
 | 
			
		||||
        // hItem Valid tree view item handle
 | 
			
		||||
        int ShowTreeViewContextMenu( HTREEITEM hItem );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Event handling for pop-up menus displayed by th tree view
 | 
			
		||||
        int HandleTreeViewPopup( WPARAM wParam, LPARAM lParam );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Enable animation-related parts of the UI
 | 
			
		||||
        int EnableAnimTools( BOOL hm );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // setter for m_iViewMode
 | 
			
		||||
        inline void SetViewMode( unsigned int p_iNew )
 | 
			
		||||
        {
 | 
			
		||||
            this->m_iViewMode = p_iNew;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // getter for m_iViewMode
 | 
			
		||||
        inline unsigned int GetViewMode()
 | 
			
		||||
        {
 | 
			
		||||
            return m_iViewMode;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // change the texture view's zoom factor
 | 
			
		||||
        inline void SetTextureViewZoom( float f )
 | 
			
		||||
        {
 | 
			
		||||
            // FIX: Removed log(), seems to make more problems than it fixes
 | 
			
		||||
            this->m_fTextureZoom += f * 15;
 | 
			
		||||
            if( this->m_fTextureZoom < 0.05f )this->m_fTextureZoom = 0.05f;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // change the texture view's offset on the x axis
 | 
			
		||||
        inline void SetTextureViewOffsetX( float f )
 | 
			
		||||
        {
 | 
			
		||||
            this->m_vTextureOffset.x += f;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // change the texture view's offset on the y axis
 | 
			
		||||
        inline void SetTextureViewOffsetY( float f )
 | 
			
		||||
        {
 | 
			
		||||
            this->m_vTextureOffset.y += f;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // add a new texture to the list
 | 
			
		||||
        inline void AddTexture( const TextureInfo& info )
 | 
			
		||||
        {
 | 
			
		||||
            this->m_asTextures.push_back( info );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // add a new node to the list
 | 
			
		||||
        inline void AddNode( const NodeInfo& info )
 | 
			
		||||
        {
 | 
			
		||||
            this->m_asNodes.push_back( info );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // add a new mesh to the list
 | 
			
		||||
        inline void AddMesh( const MeshInfo& info )
 | 
			
		||||
        {
 | 
			
		||||
            this->m_asMeshes.push_back( info );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // add a new material to the list
 | 
			
		||||
        inline void AddMaterial( const MaterialInfo& info )
 | 
			
		||||
        {
 | 
			
		||||
            this->m_asMaterials.push_back( info );
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // set the primary color of the checker pattern background
 | 
			
		||||
        inline void SetFirstCheckerColor( D3DXVECTOR4 c )
 | 
			
		||||
        {
 | 
			
		||||
            this->m_avCheckerColors[ 0 ] = c;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // set the secondary color of the checker pattern background
 | 
			
		||||
        inline void SetSecondCheckerColor( D3DXVECTOR4 c )
 | 
			
		||||
        {
 | 
			
		||||
            this->m_avCheckerColors[ 1 ] = c;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // get the primary color of the checker pattern background
 | 
			
		||||
        inline const D3DXVECTOR4* GetFirstCheckerColor() const
 | 
			
		||||
        {
 | 
			
		||||
            return &this->m_avCheckerColors[ 0 ];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // get the secondary color of the checker pattern background
 | 
			
		||||
        inline const D3DXVECTOR4* GetSecondCheckerColor() const
 | 
			
		||||
        {
 | 
			
		||||
            return &this->m_avCheckerColors[ 1 ];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Render a screen-filling square using the checker pattern shader
 | 
			
		||||
        int RenderPatternBG();
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Render a given node in the scenegraph
 | 
			
		||||
        // piNode Node to be rendered
 | 
			
		||||
        // piMatrix Current transformation matrix
 | 
			
		||||
        // bAlpha Render alpha or opaque objects only?
 | 
			
		||||
        int RenderNode( aiNode* piNode, const aiMatrix4x4& piMatrix,
 | 
			
		||||
            bool bAlpha = false );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Setup the camera for the stereo view rendering mode
 | 
			
		||||
        int SetupStereoView();
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Render the second view (for the right eye) in stereo mod
 | 
			
		||||
        // m - World matrix
 | 
			
		||||
        int RenderStereoView( const aiMatrix4x4& m );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Handle user input
 | 
			
		||||
        int HandleInput();
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Handle user input for the texture viewer
 | 
			
		||||
        int HandleInputTextureView();
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Handle user input if no asset is loaded
 | 
			
		||||
        int HandleInputEmptyScene();
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Draw the HUD (call only if FPS mode isn't active)
 | 
			
		||||
        int DrawHUD();
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Used by OnSetup().
 | 
			
		||||
        // Do everything necessary to switch to texture view mode
 | 
			
		||||
        int OnSetupTextureView( TextureInfo* pcNew );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Used by OnSetup().
 | 
			
		||||
        // Do everything necessary to switch to material view mode
 | 
			
		||||
        int OnSetupMaterialView( MaterialInfo* pcNew );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Used by OnSetup().
 | 
			
		||||
        // Do everything necessary to switch to node view mode
 | 
			
		||||
        int OnSetupNodeView( NodeInfo* pcNew );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Used by OnSetup().
 | 
			
		||||
        // Do everything necessary to switch back to normal view mode
 | 
			
		||||
        int OnSetupNormalView();
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Used by HandleTreeViewPopup().
 | 
			
		||||
        int HandleTreeViewPopup2( WPARAM wParam, LPARAM lParam );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Render skeleton
 | 
			
		||||
        int RenderSkeleton( aiNode* piNode, const aiMatrix4x4& piMatrix,
 | 
			
		||||
            const aiMatrix4x4& parent );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
 | 
			
		||||
        // view mode
 | 
			
		||||
        unsigned int m_iViewMode;
 | 
			
		||||
 | 
			
		||||
        // List of all textures in the display CB
 | 
			
		||||
        std::vector<TextureInfo> m_asTextures;
 | 
			
		||||
 | 
			
		||||
        // current texture or NULL if no texture is active
 | 
			
		||||
        TextureInfo* m_pcCurrentTexture;
 | 
			
		||||
 | 
			
		||||
        // List of all node in the display CB
 | 
			
		||||
        std::vector<NodeInfo> m_asNodes;
 | 
			
		||||
 | 
			
		||||
        // List of all node in the display CB
 | 
			
		||||
        std::vector<MeshInfo> m_asMeshes;
 | 
			
		||||
 | 
			
		||||
        // current Node or NULL if no Node is active
 | 
			
		||||
        NodeInfo* m_pcCurrentNode;
 | 
			
		||||
 | 
			
		||||
        // List of all materials in the display CB
 | 
			
		||||
        std::vector<MaterialInfo> m_asMaterials;
 | 
			
		||||
 | 
			
		||||
        // current material or NULL if no material is active
 | 
			
		||||
        MaterialInfo* m_pcCurrentMaterial;
 | 
			
		||||
 | 
			
		||||
        // indices into the image list of the "display" tree view control
 | 
			
		||||
        unsigned int m_aiImageList[ 5 ]; /* = {0,1,2,3,4};*/
 | 
			
		||||
 | 
			
		||||
        // Image list
 | 
			
		||||
        HIMAGELIST m_hImageList;
 | 
			
		||||
 | 
			
		||||
        // Root node of the tree, "Model"
 | 
			
		||||
        HTREEITEM m_hRoot;
 | 
			
		||||
 | 
			
		||||
        // Current zoom factor of the texture viewer
 | 
			
		||||
        float m_fTextureZoom;
 | 
			
		||||
 | 
			
		||||
        // Current offset (in pixels) of the texture viewer
 | 
			
		||||
        aiVector2D m_vTextureOffset;
 | 
			
		||||
 | 
			
		||||
        // Colors used to draw the checker pattern (for the
 | 
			
		||||
        // texture viewer as background )
 | 
			
		||||
        D3DXVECTOR4 m_avCheckerColors[ 2 ];
 | 
			
		||||
 | 
			
		||||
        // View projection matrix
 | 
			
		||||
        aiMatrix4x4 mViewProjection;
 | 
			
		||||
        aiVector3D vPos;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif // AV_DISPLAY_H_INCLUDE
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								thirdparty/assimp/tools/assimp_view/HUD.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 40 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								thirdparty/assimp/tools/assimp_view/HUDMask.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 6.3 KiB  | 
							
								
								
									
										103
									
								
								thirdparty/assimp/tools/assimp_view/HelpDialog.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,103 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2019, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "assimp_view.h"
 | 
			
		||||
 | 
			
		||||
#include "richedit.h"
 | 
			
		||||
 | 
			
		||||
namespace AssimpView {
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
// Message procedure for the help dialog
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
INT_PTR CALLBACK HelpDialogProc(HWND hwndDlg,UINT uMsg, WPARAM wParam,LPARAM ) {
 | 
			
		||||
    switch (uMsg) {
 | 
			
		||||
        case WM_INITDIALOG:
 | 
			
		||||
        {
 | 
			
		||||
            // load the help file ...
 | 
			
		||||
            HRSRC res = FindResource(NULL,MAKEINTRESOURCE(IDR_TEXT1),"TEXT");
 | 
			
		||||
            HGLOBAL hg = LoadResource(NULL,res);
 | 
			
		||||
            void* pData = LockResource(hg);
 | 
			
		||||
 | 
			
		||||
            SETTEXTEX sInfo;
 | 
			
		||||
            sInfo.flags = ST_DEFAULT;
 | 
			
		||||
            sInfo.codepage = CP_ACP;
 | 
			
		||||
 | 
			
		||||
            SendDlgItemMessage(hwndDlg,IDC_RICHEDIT21,
 | 
			
		||||
                EM_SETTEXTEX,(WPARAM)&sInfo,( LPARAM) pData);
 | 
			
		||||
 | 
			
		||||
            FreeResource(hg);
 | 
			
		||||
            return TRUE;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        case WM_CLOSE:
 | 
			
		||||
            EndDialog(hwndDlg,0);
 | 
			
		||||
            return TRUE;
 | 
			
		||||
 | 
			
		||||
        case WM_COMMAND:
 | 
			
		||||
            if (IDOK == LOWORD(wParam)) {
 | 
			
		||||
                EndDialog(hwndDlg,0);
 | 
			
		||||
                return TRUE;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        case WM_PAINT:
 | 
			
		||||
            {
 | 
			
		||||
                PAINTSTRUCT sPaint;
 | 
			
		||||
                HDC hdc = BeginPaint(hwndDlg,&sPaint);
 | 
			
		||||
 | 
			
		||||
                HBRUSH hBrush = CreateSolidBrush(RGB(0xFF,0xFF,0xFF));
 | 
			
		||||
 | 
			
		||||
                RECT sRect;
 | 
			
		||||
                sRect.left = 0;
 | 
			
		||||
                sRect.top = 26;
 | 
			
		||||
                sRect.right = 1000;
 | 
			
		||||
                sRect.bottom = 507;
 | 
			
		||||
                FillRect(hdc, &sRect, hBrush);
 | 
			
		||||
 | 
			
		||||
                EndPaint(hwndDlg,&sPaint);
 | 
			
		||||
                return TRUE;
 | 
			
		||||
            }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										372
									
								
								thirdparty/assimp/tools/assimp_view/Input.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,372 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2019, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "assimp_view.h"
 | 
			
		||||
 | 
			
		||||
namespace AssimpView {
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
// Handle mouse input for the FPS input behaviour
 | 
			
		||||
//
 | 
			
		||||
// Movement in x and y axis is possible
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void HandleMouseInputFPS( void )
 | 
			
		||||
    {
 | 
			
		||||
    POINT mousePos;
 | 
			
		||||
    GetCursorPos( &mousePos );
 | 
			
		||||
    ScreenToClient( GetDlgItem(g_hDlg,IDC_RT), &mousePos );
 | 
			
		||||
 | 
			
		||||
    g_mousePos.x = mousePos.x;
 | 
			
		||||
    g_mousePos.y = mousePos.y;
 | 
			
		||||
 | 
			
		||||
    D3DXMATRIX matRotation;
 | 
			
		||||
 | 
			
		||||
    if (g_bMousePressed)
 | 
			
		||||
        {
 | 
			
		||||
        int nXDiff = (g_mousePos.x - g_LastmousePos.x);
 | 
			
		||||
        int nYDiff = (g_mousePos.y - g_LastmousePos.y);
 | 
			
		||||
 | 
			
		||||
        if( 0 != nYDiff)
 | 
			
		||||
            {
 | 
			
		||||
            D3DXMatrixRotationAxis( &matRotation, (D3DXVECTOR3*)& g_sCamera.vRight, D3DXToRadian((float)nYDiff / 6.0f));
 | 
			
		||||
            D3DXVec3TransformCoord( (D3DXVECTOR3*)&g_sCamera.vLookAt, (D3DXVECTOR3*)& g_sCamera.vLookAt, &matRotation );
 | 
			
		||||
            D3DXVec3TransformCoord( (D3DXVECTOR3*)&g_sCamera.vUp, (D3DXVECTOR3*)&g_sCamera.vUp, &matRotation );
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        if( 0 != nXDiff )
 | 
			
		||||
            {
 | 
			
		||||
            D3DXVECTOR3 v(0,1,0);
 | 
			
		||||
            D3DXMatrixRotationAxis( &matRotation, (D3DXVECTOR3*)&g_sCamera.vUp, D3DXToRadian((float)nXDiff / 6.0f) );
 | 
			
		||||
            D3DXVec3TransformCoord( (D3DXVECTOR3*)&g_sCamera.vLookAt, (D3DXVECTOR3*)&g_sCamera.vLookAt, &matRotation );
 | 
			
		||||
            D3DXVec3TransformCoord( (D3DXVECTOR3*)&g_sCamera.vRight,(D3DXVECTOR3*) &g_sCamera.vRight, &matRotation );
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    g_LastmousePos.x = g_mousePos.x;
 | 
			
		||||
    g_LastmousePos.y = g_mousePos.y;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
// Handle mouse input for the FPS input behaviour
 | 
			
		||||
//
 | 
			
		||||
// Movement in x and y axis is possible
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void HandleMouseInputTextureView( void )
 | 
			
		||||
    {
 | 
			
		||||
    POINT mousePos;
 | 
			
		||||
    GetCursorPos( &mousePos );
 | 
			
		||||
    ScreenToClient( GetDlgItem(g_hDlg,IDC_RT), &mousePos );
 | 
			
		||||
 | 
			
		||||
    g_mousePos.x = mousePos.x;
 | 
			
		||||
    g_mousePos.y = mousePos.y;
 | 
			
		||||
 | 
			
		||||
    D3DXMATRIX matRotation;
 | 
			
		||||
 | 
			
		||||
    if (g_bMousePressed)
 | 
			
		||||
        {
 | 
			
		||||
        CDisplay::Instance().SetTextureViewOffsetX((float)(g_mousePos.x - g_LastmousePos.x));
 | 
			
		||||
        CDisplay::Instance().SetTextureViewOffsetY((float)(g_mousePos.y - g_LastmousePos.y));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    g_LastmousePos.x = g_mousePos.x;
 | 
			
		||||
    g_LastmousePos.y = g_mousePos.y;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
// handle mouse input for the light rotation
 | 
			
		||||
//
 | 
			
		||||
// Axes: global x/y axis
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void HandleMouseInputLightRotate( void )
 | 
			
		||||
    {
 | 
			
		||||
    POINT mousePos;
 | 
			
		||||
    GetCursorPos( &mousePos );
 | 
			
		||||
    ScreenToClient( GetDlgItem(g_hDlg,IDC_RT), &mousePos );
 | 
			
		||||
 | 
			
		||||
    g_mousePos.x = mousePos.x;
 | 
			
		||||
    g_mousePos.y = mousePos.y;
 | 
			
		||||
 | 
			
		||||
    if (g_bMousePressedR)
 | 
			
		||||
        {
 | 
			
		||||
        int nXDiff = -(g_mousePos.x - g_LastmousePos.x);
 | 
			
		||||
        int nYDiff = -(g_mousePos.y - g_LastmousePos.y);
 | 
			
		||||
 | 
			
		||||
        aiVector3D v = aiVector3D(1.0f,0.0f,0.0f);
 | 
			
		||||
        aiMatrix4x4 mTemp;
 | 
			
		||||
        D3DXMatrixRotationAxis( (D3DXMATRIX*) &mTemp, (D3DXVECTOR3*)&v, D3DXToRadian((float)nYDiff / 2.0f));
 | 
			
		||||
        D3DXVec3TransformCoord((D3DXVECTOR3*)&g_avLightDirs[0],
 | 
			
		||||
            (const D3DXVECTOR3*)&g_avLightDirs[0],(const D3DXMATRIX*)&mTemp);
 | 
			
		||||
 | 
			
		||||
        v = aiVector3D(0.0f,1.0f,0.0f);
 | 
			
		||||
        D3DXMatrixRotationAxis( (D3DXMATRIX*) &mTemp, (D3DXVECTOR3*)&v, D3DXToRadian((float)nXDiff / 2.0f));
 | 
			
		||||
        D3DXVec3TransformCoord((D3DXVECTOR3*)&g_avLightDirs[0],
 | 
			
		||||
            (const D3DXVECTOR3*)&g_avLightDirs[0],(const D3DXMATRIX*)&mTemp);
 | 
			
		||||
        }
 | 
			
		||||
    return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
// Handle mouse input for movements of the skybox
 | 
			
		||||
//
 | 
			
		||||
// The skybox can be moved by holding both the left and the right mouse button
 | 
			
		||||
// pressed. Rotation is possible in x and y direction.
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void HandleMouseInputSkyBox( void )
 | 
			
		||||
    {
 | 
			
		||||
    POINT mousePos;
 | 
			
		||||
    GetCursorPos( &mousePos );
 | 
			
		||||
    ScreenToClient( GetDlgItem(g_hDlg,IDC_RT), &mousePos );
 | 
			
		||||
 | 
			
		||||
    g_mousePos.x = mousePos.x;
 | 
			
		||||
    g_mousePos.y = mousePos.y;
 | 
			
		||||
 | 
			
		||||
    aiMatrix4x4 matRotation;
 | 
			
		||||
 | 
			
		||||
    if (g_bMousePressedBoth )
 | 
			
		||||
        {
 | 
			
		||||
        int nXDiff = -(g_mousePos.x - g_LastmousePos.x);
 | 
			
		||||
        int nYDiff = -(g_mousePos.y - g_LastmousePos.y);
 | 
			
		||||
 | 
			
		||||
        aiMatrix4x4 matWorld;
 | 
			
		||||
 | 
			
		||||
        if( 0 != nYDiff)
 | 
			
		||||
            {
 | 
			
		||||
            aiVector3D v = aiVector3D(1.0f,0.0f,0.0f);
 | 
			
		||||
            D3DXMatrixRotationAxis( (D3DXMATRIX*) &matWorld, (D3DXVECTOR3*)&v, D3DXToRadian((float)nYDiff / 2.0f));
 | 
			
		||||
            CBackgroundPainter::Instance().RotateSB(&matWorld);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        if( 0 != nXDiff)
 | 
			
		||||
            {
 | 
			
		||||
            aiMatrix4x4 matWorldOld;
 | 
			
		||||
            if( 0 != nYDiff)
 | 
			
		||||
                {
 | 
			
		||||
                matWorldOld = matWorld;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            aiVector3D v = aiVector3D(0.0f,1.0f,0.0f);
 | 
			
		||||
            D3DXMatrixRotationAxis( (D3DXMATRIX*)&matWorld, (D3DXVECTOR3*)&v, D3DXToRadian((float)nXDiff / 2.0f) );
 | 
			
		||||
            matWorld =  matWorldOld * matWorld;
 | 
			
		||||
            CBackgroundPainter::Instance().RotateSB(&matWorld);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void HandleMouseInputLightIntensityAndColor()
 | 
			
		||||
    {
 | 
			
		||||
    POINT mousePos;
 | 
			
		||||
    GetCursorPos( &mousePos );
 | 
			
		||||
    ScreenToClient( GetDlgItem(g_hDlg,IDC_RT), &mousePos );
 | 
			
		||||
 | 
			
		||||
    g_mousePos.x = mousePos.x;
 | 
			
		||||
    g_mousePos.y = mousePos.y;
 | 
			
		||||
 | 
			
		||||
    if (g_bMousePressedM)
 | 
			
		||||
        {
 | 
			
		||||
        int nXDiff = -(g_mousePos.x - g_LastmousePos.x);
 | 
			
		||||
        int nYDiff = -(g_mousePos.y - g_LastmousePos.y);
 | 
			
		||||
 | 
			
		||||
        g_fLightIntensity -= (float)nXDiff / 400.0f;
 | 
			
		||||
        if ((nYDiff > 2 || nYDiff < -2) && (nXDiff < 20 && nXDiff > -20))
 | 
			
		||||
        {
 | 
			
		||||
            if (!g_bFPSView)
 | 
			
		||||
            {
 | 
			
		||||
                g_sCamera.vPos.z += nYDiff / 120.0f;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                g_sCamera.vPos += (nYDiff / 120.0f) * g_sCamera.vLookAt.Normalize();
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void HandleMouseInputLocal( void )
 | 
			
		||||
    {
 | 
			
		||||
    POINT mousePos;
 | 
			
		||||
    GetCursorPos( &mousePos );
 | 
			
		||||
    ScreenToClient( GetDlgItem(g_hDlg,IDC_RT), &mousePos );
 | 
			
		||||
 | 
			
		||||
    g_mousePos.x = mousePos.x;
 | 
			
		||||
    g_mousePos.y = mousePos.y;
 | 
			
		||||
 | 
			
		||||
    aiMatrix4x4 matRotation;
 | 
			
		||||
 | 
			
		||||
    if (g_bMousePressed)
 | 
			
		||||
        {
 | 
			
		||||
        int nXDiff = -(g_mousePos.x - g_LastmousePos.x);
 | 
			
		||||
        int nYDiff = -(g_mousePos.y - g_LastmousePos.y);
 | 
			
		||||
 | 
			
		||||
        aiMatrix4x4 matWorld;
 | 
			
		||||
        if (g_eClick != EClickPos_Outside)
 | 
			
		||||
            {
 | 
			
		||||
            if( 0 != nYDiff && g_eClick != EClickPos_CircleHor)
 | 
			
		||||
                {
 | 
			
		||||
                aiVector3D v = aiVector3D(1.0f,0.0f,0.0f);
 | 
			
		||||
                D3DXMatrixRotationAxis( (D3DXMATRIX*) &matWorld, (D3DXVECTOR3*)&v, D3DXToRadian((float)nYDiff / 2.0f));
 | 
			
		||||
                g_mWorldRotate = g_mWorldRotate * matWorld;
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            if( 0 != nXDiff && g_eClick != EClickPos_CircleVert)
 | 
			
		||||
                {
 | 
			
		||||
                aiVector3D v = aiVector3D(0.0f,1.0f,0.0f);
 | 
			
		||||
                D3DXMatrixRotationAxis( (D3DXMATRIX*)&matWorld, (D3DXVECTOR3*)&v, D3DXToRadian((float)nXDiff / 2.0f) );
 | 
			
		||||
                g_mWorldRotate = g_mWorldRotate * matWorld;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        else
 | 
			
		||||
            {
 | 
			
		||||
            if(0 != nYDiff || 0 != nXDiff)
 | 
			
		||||
                {
 | 
			
		||||
                // rotate around the z-axis
 | 
			
		||||
                RECT sRect;
 | 
			
		||||
                GetWindowRect(GetDlgItem(g_hDlg,IDC_RT),&sRect);
 | 
			
		||||
                sRect.right -= sRect.left;
 | 
			
		||||
                sRect.bottom -= sRect.top;
 | 
			
		||||
 | 
			
		||||
                int xPos = g_mousePos.x - sRect.right/2;
 | 
			
		||||
                int yPos = g_mousePos.y - sRect.bottom/2;
 | 
			
		||||
                float fXDist = (float)xPos;
 | 
			
		||||
                float fYDist = (float)yPos / sqrtf((float)(yPos * yPos + xPos * xPos));
 | 
			
		||||
 | 
			
		||||
                bool bSign1;
 | 
			
		||||
                if (fXDist < 0.0f)bSign1 = false;
 | 
			
		||||
                else bSign1 = true;
 | 
			
		||||
                float fAngle = asin(fYDist);
 | 
			
		||||
 | 
			
		||||
                xPos = g_LastmousePos.x - sRect.right/2;
 | 
			
		||||
                yPos = g_LastmousePos.y - sRect.bottom/2;
 | 
			
		||||
 | 
			
		||||
                fXDist = (float)xPos;
 | 
			
		||||
                fYDist = (float)yPos / sqrtf((float)(yPos * yPos + xPos * xPos));
 | 
			
		||||
 | 
			
		||||
                bool bSign2;
 | 
			
		||||
                if (fXDist < 0.0f)bSign2 = false;
 | 
			
		||||
                else bSign2 = true;
 | 
			
		||||
                float fAngle2 = asin(fYDist);
 | 
			
		||||
                fAngle -= fAngle2;
 | 
			
		||||
 | 
			
		||||
                if (bSign1 != bSign2)
 | 
			
		||||
                    {
 | 
			
		||||
                    g_bInvert = !g_bInvert;
 | 
			
		||||
                    }
 | 
			
		||||
                if (g_bInvert)fAngle *= -1.0f;
 | 
			
		||||
 | 
			
		||||
                aiVector3D v = aiVector3D(0.0f,0.0f,1.0f);
 | 
			
		||||
                D3DXMatrixRotationAxis( (D3DXMATRIX*)&matWorld, (D3DXVECTOR3*)&v, (float) (fAngle * 1.2) );
 | 
			
		||||
                g_mWorldRotate = g_mWorldRotate * matWorld;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    g_LastmousePos.x = g_mousePos.x;
 | 
			
		||||
    g_LastmousePos.y = g_mousePos.y;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void HandleKeyboardInputFPS( void )
 | 
			
		||||
    {
 | 
			
		||||
    unsigned char keys[256];
 | 
			
		||||
    GetKeyboardState( keys );
 | 
			
		||||
 | 
			
		||||
    aiVector3D tmpLook  = g_sCamera.vLookAt;
 | 
			
		||||
    aiVector3D tmpRight = g_sCamera.vRight;
 | 
			
		||||
 | 
			
		||||
    aiVector3D vOldPos = g_sCamera.vPos;
 | 
			
		||||
 | 
			
		||||
    // Up Arrow Key - View moves forward
 | 
			
		||||
    if( keys[VK_UP] & 0x80 )
 | 
			
		||||
        g_sCamera.vPos -= (tmpLook*-MOVE_SPEED)*g_fElpasedTime;
 | 
			
		||||
 | 
			
		||||
    // Down Arrow Key - View moves backward
 | 
			
		||||
    if( keys[VK_DOWN] & 0x80 )
 | 
			
		||||
        g_sCamera.vPos += (tmpLook*-MOVE_SPEED)*g_fElpasedTime;
 | 
			
		||||
 | 
			
		||||
    // Left Arrow Key - View side-steps or strafes to the left
 | 
			
		||||
    if( keys[VK_LEFT] & 0x80 )
 | 
			
		||||
        g_sCamera.vPos -= (tmpRight*MOVE_SPEED)*g_fElpasedTime;
 | 
			
		||||
 | 
			
		||||
    // Right Arrow Key - View side-steps or strafes to the right
 | 
			
		||||
    if( keys[VK_RIGHT] & 0x80 )
 | 
			
		||||
        g_sCamera.vPos += (tmpRight*MOVE_SPEED)*g_fElpasedTime;
 | 
			
		||||
 | 
			
		||||
    // Home Key - View elevates up
 | 
			
		||||
    if( keys[VK_HOME] & 0x80 )
 | 
			
		||||
        g_sCamera.vPos .y += MOVE_SPEED*g_fElpasedTime;
 | 
			
		||||
 | 
			
		||||
    // End Key - View elevates down
 | 
			
		||||
    if( keys[VK_END] & 0x80 )
 | 
			
		||||
        g_sCamera.vPos.y -= MOVE_SPEED*g_fElpasedTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void HandleKeyboardInputTextureView( void )
 | 
			
		||||
    {
 | 
			
		||||
    unsigned char keys[256];
 | 
			
		||||
    GetKeyboardState( keys );
 | 
			
		||||
 | 
			
		||||
    // Up Arrow Key
 | 
			
		||||
    if( keys[VK_UP] & 0x80 )
 | 
			
		||||
        CDisplay::Instance().SetTextureViewOffsetY ( g_fElpasedTime * 150.0f );
 | 
			
		||||
 | 
			
		||||
    // Down Arrow Key
 | 
			
		||||
    if( keys[VK_DOWN] & 0x80 )
 | 
			
		||||
        CDisplay::Instance().SetTextureViewOffsetY ( -g_fElpasedTime * 150.0f );
 | 
			
		||||
 | 
			
		||||
    // Left Arrow Key
 | 
			
		||||
    if( keys[VK_LEFT] & 0x80 )
 | 
			
		||||
        CDisplay::Instance().SetTextureViewOffsetX ( g_fElpasedTime * 150.0f );
 | 
			
		||||
 | 
			
		||||
    // Right Arrow Key
 | 
			
		||||
    if( keys[VK_RIGHT] & 0x80 )
 | 
			
		||||
        CDisplay::Instance().SetTextureViewOffsetX ( -g_fElpasedTime * 150.0f );
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										221
									
								
								thirdparty/assimp/tools/assimp_view/LogDisplay.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,221 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2019, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "assimp_view.h"
 | 
			
		||||
 | 
			
		||||
namespace AssimpView {
 | 
			
		||||
 | 
			
		||||
CLogDisplay CLogDisplay::s_cInstance;
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CLogDisplay::AddEntry(const std::string& szText, const D3DCOLOR clrColor) {
 | 
			
		||||
    SEntry sNew;
 | 
			
		||||
    sNew.clrColor = clrColor;
 | 
			
		||||
    sNew.szText = szText;
 | 
			
		||||
    sNew.dwStartTicks = (DWORD)GetTickCount();
 | 
			
		||||
 | 
			
		||||
    this->asEntries.push_back(sNew);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CLogDisplay::ReleaseNativeResource() {
 | 
			
		||||
    if (this->piFont) {
 | 
			
		||||
        this->piFont->Release();
 | 
			
		||||
        this->piFont = nullptr;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CLogDisplay::RecreateNativeResource() {
 | 
			
		||||
    if (!this->piFont) {
 | 
			
		||||
        if (FAILED(D3DXCreateFont(g_piDevice,
 | 
			
		||||
                     16,                    //Font height
 | 
			
		||||
                     0,                     //Font width
 | 
			
		||||
                     FW_BOLD,               //Font Weight
 | 
			
		||||
                     1,                     //MipLevels
 | 
			
		||||
                     false,                 //Italic
 | 
			
		||||
                     DEFAULT_CHARSET,       //CharSet
 | 
			
		||||
                     OUT_DEFAULT_PRECIS,    //OutputPrecision
 | 
			
		||||
                     //CLEARTYPE_QUALITY,   //Quality
 | 
			
		||||
                     5, //Quality
 | 
			
		||||
                     DEFAULT_PITCH|FF_DONTCARE, //PitchAndFamily
 | 
			
		||||
                     "Verdana",                 //pFacename,
 | 
			
		||||
                     &this->piFont))) {
 | 
			
		||||
            CLogDisplay::Instance().AddEntry("Unable to load font",D3DCOLOR_ARGB(0xFF,0xFF,0,0));
 | 
			
		||||
 | 
			
		||||
            this->piFont = nullptr;
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CLogDisplay::OnRender() {
 | 
			
		||||
    DWORD dwTick = (DWORD) GetTickCount();
 | 
			
		||||
    DWORD dwLimit = dwTick - 8000;
 | 
			
		||||
    DWORD dwLimit2 = dwLimit + 3000;
 | 
			
		||||
 | 
			
		||||
    unsigned int iCnt = 0;
 | 
			
		||||
    RECT sRect;
 | 
			
		||||
    sRect.left = 10;
 | 
			
		||||
    sRect.top = 10;
 | 
			
		||||
 | 
			
		||||
    RECT sWndRect;
 | 
			
		||||
    GetWindowRect(GetDlgItem(g_hDlg,IDC_RT),&sWndRect);
 | 
			
		||||
    sWndRect.right -= sWndRect.left;
 | 
			
		||||
    sWndRect.bottom -= sWndRect.top;
 | 
			
		||||
    sWndRect.left = sWndRect.top = 0;
 | 
			
		||||
 | 
			
		||||
    sRect.right = sWndRect.right - 30;
 | 
			
		||||
    sRect.bottom = sWndRect.bottom;
 | 
			
		||||
 | 
			
		||||
    // if no asset is loaded draw a "no asset loaded" text in the center
 | 
			
		||||
    if (!g_pcAsset) {
 | 
			
		||||
        const char* szText = "Nothing to display ... \r\nTry [Viewer | Open asset] to load an asset";
 | 
			
		||||
 | 
			
		||||
        // shadow
 | 
			
		||||
        RECT sCopy;
 | 
			
		||||
        sCopy.left      = sWndRect.left+1;
 | 
			
		||||
        sCopy.top       = sWndRect.top+1;
 | 
			
		||||
        sCopy.bottom    = sWndRect.bottom+1;
 | 
			
		||||
        sCopy.right     = sWndRect.right+1;
 | 
			
		||||
        this->piFont->DrawText(NULL,szText ,
 | 
			
		||||
            -1,&sCopy,DT_CENTER | DT_VCENTER,D3DCOLOR_ARGB(100,0x0,0x0,0x0));
 | 
			
		||||
        sCopy.left      = sWndRect.left+1;
 | 
			
		||||
        sCopy.top       = sWndRect.top+1;
 | 
			
		||||
        sCopy.bottom    = sWndRect.bottom-1;
 | 
			
		||||
        sCopy.right     = sWndRect.right-1;
 | 
			
		||||
        this->piFont->DrawText(NULL,szText ,
 | 
			
		||||
            -1,&sCopy,DT_CENTER | DT_VCENTER,D3DCOLOR_ARGB(100,0x0,0x0,0x0));
 | 
			
		||||
        sCopy.left      = sWndRect.left-1;
 | 
			
		||||
        sCopy.top       = sWndRect.top-1;
 | 
			
		||||
        sCopy.bottom    = sWndRect.bottom+1;
 | 
			
		||||
        sCopy.right     = sWndRect.right+1;
 | 
			
		||||
        this->piFont->DrawText(NULL,szText ,
 | 
			
		||||
            -1,&sCopy,DT_CENTER | DT_VCENTER,D3DCOLOR_ARGB(100,0x0,0x0,0x0));
 | 
			
		||||
        sCopy.left      = sWndRect.left-1;
 | 
			
		||||
        sCopy.top       = sWndRect.top-1;
 | 
			
		||||
        sCopy.bottom    = sWndRect.bottom-1;
 | 
			
		||||
        sCopy.right     = sWndRect.right-1;
 | 
			
		||||
        this->piFont->DrawText(NULL,szText ,
 | 
			
		||||
            -1,&sCopy,DT_CENTER | DT_VCENTER,D3DCOLOR_ARGB(100,0x0,0x0,0x0));
 | 
			
		||||
 | 
			
		||||
        // text
 | 
			
		||||
        this->piFont->DrawText(NULL,szText ,
 | 
			
		||||
            -1,&sWndRect,DT_CENTER | DT_VCENTER,D3DCOLOR_ARGB(0xFF,0xFF,0xFF,0xFF));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // update all elements in the queue and render them
 | 
			
		||||
    for (std::list<SEntry>::iterator
 | 
			
		||||
            i =  this->asEntries.begin();
 | 
			
		||||
            i != this->asEntries.end();++i,++iCnt) {
 | 
			
		||||
        if ((*i).dwStartTicks < dwLimit) {
 | 
			
		||||
            i = this->asEntries.erase(i);
 | 
			
		||||
 | 
			
		||||
            if (i == this->asEntries.end()) {
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        } else if (nullptr != this->piFont) {
 | 
			
		||||
            float fAlpha = 1.0f;
 | 
			
		||||
            if ((*i).dwStartTicks <= dwLimit2) {
 | 
			
		||||
                // linearly interpolate to create the fade out effect
 | 
			
		||||
                fAlpha = 1.0f - (float)(dwLimit2 - (*i).dwStartTicks) / 3000.0f;
 | 
			
		||||
            }
 | 
			
		||||
            D3DCOLOR& clrColor = (*i).clrColor;
 | 
			
		||||
            clrColor &= ~(0xFFu << 24);
 | 
			
		||||
            clrColor |= (((unsigned char)(fAlpha * 255.0f)) & 0xFFu) << 24;
 | 
			
		||||
 | 
			
		||||
            const char* szText = (*i).szText.c_str();
 | 
			
		||||
            if (sRect.top + 30 > sWndRect.bottom) {
 | 
			
		||||
                // end of window. send a special message
 | 
			
		||||
                szText = "... too many errors";
 | 
			
		||||
                clrColor = D3DCOLOR_ARGB(0xFF,0xFF,100,0x0);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // draw the black shadow
 | 
			
		||||
            RECT sCopy;
 | 
			
		||||
            sCopy.left      = sRect.left+1;
 | 
			
		||||
            sCopy.top       = sRect.top+1;
 | 
			
		||||
            sCopy.bottom    = sRect.bottom+1;
 | 
			
		||||
            sCopy.right     = sRect.right+1;
 | 
			
		||||
            this->piFont->DrawText(NULL,szText,
 | 
			
		||||
                -1,&sCopy,DT_RIGHT | DT_TOP,D3DCOLOR_ARGB(
 | 
			
		||||
                (unsigned char)(fAlpha * 100.0f),0x0,0x0,0x0));
 | 
			
		||||
 | 
			
		||||
            sCopy.left      = sRect.left-1;
 | 
			
		||||
            sCopy.top       = sRect.top-1;
 | 
			
		||||
            sCopy.bottom    = sRect.bottom-1;
 | 
			
		||||
            sCopy.right     = sRect.right-1;
 | 
			
		||||
            this->piFont->DrawText(NULL,szText,
 | 
			
		||||
                -1,&sCopy,DT_RIGHT | DT_TOP,D3DCOLOR_ARGB(
 | 
			
		||||
                (unsigned char)(fAlpha * 100.0f),0x0,0x0,0x0));
 | 
			
		||||
 | 
			
		||||
            sCopy.left      = sRect.left-1;
 | 
			
		||||
            sCopy.top       = sRect.top-1;
 | 
			
		||||
            sCopy.bottom    = sRect.bottom+1;
 | 
			
		||||
            sCopy.right     = sRect.right+1;
 | 
			
		||||
            this->piFont->DrawText(NULL,szText,
 | 
			
		||||
                -1,&sCopy,DT_RIGHT | DT_TOP,D3DCOLOR_ARGB(
 | 
			
		||||
                (unsigned char)(fAlpha * 100.0f),0x0,0x0,0x0));
 | 
			
		||||
 | 
			
		||||
            sCopy.left      = sRect.left+1;
 | 
			
		||||
            sCopy.top       = sRect.top+1;
 | 
			
		||||
            sCopy.bottom    = sRect.bottom-1;
 | 
			
		||||
            sCopy.right     = sRect.right-1;
 | 
			
		||||
            this->piFont->DrawText(NULL,szText,
 | 
			
		||||
                -1,&sCopy,DT_RIGHT | DT_TOP,D3DCOLOR_ARGB(
 | 
			
		||||
                (unsigned char)(fAlpha * 100.0f),0x0,0x0,0x0));
 | 
			
		||||
 | 
			
		||||
            // draw the text itself
 | 
			
		||||
            int iPX = this->piFont->DrawText(NULL,szText,
 | 
			
		||||
                -1,&sRect,DT_RIGHT | DT_TOP,clrColor);
 | 
			
		||||
 | 
			
		||||
            sRect.top += iPX;
 | 
			
		||||
            sRect.bottom += iPX;
 | 
			
		||||
 | 
			
		||||
            if (szText != (*i).szText.c_str()) {
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										99
									
								
								thirdparty/assimp/tools/assimp_view/LogDisplay.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,99 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2012, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <list>
 | 
			
		||||
 | 
			
		||||
namespace AssimpView
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    //-------------------------------------------------------------------------------
 | 
			
		||||
    /** \brief Class to display log strings in the upper right corner of the view
 | 
			
		||||
    */
 | 
			
		||||
    //-------------------------------------------------------------------------------
 | 
			
		||||
    class CLogDisplay
 | 
			
		||||
    {
 | 
			
		||||
    private:
 | 
			
		||||
 | 
			
		||||
        CLogDisplay()  {}
 | 
			
		||||
 | 
			
		||||
    public:
 | 
			
		||||
 | 
			
		||||
        // data structure for an entry in the log queue
 | 
			
		||||
        struct SEntry
 | 
			
		||||
        {
 | 
			
		||||
            SEntry()
 | 
			
		||||
                :
 | 
			
		||||
                clrColor( D3DCOLOR_ARGB( 0xFF, 0xFF, 0xFF, 0x00 ) ), dwStartTicks( 0 )
 | 
			
		||||
            {}
 | 
			
		||||
 | 
			
		||||
            std::string szText;
 | 
			
		||||
            D3DCOLOR clrColor;
 | 
			
		||||
            DWORD dwStartTicks;
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        // Singleton accessors
 | 
			
		||||
        static CLogDisplay s_cInstance;
 | 
			
		||||
        inline static CLogDisplay& Instance()
 | 
			
		||||
        {
 | 
			
		||||
            return s_cInstance;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Add an entry to the log queue
 | 
			
		||||
        void AddEntry( const std::string& szText,
 | 
			
		||||
            const D3DCOLOR clrColor = D3DCOLOR_ARGB( 0xFF, 0xFF, 0xFF, 0x00 ) );
 | 
			
		||||
 | 
			
		||||
        // Release any native resources associated with the instance
 | 
			
		||||
        void ReleaseNativeResource();
 | 
			
		||||
 | 
			
		||||
        // Recreate any native resources associated with the instance
 | 
			
		||||
        void RecreateNativeResource();
 | 
			
		||||
 | 
			
		||||
        // Called during the render loop
 | 
			
		||||
        void OnRender();
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
 | 
			
		||||
        std::list<SEntry> asEntries;
 | 
			
		||||
        ID3DXFont* piFont;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										246
									
								
								thirdparty/assimp/tools/assimp_view/LogWindow.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,246 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2019, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "assimp_view.h"
 | 
			
		||||
#include "richedit.h"
 | 
			
		||||
#include <commoncontrols.h>
 | 
			
		||||
#include <commdlg.h>
 | 
			
		||||
 | 
			
		||||
namespace AssimpView {
 | 
			
		||||
 | 
			
		||||
CLogWindow CLogWindow::s_cInstance;
 | 
			
		||||
 | 
			
		||||
extern HKEY g_hRegistry;
 | 
			
		||||
 | 
			
		||||
// header for the RTF log file
 | 
			
		||||
static const char* AI_VIEW_RTF_LOG_HEADER =
 | 
			
		||||
    "{\\rtf1"
 | 
			
		||||
        "\\ansi"
 | 
			
		||||
        "\\deff0"
 | 
			
		||||
        "{"
 | 
			
		||||
            "\\fonttbl{\\f0 Courier New;}"
 | 
			
		||||
        "}"
 | 
			
		||||
    "{\\colortbl;"
 | 
			
		||||
        "\\red255\\green0\\blue0;"    // red for errors
 | 
			
		||||
        "\\red255\\green120\\blue0;"  // orange for warnings
 | 
			
		||||
        "\\red0\\green150\\blue0;"    // green for infos
 | 
			
		||||
        "\\red0\\green0\\blue180;"    // blue for debug messages
 | 
			
		||||
        "\\red0\\green0\\blue0;"      // black for everything else
 | 
			
		||||
    "}}";
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
// Message procedure for the log window
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
INT_PTR CALLBACK LogDialogProc(HWND hwndDlg,UINT uMsg,
 | 
			
		||||
    WPARAM wParam,LPARAM lParam)
 | 
			
		||||
    {
 | 
			
		||||
    (void)lParam;
 | 
			
		||||
    switch (uMsg)
 | 
			
		||||
        {
 | 
			
		||||
        case WM_INITDIALOG:
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
            return TRUE;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        case WM_SIZE:
 | 
			
		||||
            {
 | 
			
		||||
            int x = LOWORD(lParam);
 | 
			
		||||
            int y = HIWORD(lParam);
 | 
			
		||||
 | 
			
		||||
            SetWindowPos(GetDlgItem(hwndDlg,IDC_EDIT1),NULL,0,0,
 | 
			
		||||
                x-10,y-12,SWP_NOMOVE|SWP_NOZORDER);
 | 
			
		||||
 | 
			
		||||
            return TRUE;
 | 
			
		||||
            }
 | 
			
		||||
        case WM_CLOSE:
 | 
			
		||||
            EndDialog(hwndDlg,0);
 | 
			
		||||
 | 
			
		||||
            CLogWindow::Instance().bIsVisible = false;
 | 
			
		||||
            return TRUE;
 | 
			
		||||
        };
 | 
			
		||||
    return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CLogWindow::Init () {
 | 
			
		||||
    this->hwnd = ::CreateDialog(g_hInstance,MAKEINTRESOURCE(IDD_LOGVIEW),
 | 
			
		||||
        NULL,&LogDialogProc);
 | 
			
		||||
 | 
			
		||||
    if (!this->hwnd) {
 | 
			
		||||
        CLogDisplay::Instance().AddEntry("[ERROR] Unable to create logger window",
 | 
			
		||||
            D3DCOLOR_ARGB(0xFF,0,0xFF,0));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // setup the log text
 | 
			
		||||
    this->szText = AI_VIEW_RTF_LOG_HEADER;;
 | 
			
		||||
    this->szPlainText = "";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CLogWindow::Show() {
 | 
			
		||||
    if (this->hwnd) {
 | 
			
		||||
        ShowWindow(this->hwnd,SW_SHOW);
 | 
			
		||||
        this->bIsVisible = true;
 | 
			
		||||
 | 
			
		||||
        // contents aren't updated while the logger isn't displayed
 | 
			
		||||
        this->Update();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CMyLogStream::write(const char* message) {
 | 
			
		||||
    CLogWindow::Instance().WriteLine(message);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CLogWindow::Clear() {
 | 
			
		||||
    this->szText = AI_VIEW_RTF_LOG_HEADER;;
 | 
			
		||||
    this->szPlainText = "";
 | 
			
		||||
 | 
			
		||||
    this->Update();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CLogWindow::Update() {
 | 
			
		||||
    if (this->bIsVisible) {
 | 
			
		||||
        SETTEXTEX sInfo;
 | 
			
		||||
        sInfo.flags = ST_DEFAULT;
 | 
			
		||||
        sInfo.codepage = CP_ACP;
 | 
			
		||||
 | 
			
		||||
        SendDlgItemMessage(this->hwnd,IDC_EDIT1,
 | 
			
		||||
            EM_SETTEXTEX,(WPARAM)&sInfo,( LPARAM)this->szText.c_str());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CLogWindow::Save() {
 | 
			
		||||
    char szFileName[MAX_PATH];
 | 
			
		||||
 | 
			
		||||
    DWORD dwTemp = MAX_PATH;
 | 
			
		||||
    if(ERROR_SUCCESS != RegQueryValueEx(g_hRegistry,"LogDestination",NULL,NULL,(BYTE*)szFileName,&dwTemp)) {
 | 
			
		||||
        // Key was not found. Use C:
 | 
			
		||||
        strcpy(szFileName,"");
 | 
			
		||||
    } else {
 | 
			
		||||
        // need to remove the file name
 | 
			
		||||
        char* sz = strrchr(szFileName,'\\');
 | 
			
		||||
        if (!sz)
 | 
			
		||||
            sz = strrchr(szFileName,'/');
 | 
			
		||||
        if (sz)
 | 
			
		||||
            *sz = 0;
 | 
			
		||||
    }
 | 
			
		||||
    OPENFILENAME sFilename1 = {
 | 
			
		||||
        sizeof(OPENFILENAME),
 | 
			
		||||
        g_hDlg,GetModuleHandle(NULL),
 | 
			
		||||
        "Log files\0*.txt", NULL, 0, 1,
 | 
			
		||||
        szFileName, MAX_PATH, NULL, 0, NULL,
 | 
			
		||||
        "Save log to file",
 | 
			
		||||
        OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_NOCHANGEDIR,
 | 
			
		||||
        0, 1, ".txt", 0, NULL, NULL
 | 
			
		||||
    };
 | 
			
		||||
    if(GetSaveFileName(&sFilename1) == 0) return;
 | 
			
		||||
 | 
			
		||||
    // Now store the file in the registry
 | 
			
		||||
    RegSetValueExA(g_hRegistry,"LogDestination",0,REG_SZ,(const BYTE*)szFileName,MAX_PATH);
 | 
			
		||||
 | 
			
		||||
    FILE* pFile = fopen(szFileName,"wt");
 | 
			
		||||
    fprintf(pFile,this->szPlainText.c_str());
 | 
			
		||||
    fclose(pFile);
 | 
			
		||||
 | 
			
		||||
    CLogDisplay::Instance().AddEntry("[INFO] The log file has been saved",
 | 
			
		||||
            D3DCOLOR_ARGB(0xFF,0xFF,0xFF,0));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void CLogWindow::WriteLine(const char* message) {
 | 
			
		||||
    this->szPlainText.append(message);
 | 
			
		||||
    this->szPlainText.append("\r\n");
 | 
			
		||||
 | 
			
		||||
    if (0 != this->szText.length()) {
 | 
			
		||||
        this->szText.resize(this->szText.length()-1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    switch (message[0])
 | 
			
		||||
    {
 | 
			
		||||
    case 'e':
 | 
			
		||||
    case 'E':
 | 
			
		||||
        this->szText.append("{\\pard \\cf1 \\b \\fs18 ");
 | 
			
		||||
        break;
 | 
			
		||||
    case 'w':
 | 
			
		||||
    case 'W':
 | 
			
		||||
        this->szText.append("{\\pard \\cf2 \\b \\fs18 ");
 | 
			
		||||
        break;
 | 
			
		||||
    case 'i':
 | 
			
		||||
    case 'I':
 | 
			
		||||
        this->szText.append("{\\pard \\cf3 \\b \\fs18 ");
 | 
			
		||||
        break;
 | 
			
		||||
    case 'd':
 | 
			
		||||
    case 'D':
 | 
			
		||||
        this->szText.append("{\\pard \\cf4 \\b \\fs18 ");
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        this->szText.append("{\\pard \\cf5 \\b \\fs18 ");
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    std::string _message = message;
 | 
			
		||||
    for (unsigned int i = 0; i < _message.length();++i) {
 | 
			
		||||
        if ('\\' == _message[i] ||
 | 
			
		||||
            '}'  == _message[i] ||
 | 
			
		||||
            '{'  == _message[i]) {
 | 
			
		||||
            _message.insert(i++,"\\");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this->szText.append(_message);
 | 
			
		||||
    this->szText.append("\\par}}");
 | 
			
		||||
 | 
			
		||||
    if (this->bIsVisible && this->bUpdate) {
 | 
			
		||||
        SETTEXTEX sInfo;
 | 
			
		||||
        sInfo.flags = ST_DEFAULT;
 | 
			
		||||
        sInfo.codepage = CP_ACP;
 | 
			
		||||
 | 
			
		||||
        SendDlgItemMessage(this->hwnd,IDC_EDIT1,
 | 
			
		||||
            EM_SETTEXTEX,(WPARAM)&sInfo,( LPARAM)this->szText.c_str());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
} //! AssimpView
 | 
			
		||||
							
								
								
									
										133
									
								
								thirdparty/assimp/tools/assimp_view/LogWindow.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,133 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2012, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#if (!defined AV_LOG_WINDOW_H_INCLUDED)
 | 
			
		||||
#define AV_LOG_WINDOW_H_INCLUDE
 | 
			
		||||
 | 
			
		||||
namespace AssimpView
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //-------------------------------------------------------------------------------
 | 
			
		||||
    /** \brief Subclass of Assimp::LogStream used to add all log messages to the
 | 
			
		||||
     *         log window.
 | 
			
		||||
     */
 | 
			
		||||
    //-------------------------------------------------------------------------------
 | 
			
		||||
    class CMyLogStream : public Assimp::LogStream
 | 
			
		||||
    {
 | 
			
		||||
    public:
 | 
			
		||||
        /** @brief  Implementation of the abstract method   */
 | 
			
		||||
        void write( const char* message );
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //-------------------------------------------------------------------------------
 | 
			
		||||
    /** \brief Class to display log strings in a separate window
 | 
			
		||||
    */
 | 
			
		||||
    //-------------------------------------------------------------------------------
 | 
			
		||||
    class CLogWindow
 | 
			
		||||
    {
 | 
			
		||||
    private:
 | 
			
		||||
 | 
			
		||||
        friend class CMyLogStream;
 | 
			
		||||
        friend INT_PTR CALLBACK LogDialogProc( HWND hwndDlg, UINT uMsg,
 | 
			
		||||
            WPARAM wParam, LPARAM lParam );
 | 
			
		||||
 | 
			
		||||
        CLogWindow() : hwnd( NULL ), bIsVisible( false ), bUpdate( true ) {}
 | 
			
		||||
 | 
			
		||||
    public:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // Singleton accessors
 | 
			
		||||
        static CLogWindow s_cInstance;
 | 
			
		||||
        inline static CLogWindow& Instance()
 | 
			
		||||
        {
 | 
			
		||||
            return s_cInstance;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // initializes the log window
 | 
			
		||||
        void Init();
 | 
			
		||||
 | 
			
		||||
        // Shows the log window
 | 
			
		||||
        void Show();
 | 
			
		||||
 | 
			
		||||
        // Clears the log window
 | 
			
		||||
        void Clear();
 | 
			
		||||
 | 
			
		||||
        // Save the log window to an user-defined file
 | 
			
		||||
        void Save();
 | 
			
		||||
 | 
			
		||||
        // write a line to the log window
 | 
			
		||||
        void WriteLine( const char* message );
 | 
			
		||||
 | 
			
		||||
        // Set the bUpdate member
 | 
			
		||||
        inline void SetAutoUpdate( bool b )
 | 
			
		||||
        {
 | 
			
		||||
            this->bUpdate = b;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // updates the log file
 | 
			
		||||
        void Update();
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
 | 
			
		||||
        // Window handle
 | 
			
		||||
        HWND hwnd;
 | 
			
		||||
 | 
			
		||||
        // current text of the window (contains RTF tags)
 | 
			
		||||
        std::string szText;
 | 
			
		||||
        std::string szPlainText;
 | 
			
		||||
 | 
			
		||||
        // is the log window currently visible?
 | 
			
		||||
        bool bIsVisible;
 | 
			
		||||
 | 
			
		||||
        // Specified whether each new log message updates the log automatically
 | 
			
		||||
        bool bUpdate;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public:
 | 
			
		||||
        // associated log stream
 | 
			
		||||
        CMyLogStream* pcStream;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // AV_LOG_DISPLA
 | 
			
		||||
							
								
								
									
										1493
									
								
								thirdparty/assimp/tools/assimp_view/Material.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										208
									
								
								thirdparty/assimp/tools/assimp_view/MaterialManager.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,208 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2012, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include <map>
 | 
			
		||||
 | 
			
		||||
#include "AssetHelper.h"
 | 
			
		||||
 | 
			
		||||
namespace AssimpView
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    //-------------------------------------------------------------------------------
 | 
			
		||||
    /* Helper class to create, access and destroy materials
 | 
			
		||||
    */
 | 
			
		||||
    //-------------------------------------------------------------------------------
 | 
			
		||||
    class CMaterialManager
 | 
			
		||||
    {
 | 
			
		||||
    private:
 | 
			
		||||
 | 
			
		||||
        friend class CDisplay;
 | 
			
		||||
 | 
			
		||||
        // default constructor
 | 
			
		||||
        CMaterialManager()
 | 
			
		||||
            : m_iShaderCount( 0 ), sDefaultTexture() {}
 | 
			
		||||
 | 
			
		||||
        ~CMaterialManager() {
 | 
			
		||||
            if( sDefaultTexture ) {
 | 
			
		||||
                sDefaultTexture->Release();
 | 
			
		||||
            }
 | 
			
		||||
            Reset();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public:
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Singleton accessors
 | 
			
		||||
        static CMaterialManager s_cInstance;
 | 
			
		||||
        inline static CMaterialManager& Instance()
 | 
			
		||||
        {
 | 
			
		||||
            return s_cInstance;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Delete all resources of a given material
 | 
			
		||||
        //
 | 
			
		||||
        // Must be called before CreateMaterial() to prevent memory leaking
 | 
			
		||||
        void DeleteMaterial( AssetHelper::MeshHelper* pcIn );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Create the material for a mesh.
 | 
			
		||||
        //
 | 
			
		||||
        // The function checks whether an identical shader is already in use.
 | 
			
		||||
        // A shader is considered to be identical if it has the same input
 | 
			
		||||
        // signature and takes the same number of texture channels.
 | 
			
		||||
        int CreateMaterial( AssetHelper::MeshHelper* pcMesh,
 | 
			
		||||
            const aiMesh* pcSource );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Setup the material for a given mesh
 | 
			
		||||
        // pcMesh Mesh to be rendered
 | 
			
		||||
        // pcProj Projection matrix
 | 
			
		||||
        // aiMe Current world matrix
 | 
			
		||||
        // pcCam Camera matrix
 | 
			
		||||
        // vPos Position of the camera
 | 
			
		||||
        // TODO: Extract camera position from matrix ...
 | 
			
		||||
        //
 | 
			
		||||
        int SetupMaterial( AssetHelper::MeshHelper* pcMesh,
 | 
			
		||||
            const aiMatrix4x4& pcProj,
 | 
			
		||||
            const aiMatrix4x4& aiMe,
 | 
			
		||||
            const aiMatrix4x4& pcCam,
 | 
			
		||||
            const aiVector3D& vPos );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // End the material for a given mesh
 | 
			
		||||
        // Called after mesh rendering is complete
 | 
			
		||||
        // pcMesh Mesh object
 | 
			
		||||
        int EndMaterial( AssetHelper::MeshHelper* pcMesh );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Recreate all specular materials depending on the current
 | 
			
		||||
        // specularity settings
 | 
			
		||||
        //
 | 
			
		||||
        // Diffuse-only materials are ignored.
 | 
			
		||||
        // Must be called after specular highlights have been toggled
 | 
			
		||||
        int UpdateSpecularMaterials();
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // find a valid path to a texture file
 | 
			
		||||
        //
 | 
			
		||||
        // Handle 8.3 syntax correctly, search the environment of the
 | 
			
		||||
        // executable and the asset for a texture with a name very similar
 | 
			
		||||
        // to a given one
 | 
			
		||||
        int FindValidPath( aiString* p_szString );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Load a texture into memory and create a native D3D texture resource
 | 
			
		||||
        //
 | 
			
		||||
        // The function tries to find a valid path for a texture
 | 
			
		||||
        int LoadTexture( IDirect3DTexture9** p_ppiOut, aiString* szPath );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Getter for m_iShaderCount
 | 
			
		||||
        //
 | 
			
		||||
        inline unsigned int GetShaderCount()
 | 
			
		||||
        {
 | 
			
		||||
            return this->m_iShaderCount;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Reset the state of the class
 | 
			
		||||
        // Called whenever a new asset is loaded
 | 
			
		||||
        inline void Reset()
 | 
			
		||||
        {
 | 
			
		||||
            this->m_iShaderCount = 0;
 | 
			
		||||
            for( TextureCache::iterator it = sCachedTextures.begin(); it != sCachedTextures.end(); ++it ) {
 | 
			
		||||
                ( *it ).second->Release();
 | 
			
		||||
            }
 | 
			
		||||
            sCachedTextures.clear();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // find a valid path to a texture file
 | 
			
		||||
        //
 | 
			
		||||
        // Handle 8.3 syntax correctly, search the environment of the
 | 
			
		||||
        // executable and the asset for a texture with a name very similar
 | 
			
		||||
        // to a given one
 | 
			
		||||
        bool TryLongerPath( char* szTemp, aiString* p_szString );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Setup the default texture for a texture channel
 | 
			
		||||
        //
 | 
			
		||||
        // Generates a default checker pattern for a texture
 | 
			
		||||
        int SetDefaultTexture( IDirect3DTexture9** p_ppiOut );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Convert a height map to a normal map if necessary
 | 
			
		||||
        //
 | 
			
		||||
        // The function tries to detect the type of a texture automatically.
 | 
			
		||||
        // However, this won't work in every case.
 | 
			
		||||
        void HMtoNMIfNecessary( IDirect3DTexture9* piTexture,
 | 
			
		||||
            IDirect3DTexture9** piTextureOut,
 | 
			
		||||
            bool bWasOriginallyHM = true );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Search for non-opaque pixels in a texture
 | 
			
		||||
        //
 | 
			
		||||
        // A pixel is considered to be non-opaque if its alpha value is
 | 
			
		||||
        // less than 255
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        bool HasAlphaPixels( IDirect3DTexture9* piTexture );
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
 | 
			
		||||
        //
 | 
			
		||||
        // Specifies the number of different shaders generated for
 | 
			
		||||
        // the current asset. This number is incremented by CreateMaterial()
 | 
			
		||||
        // each time a shader isn't found in cache and needs to be created
 | 
			
		||||
        //
 | 
			
		||||
        unsigned int m_iShaderCount;
 | 
			
		||||
        IDirect3DTexture9* sDefaultTexture;
 | 
			
		||||
 | 
			
		||||
        typedef std::map<std::string, IDirect3DTexture9*> TextureCache;
 | 
			
		||||
        TextureCache sCachedTextures;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										164
									
								
								thirdparty/assimp/tools/assimp_view/MeshRenderer.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,164 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2019, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "assimp_view.h"
 | 
			
		||||
 | 
			
		||||
#include <map>
 | 
			
		||||
#include <functional>
 | 
			
		||||
 | 
			
		||||
namespace AssimpView {
 | 
			
		||||
 | 
			
		||||
CMeshRenderer CMeshRenderer::s_cInstance;
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
int CMeshRenderer::DrawUnsorted(unsigned int iIndex) {
 | 
			
		||||
    ai_assert(iIndex < g_pcAsset->pcScene->mNumMeshes);
 | 
			
		||||
 | 
			
		||||
    // set vertex and index buffer
 | 
			
		||||
    g_piDevice->SetStreamSource(0,g_pcAsset->apcMeshes[iIndex]->piVB,0,
 | 
			
		||||
        sizeof(AssetHelper::Vertex));
 | 
			
		||||
 | 
			
		||||
    g_piDevice->SetIndices(g_pcAsset->apcMeshes[iIndex]->piIB);
 | 
			
		||||
 | 
			
		||||
    D3DPRIMITIVETYPE type = D3DPT_POINTLIST;
 | 
			
		||||
    switch (g_pcAsset->pcScene->mMeshes[iIndex]->mPrimitiveTypes) {
 | 
			
		||||
        case aiPrimitiveType_POINT:
 | 
			
		||||
            type = D3DPT_POINTLIST;break;
 | 
			
		||||
        case aiPrimitiveType_LINE:
 | 
			
		||||
            type = D3DPT_LINELIST;break;
 | 
			
		||||
        case aiPrimitiveType_TRIANGLE:
 | 
			
		||||
            type = D3DPT_TRIANGLELIST;break;
 | 
			
		||||
    }
 | 
			
		||||
    // and draw the mesh
 | 
			
		||||
    g_piDevice->DrawIndexedPrimitive(type,
 | 
			
		||||
        0,0,
 | 
			
		||||
        g_pcAsset->pcScene->mMeshes[iIndex]->mNumVertices,0,
 | 
			
		||||
        g_pcAsset->pcScene->mMeshes[iIndex]->mNumFaces);
 | 
			
		||||
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
int CMeshRenderer::DrawSorted(unsigned int iIndex,const aiMatrix4x4& mWorld) {
 | 
			
		||||
    ai_assert(iIndex < g_pcAsset->pcScene->mNumMeshes);
 | 
			
		||||
 | 
			
		||||
    AssetHelper::MeshHelper* pcHelper = g_pcAsset->apcMeshes[iIndex];
 | 
			
		||||
    const aiMesh* pcMesh = g_pcAsset->pcScene->mMeshes[iIndex];
 | 
			
		||||
 | 
			
		||||
    if (!pcHelper || !pcMesh || !pcHelper->piIB)
 | 
			
		||||
        return -5;
 | 
			
		||||
 | 
			
		||||
    if (pcMesh->mPrimitiveTypes != aiPrimitiveType_TRIANGLE || pcMesh->HasBones() || g_sOptions.bNoAlphaBlending)
 | 
			
		||||
        return DrawUnsorted(iIndex);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // compute the position of the camera in worldspace
 | 
			
		||||
    aiMatrix4x4 mWorldInverse = mWorld;
 | 
			
		||||
    mWorldInverse.Inverse();
 | 
			
		||||
    mWorldInverse.Transpose();
 | 
			
		||||
    const aiVector3D vLocalCamera = mWorldInverse * g_sCamera.vPos;
 | 
			
		||||
 | 
			
		||||
    // well ... this is really funny now. We must compute their distance
 | 
			
		||||
    // from the camera. We take the average distance of a face and add it
 | 
			
		||||
    // to a map which sorts it
 | 
			
		||||
    std::map<float,unsigned int, std::greater<float> > smap;
 | 
			
		||||
 | 
			
		||||
    for (unsigned int iFace = 0; iFace < pcMesh->mNumFaces;++iFace)
 | 
			
		||||
    {
 | 
			
		||||
        const aiFace* pcFace = &pcMesh->mFaces[iFace];
 | 
			
		||||
        float fDist = 0.0f;
 | 
			
		||||
        for (unsigned int c = 0; c < 3;++c)
 | 
			
		||||
        {
 | 
			
		||||
            aiVector3D vPos = pcMesh->mVertices[pcFace->mIndices[c]];
 | 
			
		||||
            vPos -= vLocalCamera;
 | 
			
		||||
            fDist += vPos.SquareLength();
 | 
			
		||||
        }
 | 
			
		||||
        smap.insert(std::pair<float, unsigned int>(fDist,iFace));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // now we can lock the index buffer and rebuild it
 | 
			
		||||
    D3DINDEXBUFFER_DESC sDesc;
 | 
			
		||||
    pcHelper->piIB->GetDesc(&sDesc);
 | 
			
		||||
 | 
			
		||||
    if (D3DFMT_INDEX16 == sDesc.Format)
 | 
			
		||||
    {
 | 
			
		||||
        uint16_t* aiIndices;
 | 
			
		||||
        pcHelper->piIB->Lock(0,0,(void**)&aiIndices,D3DLOCK_DISCARD);
 | 
			
		||||
 | 
			
		||||
        for (std::map<float,unsigned int, std::greater<float> >::const_iterator
 | 
			
		||||
            i =  smap.begin();
 | 
			
		||||
            i != smap.end();++i)
 | 
			
		||||
        {
 | 
			
		||||
            const aiFace* pcFace =  &pcMesh->mFaces[(*i).second];
 | 
			
		||||
            *aiIndices++ = (uint16_t)pcFace->mIndices[0];
 | 
			
		||||
            *aiIndices++ = (uint16_t)pcFace->mIndices[1];
 | 
			
		||||
            *aiIndices++ = (uint16_t)pcFace->mIndices[2];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    else if (D3DFMT_INDEX32 == sDesc.Format)
 | 
			
		||||
    {
 | 
			
		||||
        uint32_t* aiIndices;
 | 
			
		||||
        pcHelper->piIB->Lock(0,0,(void**)&aiIndices,D3DLOCK_DISCARD);
 | 
			
		||||
 | 
			
		||||
        for (std::map<float,unsigned int, std::greater<float> >::const_iterator
 | 
			
		||||
            i =  smap.begin();
 | 
			
		||||
            i != smap.end();++i)
 | 
			
		||||
        {
 | 
			
		||||
            const aiFace* pcFace =  &pcMesh->mFaces[(*i).second];
 | 
			
		||||
            *aiIndices++ = (uint32_t)pcFace->mIndices[0];
 | 
			
		||||
            *aiIndices++ = (uint32_t)pcFace->mIndices[1];
 | 
			
		||||
            *aiIndices++ = (uint32_t)pcFace->mIndices[2];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    pcHelper->piIB->Unlock();
 | 
			
		||||
 | 
			
		||||
    // set vertex and index buffer
 | 
			
		||||
    g_piDevice->SetStreamSource(0,pcHelper->piVB,0,sizeof(AssetHelper::Vertex));
 | 
			
		||||
 | 
			
		||||
    // and draw the mesh
 | 
			
		||||
    g_piDevice->SetIndices(pcHelper->piIB);
 | 
			
		||||
    g_piDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,
 | 
			
		||||
        0,0,
 | 
			
		||||
        pcMesh->mNumVertices,0,
 | 
			
		||||
        pcMesh->mNumFaces);
 | 
			
		||||
 | 
			
		||||
    return 1;
 | 
			
		||||
}
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										99
									
								
								thirdparty/assimp/tools/assimp_view/MeshRenderer.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,99 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2012, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#if (!defined AV_MESH_RENDERER_H_INCLUDED)
 | 
			
		||||
#define AV_MESH_RENDERER_H_INCLUDED
 | 
			
		||||
 | 
			
		||||
namespace AssimpView {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //-------------------------------------------------------------------------------
 | 
			
		||||
    /* Helper class tp render meshes
 | 
			
		||||
    */
 | 
			
		||||
    //-------------------------------------------------------------------------------
 | 
			
		||||
    class CMeshRenderer
 | 
			
		||||
    {
 | 
			
		||||
    private:
 | 
			
		||||
 | 
			
		||||
        // default constructor
 | 
			
		||||
        CMeshRenderer()
 | 
			
		||||
 | 
			
		||||
        {
 | 
			
		||||
            // no other members to initialize
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public:
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Singleton accessors
 | 
			
		||||
        static CMeshRenderer s_cInstance;
 | 
			
		||||
        inline static CMeshRenderer& Instance()
 | 
			
		||||
        {
 | 
			
		||||
            return s_cInstance;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Draw a mesh in the global mesh list using the current pipeline state
 | 
			
		||||
        // iIndex Index of the mesh to be drawn
 | 
			
		||||
        //
 | 
			
		||||
        // The function draws all faces in order, regardless of their distance
 | 
			
		||||
        int DrawUnsorted( unsigned int iIndex );
 | 
			
		||||
 | 
			
		||||
        //------------------------------------------------------------------
 | 
			
		||||
        // Draw a mesh in the global mesh list using the current pipeline state
 | 
			
		||||
        // iIndex Index of the mesh to be drawn
 | 
			
		||||
        //
 | 
			
		||||
        // The method sorts all vertices by their distance (back to front)
 | 
			
		||||
        //
 | 
			
		||||
        // mWorld World matrix for the node
 | 
			
		||||
        int DrawSorted( unsigned int iIndex,
 | 
			
		||||
            const aiMatrix4x4& mWorld );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
#endif //!! include guard
 | 
			
		||||
							
								
								
									
										2434
									
								
								thirdparty/assimp/tools/assimp_view/MessageProc.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										2
									
								
								thirdparty/assimp/tools/assimp_view/NOTE@help.rtf.txt
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,2 @@
 | 
			
		||||
text1.bin is the corresponding bin file to be included with the executable file.
 | 
			
		||||
When updating the rich formatted text inside Visual Studio, a terminating 0 character must be appended
 | 
			
		||||
							
								
								
									
										155
									
								
								thirdparty/assimp/tools/assimp_view/Normals.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,155 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2019, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include "assimp_view.h"
 | 
			
		||||
 | 
			
		||||
#include "PostProcessing/GenFaceNormalsProcess.h"
 | 
			
		||||
#include "PostProcessing/GenVertexNormalsProcess.h"
 | 
			
		||||
#include "PostProcessing/JoinVerticesProcess.h"
 | 
			
		||||
#include "PostProcessing/CalcTangentsProcess.h"
 | 
			
		||||
#include "PostProcessing/MakeVerboseFormat.h"
 | 
			
		||||
 | 
			
		||||
namespace AssimpView {
 | 
			
		||||
 | 
			
		||||
using namespace Assimp;
 | 
			
		||||
 | 
			
		||||
bool g_bWasFlipped = false;
 | 
			
		||||
float g_smoothAngle = 80.f;
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
// Flip all normal vectors
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void AssetHelper::FlipNormalsInt() {
 | 
			
		||||
    // invert all normal vectors
 | 
			
		||||
    for (unsigned int i = 0; i < this->pcScene->mNumMeshes;++i) {
 | 
			
		||||
        aiMesh* pcMesh = this->pcScene->mMeshes[i];
 | 
			
		||||
 | 
			
		||||
        if (!pcMesh->mNormals) {
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for (unsigned int a = 0; a < pcMesh->mNumVertices;++a){
 | 
			
		||||
            pcMesh->mNormals[a] *= -1.0f;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void AssetHelper::FlipNormals() {
 | 
			
		||||
    FlipNormalsInt();
 | 
			
		||||
 | 
			
		||||
    // recreate native data
 | 
			
		||||
    DeleteAssetData(true);
 | 
			
		||||
    CreateAssetData();
 | 
			
		||||
    g_bWasFlipped = ! g_bWasFlipped;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
// Set the normal set of the scene
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void AssetHelper::SetNormalSet(unsigned int iSet) {
 | 
			
		||||
    // we need to build an unique set of vertices for this ...
 | 
			
		||||
    {
 | 
			
		||||
        MakeVerboseFormatProcess* pcProcess = new MakeVerboseFormatProcess();
 | 
			
		||||
        pcProcess->Execute(pcScene);
 | 
			
		||||
        delete pcProcess;
 | 
			
		||||
 | 
			
		||||
        for (unsigned int i = 0; i < pcScene->mNumMeshes;++i) {
 | 
			
		||||
            if (!apcMeshes[i]->pvOriginalNormals) {
 | 
			
		||||
                apcMeshes[i]->pvOriginalNormals = new aiVector3D[pcScene->mMeshes[i]->mNumVertices];
 | 
			
		||||
                memcpy( apcMeshes[i]->pvOriginalNormals,pcScene->mMeshes[i]->mNormals,
 | 
			
		||||
                    pcScene->mMeshes[i]->mNumVertices * sizeof(aiVector3D));
 | 
			
		||||
            }
 | 
			
		||||
            delete[] pcScene->mMeshes[i]->mNormals;
 | 
			
		||||
            pcScene->mMeshes[i]->mNormals = nullptr;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // now we can start to calculate a new set of normals
 | 
			
		||||
    if (HARD == iSet) {
 | 
			
		||||
        GenFaceNormalsProcess* pcProcess = new GenFaceNormalsProcess();
 | 
			
		||||
        pcProcess->Execute(pcScene);
 | 
			
		||||
        FlipNormalsInt();
 | 
			
		||||
        delete pcProcess;
 | 
			
		||||
    } else if (SMOOTH == iSet) {
 | 
			
		||||
        GenVertexNormalsProcess* pcProcess = new GenVertexNormalsProcess();
 | 
			
		||||
        pcProcess->SetMaxSmoothAngle((float)AI_DEG_TO_RAD(g_smoothAngle));
 | 
			
		||||
        pcProcess->Execute(pcScene);
 | 
			
		||||
        FlipNormalsInt();
 | 
			
		||||
        delete pcProcess;
 | 
			
		||||
    } else if (ORIGINAL == iSet) {
 | 
			
		||||
        for (unsigned int i = 0; i < pcScene->mNumMeshes;++i) {
 | 
			
		||||
            if (apcMeshes[i]->pvOriginalNormals) {
 | 
			
		||||
                delete[] pcScene->mMeshes[i]->mNormals;
 | 
			
		||||
                pcScene->mMeshes[i]->mNormals = apcMeshes[i]->pvOriginalNormals;
 | 
			
		||||
                apcMeshes[i]->pvOriginalNormals = nullptr;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // recalculate tangents and bitangents
 | 
			
		||||
    Assimp::BaseProcess* pcProcess = new CalcTangentsProcess();
 | 
			
		||||
    pcProcess->Execute(pcScene);
 | 
			
		||||
    delete pcProcess;
 | 
			
		||||
 | 
			
		||||
    // join the mesh vertices again
 | 
			
		||||
    pcProcess = new JoinVerticesProcess();
 | 
			
		||||
    pcProcess->Execute(pcScene);
 | 
			
		||||
    delete pcProcess;
 | 
			
		||||
 | 
			
		||||
    iNormalSet = iSet;
 | 
			
		||||
 | 
			
		||||
    if (g_bWasFlipped) {
 | 
			
		||||
        // invert all normal vectors
 | 
			
		||||
        for (unsigned int i = 0; i < pcScene->mNumMeshes;++i) {
 | 
			
		||||
            aiMesh* pcMesh = pcScene->mMeshes[i];
 | 
			
		||||
            for (unsigned int a = 0; a < pcMesh->mNumVertices;++a) {
 | 
			
		||||
                pcMesh->mNormals[a] *= -1.0f;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // recreate native data
 | 
			
		||||
    DeleteAssetData(true);
 | 
			
		||||
    CreateAssetData();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										113
									
								
								thirdparty/assimp/tools/assimp_view/RenderOptions.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,113 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2012, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#if (!defined AV_RO_H_INCLUDED)
 | 
			
		||||
#define AV_RO_H_INCLUDED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
/** \brief Class to manage render options. One global instance
 | 
			
		||||
*/
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
class RenderOptions
 | 
			
		||||
    {
 | 
			
		||||
    public:
 | 
			
		||||
 | 
			
		||||
        // enumerates different drawing modi. POINT is currently
 | 
			
		||||
        // not supported and probably will never be.
 | 
			
		||||
        enum DrawMode {NORMAL, WIREFRAME, POINT};
 | 
			
		||||
 | 
			
		||||
        inline RenderOptions    (void) :
 | 
			
		||||
            bMultiSample    (true),
 | 
			
		||||
            bSuperSample    (false),
 | 
			
		||||
            bRenderMats     (true),
 | 
			
		||||
            bRenderNormals  (false),
 | 
			
		||||
            b3Lights        (false),
 | 
			
		||||
            bLightRotate    (false),
 | 
			
		||||
            bRotate         (true),
 | 
			
		||||
            bLowQuality     (false),
 | 
			
		||||
            bNoSpecular     (false),
 | 
			
		||||
            bStereoView     (false),
 | 
			
		||||
            bNoAlphaBlending(false),
 | 
			
		||||
            eDrawMode       (NORMAL),
 | 
			
		||||
            bCulling        (false),
 | 
			
		||||
            bSkeleton       (false)
 | 
			
		||||
 | 
			
		||||
            {}
 | 
			
		||||
 | 
			
		||||
        bool bMultiSample;
 | 
			
		||||
 | 
			
		||||
        // SuperSampling has not yet been implemented
 | 
			
		||||
        bool bSuperSample;
 | 
			
		||||
 | 
			
		||||
        // Display the real material of the object
 | 
			
		||||
        bool bRenderMats;
 | 
			
		||||
 | 
			
		||||
        // Render the normals
 | 
			
		||||
        bool bRenderNormals;
 | 
			
		||||
 | 
			
		||||
        // Use 2 directional light sources
 | 
			
		||||
        bool b3Lights;
 | 
			
		||||
 | 
			
		||||
        // Automatically rotate the light source(s)
 | 
			
		||||
        bool bLightRotate;
 | 
			
		||||
 | 
			
		||||
        // Automatically rotate the asset around its origin
 | 
			
		||||
        bool bRotate;
 | 
			
		||||
 | 
			
		||||
        // use standard lambertian lighting
 | 
			
		||||
        bool bLowQuality;
 | 
			
		||||
 | 
			
		||||
        // disable specular lighting got all elements in the scene
 | 
			
		||||
        bool bNoSpecular;
 | 
			
		||||
 | 
			
		||||
        // enable stereo view
 | 
			
		||||
        bool bStereoView;
 | 
			
		||||
 | 
			
		||||
        bool bNoAlphaBlending;
 | 
			
		||||
 | 
			
		||||
        // wireframe or solid rendering?
 | 
			
		||||
        DrawMode eDrawMode;
 | 
			
		||||
 | 
			
		||||
        bool bCulling,bSkeleton;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
#endif // !! IG
 | 
			
		||||
							
								
								
									
										233
									
								
								thirdparty/assimp/tools/assimp_view/SceneAnimator.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,233 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2019, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/** @file SceneAnimator.cpp
 | 
			
		||||
 *  @brief Implementation of the utility class SceneAnimator
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "assimp_view.h"
 | 
			
		||||
 | 
			
		||||
using namespace AssimpView;
 | 
			
		||||
 | 
			
		||||
const aiMatrix4x4 IdentityMatrix;
 | 
			
		||||
 | 
			
		||||
// ------------------------------------------------------------------------------------------------
 | 
			
		||||
// Constructor for a given scene.
 | 
			
		||||
SceneAnimator::SceneAnimator( const aiScene* pScene, size_t pAnimIndex)
 | 
			
		||||
: mScene( pScene )
 | 
			
		||||
, mCurrentAnimIndex( -1 )
 | 
			
		||||
, mAnimEvaluator( nullptr )
 | 
			
		||||
, mRootNode( nullptr ) {
 | 
			
		||||
    // build the nodes-for-bones table
 | 
			
		||||
    for (unsigned int i = 0; i < pScene->mNumMeshes;++i) {
 | 
			
		||||
        const aiMesh* mesh = pScene->mMeshes[i];
 | 
			
		||||
        for (unsigned int n = 0; n < mesh->mNumBones;++n) {
 | 
			
		||||
            const aiBone* bone = mesh->mBones[n];
 | 
			
		||||
 | 
			
		||||
            mBoneNodesByName[bone->mName.data] = pScene->mRootNode->FindNode(bone->mName);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // changing the current animation also creates the node tree for this animation
 | 
			
		||||
    SetAnimIndex( pAnimIndex);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ------------------------------------------------------------------------------------------------
 | 
			
		||||
// Destructor
 | 
			
		||||
SceneAnimator::~SceneAnimator() {
 | 
			
		||||
    delete mRootNode;
 | 
			
		||||
    delete mAnimEvaluator;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ------------------------------------------------------------------------------------------------
 | 
			
		||||
// Sets the animation to use for playback.
 | 
			
		||||
void SceneAnimator::SetAnimIndex( size_t pAnimIndex) {
 | 
			
		||||
    // no change
 | 
			
		||||
    if (pAnimIndex == static_cast<unsigned int>( mCurrentAnimIndex ) ) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // kill data of the previous anim
 | 
			
		||||
    delete mRootNode;  mRootNode = nullptr;
 | 
			
		||||
    delete mAnimEvaluator;  mAnimEvaluator = nullptr;
 | 
			
		||||
    mNodesByName.clear();
 | 
			
		||||
 | 
			
		||||
    mCurrentAnimIndex = static_cast<int>( pAnimIndex );
 | 
			
		||||
 | 
			
		||||
    // create the internal node tree. Do this even in case of invalid animation index
 | 
			
		||||
    // so that the transformation matrices are properly set up to mimic the current scene
 | 
			
		||||
    mRootNode = CreateNodeTree( mScene->mRootNode, nullptr);
 | 
			
		||||
 | 
			
		||||
    // invalid anim index
 | 
			
		||||
    if (static_cast<unsigned int>( mCurrentAnimIndex )>= mScene->mNumAnimations) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // create an evaluator for this animation
 | 
			
		||||
    mAnimEvaluator = new AnimEvaluator( mScene->mAnimations[mCurrentAnimIndex]);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ------------------------------------------------------------------------------------------------
 | 
			
		||||
// Calculates the node transformations for the scene.
 | 
			
		||||
void SceneAnimator::Calculate( double pTime) {
 | 
			
		||||
    // invalid anim
 | 
			
		||||
    if (!mAnimEvaluator) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // calculate current local transformations
 | 
			
		||||
    mAnimEvaluator->Evaluate( pTime);
 | 
			
		||||
 | 
			
		||||
    // and update all node transformations with the results
 | 
			
		||||
    UpdateTransforms( mRootNode, mAnimEvaluator->GetTransformations());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ------------------------------------------------------------------------------------------------
 | 
			
		||||
// Retrieves the most recent local transformation matrix for the given node.
 | 
			
		||||
const aiMatrix4x4& SceneAnimator::GetLocalTransform( const aiNode* node) const {
 | 
			
		||||
    NodeMap::const_iterator it = mNodesByName.find( node);
 | 
			
		||||
    if (it == mNodesByName.end()) {
 | 
			
		||||
        return IdentityMatrix;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return it->second->mLocalTransform;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ------------------------------------------------------------------------------------------------
 | 
			
		||||
// Retrieves the most recent global transformation matrix for the given node.
 | 
			
		||||
const aiMatrix4x4& SceneAnimator::GetGlobalTransform( const aiNode* node) const {
 | 
			
		||||
    NodeMap::const_iterator it = mNodesByName.find( node);
 | 
			
		||||
    if (it == mNodesByName.end()) {
 | 
			
		||||
        return IdentityMatrix;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return it->second->mGlobalTransform;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ------------------------------------------------------------------------------------------------
 | 
			
		||||
// Calculates the bone matrices for the given mesh.
 | 
			
		||||
const std::vector<aiMatrix4x4>& SceneAnimator::GetBoneMatrices( const aiNode* pNode, size_t pMeshIndex /* = 0 */) {
 | 
			
		||||
    ai_assert( pMeshIndex < pNode->mNumMeshes);
 | 
			
		||||
    size_t meshIndex = pNode->mMeshes[pMeshIndex];
 | 
			
		||||
    ai_assert( meshIndex < mScene->mNumMeshes);
 | 
			
		||||
    const aiMesh* mesh = mScene->mMeshes[meshIndex];
 | 
			
		||||
 | 
			
		||||
    // resize array and initialize it with identity matrices
 | 
			
		||||
    mTransforms.resize( mesh->mNumBones, aiMatrix4x4());
 | 
			
		||||
 | 
			
		||||
    // calculate the mesh's inverse global transform
 | 
			
		||||
    aiMatrix4x4 globalInverseMeshTransform = GetGlobalTransform( pNode);
 | 
			
		||||
    globalInverseMeshTransform.Inverse();
 | 
			
		||||
 | 
			
		||||
    // Bone matrices transform from mesh coordinates in bind pose to mesh coordinates in skinned pose
 | 
			
		||||
    // Therefore the formula is offsetMatrix * currentGlobalTransform * inverseCurrentMeshTransform
 | 
			
		||||
    for( size_t a = 0; a < mesh->mNumBones; ++a) {
 | 
			
		||||
        const aiBone* bone = mesh->mBones[a];
 | 
			
		||||
        const aiMatrix4x4& currentGlobalTransform = GetGlobalTransform( mBoneNodesByName[ bone->mName.data ]);
 | 
			
		||||
        mTransforms[a] = globalInverseMeshTransform * currentGlobalTransform * bone->mOffsetMatrix;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // and return the result
 | 
			
		||||
    return mTransforms;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ------------------------------------------------------------------------------------------------
 | 
			
		||||
// Recursively creates an internal node structure matching the current scene and animation.
 | 
			
		||||
SceneAnimNode* SceneAnimator::CreateNodeTree( aiNode* pNode, SceneAnimNode* pParent) {
 | 
			
		||||
    // create a node
 | 
			
		||||
    SceneAnimNode* internalNode = new SceneAnimNode( pNode->mName.data);
 | 
			
		||||
    internalNode->mParent = pParent;
 | 
			
		||||
    mNodesByName[pNode] = internalNode;
 | 
			
		||||
 | 
			
		||||
    // copy its transformation
 | 
			
		||||
    internalNode->mLocalTransform = pNode->mTransformation;
 | 
			
		||||
    CalculateGlobalTransform( internalNode);
 | 
			
		||||
 | 
			
		||||
    // find the index of the animation track affecting this node, if any
 | 
			
		||||
    if(static_cast<unsigned int>( mCurrentAnimIndex ) < mScene->mNumAnimations) {
 | 
			
		||||
        internalNode->mChannelIndex = -1;
 | 
			
		||||
        const aiAnimation* currentAnim = mScene->mAnimations[mCurrentAnimIndex];
 | 
			
		||||
        for( unsigned int a = 0; a < currentAnim->mNumChannels; a++) {
 | 
			
		||||
            if( currentAnim->mChannels[a]->mNodeName.data == internalNode->mName) {
 | 
			
		||||
                internalNode->mChannelIndex = a;
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // continue for all child nodes and assign the created internal nodes as our children
 | 
			
		||||
    for( unsigned int a = 0; a < pNode->mNumChildren; ++a ) {
 | 
			
		||||
        SceneAnimNode* childNode = CreateNodeTree( pNode->mChildren[a], internalNode);
 | 
			
		||||
        internalNode->mChildren.push_back( childNode);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return internalNode;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ------------------------------------------------------------------------------------------------
 | 
			
		||||
// Recursively updates the internal node transformations from the given matrix array
 | 
			
		||||
void SceneAnimator::UpdateTransforms( SceneAnimNode* pNode, const std::vector<aiMatrix4x4>& pTransforms) {
 | 
			
		||||
    // update node local transform
 | 
			
		||||
    if( pNode->mChannelIndex != -1) {
 | 
			
		||||
        ai_assert(static_cast<unsigned int>( pNode->mChannelIndex ) < pTransforms.size());
 | 
			
		||||
        pNode->mLocalTransform = pTransforms[pNode->mChannelIndex];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // update global transform as well
 | 
			
		||||
    CalculateGlobalTransform( pNode);
 | 
			
		||||
 | 
			
		||||
    // continue for all children
 | 
			
		||||
    for (std::vector<SceneAnimNode*>::iterator it = pNode->mChildren.begin(); it != pNode->mChildren.end(); ++it) {
 | 
			
		||||
        UpdateTransforms(*it, pTransforms);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ------------------------------------------------------------------------------------------------
 | 
			
		||||
// Calculates the global transformation matrix for the given internal node
 | 
			
		||||
void SceneAnimator::CalculateGlobalTransform( SceneAnimNode* pInternalNode) {
 | 
			
		||||
    // concatenate all parent transforms to get the global transform for this node
 | 
			
		||||
    pInternalNode->mGlobalTransform = pInternalNode->mLocalTransform;
 | 
			
		||||
    SceneAnimNode* node = pInternalNode->mParent;
 | 
			
		||||
    while( node) {
 | 
			
		||||
        pInternalNode->mGlobalTransform = node->mLocalTransform * pInternalNode->mGlobalTransform;
 | 
			
		||||
        node = node->mParent;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										249
									
								
								thirdparty/assimp/tools/assimp_view/SceneAnimator.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,249 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2019, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/** @file SceneAnimator.h
 | 
			
		||||
 *  Manages animations for a given scene and calculates present
 | 
			
		||||
 *  transformations for all nodes
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef AV_SCENEANIMATOR_H_INCLUDED
 | 
			
		||||
#define AV_SCENEANIMATOR_H_INCLUDED
 | 
			
		||||
 | 
			
		||||
#include <map>
 | 
			
		||||
 | 
			
		||||
namespace AssimpView {
 | 
			
		||||
 | 
			
		||||
// ---------------------------------------------------------------------------------
 | 
			
		||||
/** A little tree structure to match the scene's node structure, but holding
 | 
			
		||||
 *  additional data. Needs to be public to allow using it in templates at
 | 
			
		||||
 *  certain compilers.
 | 
			
		||||
 */
 | 
			
		||||
struct SceneAnimNode {
 | 
			
		||||
    std::string mName;
 | 
			
		||||
    SceneAnimNode* mParent;
 | 
			
		||||
    std::vector<SceneAnimNode*> mChildren;
 | 
			
		||||
 | 
			
		||||
    //! most recently calculated local transform
 | 
			
		||||
    aiMatrix4x4 mLocalTransform;
 | 
			
		||||
 | 
			
		||||
    //! same, but in world space
 | 
			
		||||
    aiMatrix4x4 mGlobalTransform;
 | 
			
		||||
 | 
			
		||||
    //!  index in the current animation's channel array. -1 if not animated.
 | 
			
		||||
    int mChannelIndex;
 | 
			
		||||
 | 
			
		||||
    //! Default construction
 | 
			
		||||
    SceneAnimNode()
 | 
			
		||||
    : mName()
 | 
			
		||||
    , mParent(nullptr)
 | 
			
		||||
    , mChildren()
 | 
			
		||||
    , mLocalTransform()
 | 
			
		||||
    , mGlobalTransform()
 | 
			
		||||
    , mChannelIndex(-1) {
 | 
			
		||||
        // empty
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //! Construction from a given name
 | 
			
		||||
    SceneAnimNode( const std::string& pName)
 | 
			
		||||
    : mName( pName)
 | 
			
		||||
    , mParent(nullptr)
 | 
			
		||||
    , mChildren()
 | 
			
		||||
    , mLocalTransform()
 | 
			
		||||
    , mGlobalTransform()
 | 
			
		||||
    , mChannelIndex(-1) {
 | 
			
		||||
        // empty
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //! Destruct all children recursively
 | 
			
		||||
    ~SceneAnimNode() {
 | 
			
		||||
        for (std::vector<SceneAnimNode*>::iterator it = mChildren.begin(); it != mChildren.end(); ++it) {
 | 
			
		||||
            delete *it;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ---------------------------------------------------------------------------------
 | 
			
		||||
/** Calculates the animated node transformations for a given scene and timestamp.
 | 
			
		||||
 *
 | 
			
		||||
 *  Create an instance for a aiScene you want to animate and set the current animation
 | 
			
		||||
 *  to play. You can then have the instance calculate the current pose for all nodes
 | 
			
		||||
 *  by calling Calculate() for a given timestamp. After this you can retrieve the
 | 
			
		||||
 *  present transformation for a given node by calling GetLocalTransform() or
 | 
			
		||||
 *  GetGlobalTransform(). A full set of bone matrices can be retrieved by
 | 
			
		||||
 *  GetBoneMatrices() for a given mesh.
 | 
			
		||||
 */
 | 
			
		||||
class SceneAnimator {
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
    // ----------------------------------------------------------------------------
 | 
			
		||||
    /** Constructor for a given scene.
 | 
			
		||||
     *
 | 
			
		||||
     * The object keeps a reference to the scene during its lifetime, but
 | 
			
		||||
     * ownership stays at the caller.
 | 
			
		||||
     * @param pScene The scene to animate.
 | 
			
		||||
     * @param pAnimIndex [optional] Index of the animation to play. Assumed to
 | 
			
		||||
     *  be 0 if not given.
 | 
			
		||||
     */
 | 
			
		||||
    SceneAnimator( const aiScene* pScene, size_t pAnimIndex = 0);
 | 
			
		||||
 | 
			
		||||
    /** Destructor */
 | 
			
		||||
    ~SceneAnimator();
 | 
			
		||||
 | 
			
		||||
    // ----------------------------------------------------------------------------
 | 
			
		||||
    /** Sets the animation to use for playback. This also recreates the internal
 | 
			
		||||
     * mapping structures, which might take a few cycles.
 | 
			
		||||
     * @param pAnimIndex Index of the animation in the scene's animation array
 | 
			
		||||
     */
 | 
			
		||||
    void SetAnimIndex( size_t pAnimIndex);
 | 
			
		||||
 | 
			
		||||
    // ----------------------------------------------------------------------------
 | 
			
		||||
    /** Calculates the node transformations for the scene. Call this to get
 | 
			
		||||
     * uptodate results before calling one of the getters.
 | 
			
		||||
     * @param pTime Current time. Can be an arbitrary range.
 | 
			
		||||
     */
 | 
			
		||||
    void Calculate( double pTime);
 | 
			
		||||
 | 
			
		||||
    // ----------------------------------------------------------------------------
 | 
			
		||||
    /** Retrieves the most recent local transformation matrix for the given node.
 | 
			
		||||
     *
 | 
			
		||||
     * The returned matrix is in the node's parent's local space, just like the
 | 
			
		||||
     * original node's transformation matrix. If the node is not animated, the
 | 
			
		||||
     * node's original transformation is returned so that you can safely use or
 | 
			
		||||
     * assign it to the node itsself. If there is no node with the given name,
 | 
			
		||||
     * the identity matrix is returned. All transformations are updated whenever
 | 
			
		||||
     * Calculate() is called.
 | 
			
		||||
     * @param pNodeName Name of the node
 | 
			
		||||
     * @return A reference to the node's most recently calculated local
 | 
			
		||||
     *   transformation matrix.
 | 
			
		||||
     */
 | 
			
		||||
    const aiMatrix4x4& GetLocalTransform( const aiNode* node) const;
 | 
			
		||||
 | 
			
		||||
    // ----------------------------------------------------------------------------
 | 
			
		||||
    /** Retrieves the most recent global transformation matrix for the given node.
 | 
			
		||||
     *
 | 
			
		||||
     * The returned matrix is in world space, which is the same coordinate space
 | 
			
		||||
     * as the transformation of the scene's root node. If the node is not animated,
 | 
			
		||||
     * the node's original transformation is returned so that you can safely use or
 | 
			
		||||
     * assign it to the node itsself. If there is no node with the given name, the
 | 
			
		||||
     * identity matrix is returned. All transformations are updated whenever
 | 
			
		||||
     * Calculate() is called.
 | 
			
		||||
     * @param pNodeName Name of the node
 | 
			
		||||
     * @return A reference to the node's most recently calculated global
 | 
			
		||||
     *   transformation matrix.
 | 
			
		||||
     */
 | 
			
		||||
    const aiMatrix4x4& GetGlobalTransform( const aiNode* node) const;
 | 
			
		||||
 | 
			
		||||
    // ----------------------------------------------------------------------------
 | 
			
		||||
    /** Calculates the bone matrices for the given mesh.
 | 
			
		||||
     *
 | 
			
		||||
     * Each bone matrix transforms from mesh space in bind pose to mesh space in
 | 
			
		||||
     * skinned pose, it does not contain the mesh's world matrix. Thus the usual
 | 
			
		||||
     * matrix chain for using in the vertex shader is
 | 
			
		||||
     * @code
 | 
			
		||||
     * boneMatrix * worldMatrix * viewMatrix * projMatrix
 | 
			
		||||
     * @endcode
 | 
			
		||||
     * @param pNode The node carrying the mesh.
 | 
			
		||||
     * @param pMeshIndex Index of the mesh in the node's mesh array. The NODE's
 | 
			
		||||
     *   mesh array, not  the scene's mesh array! Leave out to use the first mesh
 | 
			
		||||
     *   of the node, which is usually also the only one.
 | 
			
		||||
     * @return A reference to a vector of bone matrices. Stays stable till the
 | 
			
		||||
     *   next call to GetBoneMatrices();
 | 
			
		||||
     */
 | 
			
		||||
    const std::vector<aiMatrix4x4>& GetBoneMatrices( const aiNode* pNode,
 | 
			
		||||
        size_t pMeshIndex = 0);
 | 
			
		||||
 | 
			
		||||
    // ----------------------------------------------------------------------------
 | 
			
		||||
    /** @brief Get the current animation index
 | 
			
		||||
     */
 | 
			
		||||
    size_t CurrentAnimIndex() const {
 | 
			
		||||
        return mCurrentAnimIndex;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // ----------------------------------------------------------------------------
 | 
			
		||||
    /** @brief Get the current animation or NULL
 | 
			
		||||
     */
 | 
			
		||||
    aiAnimation* CurrentAnim() const {
 | 
			
		||||
        return  static_cast<unsigned int>( mCurrentAnimIndex ) < mScene->mNumAnimations ? mScene->mAnimations[ mCurrentAnimIndex ] : NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
 | 
			
		||||
    /** Recursively creates an internal node structure matching the
 | 
			
		||||
     *  current scene and animation.
 | 
			
		||||
     */
 | 
			
		||||
    SceneAnimNode* CreateNodeTree( aiNode* pNode, SceneAnimNode* pParent);
 | 
			
		||||
 | 
			
		||||
    /** Recursively updates the internal node transformations from the
 | 
			
		||||
     *  given matrix array
 | 
			
		||||
     */
 | 
			
		||||
    void UpdateTransforms( SceneAnimNode* pNode, const std::vector<aiMatrix4x4>& pTransforms);
 | 
			
		||||
 | 
			
		||||
    /** Calculates the global transformation matrix for the given internal node */
 | 
			
		||||
    void CalculateGlobalTransform( SceneAnimNode* pInternalNode);
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
    /** The scene we're operating on */
 | 
			
		||||
    const aiScene* mScene;
 | 
			
		||||
 | 
			
		||||
    /** Current animation index */
 | 
			
		||||
    int mCurrentAnimIndex;
 | 
			
		||||
 | 
			
		||||
    /** The AnimEvaluator we use to calculate the current pose for the current animation */
 | 
			
		||||
    AnimEvaluator* mAnimEvaluator;
 | 
			
		||||
 | 
			
		||||
    /** Root node of the internal scene structure */
 | 
			
		||||
    SceneAnimNode* mRootNode;
 | 
			
		||||
 | 
			
		||||
    /** Name to node map to quickly find nodes by their name */
 | 
			
		||||
    typedef std::map<const aiNode*, SceneAnimNode*> NodeMap;
 | 
			
		||||
    NodeMap mNodesByName;
 | 
			
		||||
 | 
			
		||||
    /** Name to node map to quickly find nodes for given bones by their name */
 | 
			
		||||
    typedef std::map<const char*, const aiNode*> BoneMap;
 | 
			
		||||
    BoneMap mBoneNodesByName;
 | 
			
		||||
 | 
			
		||||
    /** Array to return transformations results inside. */
 | 
			
		||||
    std::vector<aiMatrix4x4> mTransforms;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
} // end of namespace AssimpView
 | 
			
		||||
 | 
			
		||||
#endif // AV_SCENEANIMATOR_H_INCLUDED
 | 
			
		||||
							
								
								
									
										1410
									
								
								thirdparty/assimp/tools/assimp_view/Shaders.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										63
									
								
								thirdparty/assimp/tools/assimp_view/Shaders.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,63 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2012, assimp team
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#if (!defined AV_SHADERS_H_INCLUDED)
 | 
			
		||||
#define AV_SHADERS_H_INCLUDED
 | 
			
		||||
 | 
			
		||||
// Shader used for rendering a skybox background
 | 
			
		||||
extern std::string  g_szSkyboxShader;
 | 
			
		||||
 | 
			
		||||
// Shader used for visualizing normal vectors
 | 
			
		||||
extern std::string  g_szNormalsShader;
 | 
			
		||||
 | 
			
		||||
// Default shader
 | 
			
		||||
extern std::string  g_szDefaultShader;
 | 
			
		||||
 | 
			
		||||
// Material shader
 | 
			
		||||
extern std::string  g_szMaterialShader;
 | 
			
		||||
 | 
			
		||||
// Shader used to draw the yellow circle on top of everything
 | 
			
		||||
extern std::string  g_szPassThroughShader;
 | 
			
		||||
 | 
			
		||||
// Shader used to draw the checker pattern background for the texture view
 | 
			
		||||
extern std::string  g_szCheckerBackgroundShader;
 | 
			
		||||
 | 
			
		||||
#endif // !! AV_SHADERS_H_INCLUDED
 | 
			
		||||
							
								
								
									
										1178
									
								
								thirdparty/assimp/tools/assimp_view/assimp_view.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										282
									
								
								thirdparty/assimp/tools/assimp_view/assimp_view.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,282 @@
 | 
			
		||||
/*
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
Open Asset Import Library (assimp)
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2006-2019, assimp team
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
All rights reserved.
 | 
			
		||||
 | 
			
		||||
Redistribution and use of this software in source and binary forms,
 | 
			
		||||
with or without modification, are permitted provided that the following
 | 
			
		||||
conditions are met:
 | 
			
		||||
 | 
			
		||||
* Redistributions of source code must retain the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer.
 | 
			
		||||
 | 
			
		||||
* Redistributions in binary form must reproduce the above
 | 
			
		||||
  copyright notice, this list of conditions and the
 | 
			
		||||
  following disclaimer in the documentation and/or other
 | 
			
		||||
  materials provided with the distribution.
 | 
			
		||||
 | 
			
		||||
* Neither the name of the assimp team, nor the names of its
 | 
			
		||||
  contributors may be used to endorse or promote products
 | 
			
		||||
  derived from this software without specific prior
 | 
			
		||||
  written permission of the assimp team.
 | 
			
		||||
 | 
			
		||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | 
			
		||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | 
			
		||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | 
			
		||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | 
			
		||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | 
			
		||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | 
			
		||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | 
			
		||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
			
		||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | 
			
		||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
			
		||||
---------------------------------------------------------------------------
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#if (!defined AV_MAIN_H_INCLUDED)
 | 
			
		||||
#define AV_MAIN_H_INCLUDED
 | 
			
		||||
 | 
			
		||||
#define AI_SHADER_COMPILE_FLAGS D3DXSHADER_USE_LEGACY_D3DX9_31_DLL
 | 
			
		||||
 | 
			
		||||
// Because Dx headers include windef.h with min/max redefinition
 | 
			
		||||
#define NOMINMAX
 | 
			
		||||
 | 
			
		||||
// include resource definitions
 | 
			
		||||
#include "resource.h"
 | 
			
		||||
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <malloc.h>
 | 
			
		||||
#include <memory.h>
 | 
			
		||||
#include <tchar.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
 | 
			
		||||
// Include ASSIMP headers (XXX: do we really need all of them?)
 | 
			
		||||
#include <assimp/cimport.h>
 | 
			
		||||
#include <assimp/Importer.hpp>
 | 
			
		||||
#include <assimp/ai_assert.h>
 | 
			
		||||
#include <assimp/cfileio.h>
 | 
			
		||||
#include <assimp/postprocess.h>
 | 
			
		||||
#include <assimp/scene.h>
 | 
			
		||||
#include <assimp/IOSystem.hpp>
 | 
			
		||||
#include <assimp/IOStream.hpp>
 | 
			
		||||
#include <assimp/LogStream.hpp>
 | 
			
		||||
#include <assimp/DefaultLogger.hpp>
 | 
			
		||||
 | 
			
		||||
#include "Material/MaterialSystem.h"   // aiMaterial class
 | 
			
		||||
#include <assimp/StringComparison.h>   // ASSIMP_stricmp and ASSIMP_strincmp
 | 
			
		||||
 | 
			
		||||
#include <time.h>
 | 
			
		||||
 | 
			
		||||
// default movement speed
 | 
			
		||||
#define MOVE_SPEED 3.f
 | 
			
		||||
 | 
			
		||||
#include "AssetHelper.h"
 | 
			
		||||
#include "Camera.h"
 | 
			
		||||
#include "RenderOptions.h"
 | 
			
		||||
#include "Shaders.h"
 | 
			
		||||
#include "Background.h"
 | 
			
		||||
#include "LogDisplay.h"
 | 
			
		||||
#include "LogWindow.h"
 | 
			
		||||
#include "Display.h"
 | 
			
		||||
#include "MeshRenderer.h"
 | 
			
		||||
#include "MaterialManager.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// outside of namespace, to help Intellisense and solve boost::metatype_stuff_miracle
 | 
			
		||||
#include "AnimEvaluator.h"
 | 
			
		||||
#include "SceneAnimator.h"
 | 
			
		||||
 | 
			
		||||
namespace AssimpView
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
// Function prototypes
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
int InitD3D(void);
 | 
			
		||||
int ShutdownD3D(void);
 | 
			
		||||
int CreateDevice (bool p_bMultiSample,bool p_bSuperSample, bool bHW = true);
 | 
			
		||||
int CreateDevice (void);
 | 
			
		||||
int ShutdownDevice(void);
 | 
			
		||||
int GetProjectionMatrix (aiMatrix4x4& p_mOut);
 | 
			
		||||
int LoadAsset(void);
 | 
			
		||||
int CreateAssetData(void);
 | 
			
		||||
int DeleteAssetData(bool bNoMaterials = false);
 | 
			
		||||
int ScaleAsset(void);
 | 
			
		||||
int DeleteAsset(void);
 | 
			
		||||
int SetupFPSView();
 | 
			
		||||
 | 
			
		||||
aiVector3D GetCameraMatrix (aiMatrix4x4& p_mOut);
 | 
			
		||||
int CreateMaterial(AssetHelper::MeshHelper* pcMesh,const aiMesh* pcSource);
 | 
			
		||||
 | 
			
		||||
void HandleMouseInputFPS( void );
 | 
			
		||||
void HandleMouseInputLightRotate( void );
 | 
			
		||||
void HandleMouseInputLocal( void );
 | 
			
		||||
void HandleKeyboardInputFPS( void );
 | 
			
		||||
void HandleMouseInputLightIntensityAndColor( void );
 | 
			
		||||
void HandleMouseInputSkyBox( void );
 | 
			
		||||
void HandleKeyboardInputTextureView( void );
 | 
			
		||||
void HandleMouseInputTextureView( void );
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
//
 | 
			
		||||
// Dialog procedure for the progress bar window
 | 
			
		||||
//
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
INT_PTR CALLBACK ProgressMessageProc(HWND hwndDlg,UINT uMsg,
 | 
			
		||||
    WPARAM wParam,LPARAM lParam);
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
// Main message procedure of the application
 | 
			
		||||
//
 | 
			
		||||
// The function handles all incoming messages for the main window.
 | 
			
		||||
// However, if does not directly process input commands.
 | 
			
		||||
// NOTE: Due to the impossibility to process WM_CHAR messages in dialogs
 | 
			
		||||
// properly the code for all hotkeys has been moved to the WndMain
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
INT_PTR CALLBACK MessageProc(HWND hwndDlg,UINT uMsg,
 | 
			
		||||
    WPARAM wParam,LPARAM lParam);
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
//
 | 
			
		||||
// Dialog procedure for the about dialog
 | 
			
		||||
//
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
INT_PTR CALLBACK AboutMessageProc(HWND hwndDlg,UINT uMsg,
 | 
			
		||||
    WPARAM wParam,LPARAM lParam);
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
//
 | 
			
		||||
// Dialog procedure for the help dialog
 | 
			
		||||
//
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
INT_PTR CALLBACK HelpDialogProc(HWND hwndDlg,UINT uMsg,
 | 
			
		||||
    WPARAM wParam,LPARAM lParam);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
// Handle command line parameters
 | 
			
		||||
//
 | 
			
		||||
// The function loads an asset specified on the command line as first argument
 | 
			
		||||
// Other command line parameters are not handled
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
void HandleCommandLine(char* p_szCommand);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
template <class type, class intype>
 | 
			
		||||
type clamp(intype in)
 | 
			
		||||
{
 | 
			
		||||
    // for unsigned types only ...
 | 
			
		||||
    intype mask = (0x1u << (sizeof(type)*8))-1;
 | 
			
		||||
    return (type)std::max((intype)0,std::min(in,mask));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
// Position of the cursor relative to the 3ds max' like control circle
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
enum EClickPos
 | 
			
		||||
{
 | 
			
		||||
    // The click was inside the inner circle (x,y axis)
 | 
			
		||||
    EClickPos_Circle,
 | 
			
		||||
    // The click was inside one of the vertical snap-ins
 | 
			
		||||
    EClickPos_CircleVert,
 | 
			
		||||
    // The click was inside onf of the horizontal snap-ins
 | 
			
		||||
    EClickPos_CircleHor,
 | 
			
		||||
    // the cklick was outside the circle (z-axis)
 | 
			
		||||
    EClickPos_Outside
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#if (!defined AI_VIEW_CAPTION_BASE)
 | 
			
		||||
#   define AI_VIEW_CAPTION_BASE "Open Asset Import Library : Viewer "
 | 
			
		||||
#endif // !! AI_VIEW_CAPTION_BASE
 | 
			
		||||
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
// Evil globals
 | 
			
		||||
//-------------------------------------------------------------------------------
 | 
			
		||||
    extern HINSTANCE g_hInstance                /*= NULL*/;
 | 
			
		||||
    extern HWND g_hDlg                          /*= NULL*/;
 | 
			
		||||
    extern IDirect3D9* g_piD3D                  /*= NULL*/;
 | 
			
		||||
    extern IDirect3DDevice9* g_piDevice         /*= NULL*/;
 | 
			
		||||
    extern IDirect3DVertexDeclaration9* gDefaultVertexDecl /*= NULL*/;
 | 
			
		||||
    extern double g_fFPS                        /*= 0.0f*/;
 | 
			
		||||
    extern char g_szFileName[MAX_PATH];
 | 
			
		||||
    extern ID3DXEffect* g_piDefaultEffect       /*= NULL*/;
 | 
			
		||||
    extern ID3DXEffect* g_piNormalsEffect       /*= NULL*/;
 | 
			
		||||
    extern ID3DXEffect* g_piPassThroughEffect   /*= NULL*/;
 | 
			
		||||
    extern ID3DXEffect* g_piPatternEffect       /*= NULL*/;
 | 
			
		||||
    extern bool g_bMousePressed                 /*= false*/;
 | 
			
		||||
    extern bool g_bMousePressedR                /*= false*/;
 | 
			
		||||
    extern bool g_bMousePressedM                /*= false*/;
 | 
			
		||||
    extern bool g_bMousePressedBoth             /*= false*/;
 | 
			
		||||
    extern float g_fElpasedTime                 /*= 0.0f*/;
 | 
			
		||||
    extern D3DCAPS9 g_sCaps;
 | 
			
		||||
    extern bool g_bLoadingFinished              /*= false*/;
 | 
			
		||||
    extern HANDLE g_hThreadHandle               /*= NULL*/;
 | 
			
		||||
    extern float g_fWheelPos                    /*= -10.0f*/;
 | 
			
		||||
    extern bool g_bLoadingCanceled              /*= false*/;
 | 
			
		||||
    extern IDirect3DTexture9* g_pcTexture       /*= NULL*/;
 | 
			
		||||
 | 
			
		||||
    extern aiMatrix4x4 g_mWorld;
 | 
			
		||||
    extern aiMatrix4x4 g_mWorldRotate;
 | 
			
		||||
    extern aiVector3D g_vRotateSpeed            /*= aiVector3D(0.5f,0.5f,0.5f)*/;
 | 
			
		||||
 | 
			
		||||
    extern aiVector3D g_avLightDirs[1] /* =
 | 
			
		||||
        {   aiVector3D(-0.5f,0.6f,0.2f) ,
 | 
			
		||||
            aiVector3D(-0.5f,0.5f,0.5f)} */;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    extern POINT g_mousePos                     /*= {0,0};*/;
 | 
			
		||||
    extern POINT g_LastmousePos                 /*= {0,0}*/;
 | 
			
		||||
    extern bool g_bFPSView                      /*= false*/;
 | 
			
		||||
    extern bool g_bInvert                       /*= false*/;
 | 
			
		||||
    extern EClickPos g_eClick;
 | 
			
		||||
    extern unsigned int g_iCurrentColor         /*= 0*/;
 | 
			
		||||
 | 
			
		||||
    // NOTE: The light intensity is separated from the color, it can
 | 
			
		||||
    // directly be manipulated using the middle mouse button.
 | 
			
		||||
    // When the user chooses a color from the palette the intensity
 | 
			
		||||
    // is reset to 1.0
 | 
			
		||||
    // index[2] is the ambient color
 | 
			
		||||
    extern float g_fLightIntensity              /*=0.0f*/;
 | 
			
		||||
    extern D3DCOLOR g_avLightColors[3];
 | 
			
		||||
 | 
			
		||||
    extern RenderOptions g_sOptions;
 | 
			
		||||
    extern Camera g_sCamera;
 | 
			
		||||
    extern AssetHelper *g_pcAsset               /*= NULL*/;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    //
 | 
			
		||||
    // Contains the mask image for the HUD
 | 
			
		||||
    // (used to determine the position of a click)
 | 
			
		||||
    //
 | 
			
		||||
    // The size of the image is identical to the size of the main
 | 
			
		||||
    // HUD texture
 | 
			
		||||
    //
 | 
			
		||||
    extern unsigned char* g_szImageMask         /*= NULL*/;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    extern float g_fACMR /*= 3.0f*/;
 | 
			
		||||
    extern IDirect3DQuery9* g_piQuery;
 | 
			
		||||
 | 
			
		||||
    extern bool g_bPlay                     /*= false*/;
 | 
			
		||||
 | 
			
		||||
    extern double g_dCurrent;
 | 
			
		||||
    extern float g_smoothAngle /*= 80.f*/;
 | 
			
		||||
 | 
			
		||||
    extern unsigned int ppsteps,ppstepsdefault;
 | 
			
		||||
    extern bool nopointslines;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#endif // !! AV_MAIN_H_INCLUDED
 | 
			
		||||
							
								
								
									
										468
									
								
								thirdparty/assimp/tools/assimp_view/assimp_view.rc
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,468 @@
 | 
			
		||||
// Microsoft Visual C++ generated resource script.
 | 
			
		||||
//
 | 
			
		||||
#include "resource.h"
 | 
			
		||||
 | 
			
		||||
#define APSTUDIO_READONLY_SYMBOLS
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// Generated from the TEXTINCLUDE 2 resource.
 | 
			
		||||
//
 | 
			
		||||
#define APSTUDIO_HIDDEN_SYMBOLS
 | 
			
		||||
#include "windows.h"
 | 
			
		||||
#undef APSTUDIO_HIDDEN_SYMBOLS
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
#undef APSTUDIO_READONLY_SYMBOLS
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
// Deutsch (Deutschland) resources
 | 
			
		||||
 | 
			
		||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
 | 
			
		||||
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
 | 
			
		||||
#pragma code_page(1252)
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// Icon
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
// Icon with lowest ID value placed first to ensure application icon
 | 
			
		||||
// remains consistent on all systems.
 | 
			
		||||
IDI_ASSIMP_VIEW         ICON                    "../shared/assimp_tools_icon.ico"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// Dialog
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
IDD_ABOUTBOX DIALOGEX 22, 17, 283, 149
 | 
			
		||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_CAPTION | WS_SYSMENU
 | 
			
		||||
CAPTION "About Open Asset Import Library"
 | 
			
		||||
FONT 9, "Courier New", 400, 0, 0x0
 | 
			
		||||
BEGIN
 | 
			
		||||
    LTEXT           "Open Asset Import Library (Assimp)",IDC_STATIC,30,14,144,9
 | 
			
		||||
    LTEXT           "A free C/C++ library to read various well-known 3D model formats into a straightforward in-memory format for easy processing by applications. Licensed under a 3-clause BSD license and totally awesome.",IDC_STATIC,31,34,204,24
 | 
			
		||||
    LTEXT           "(c) 2008-2009. Assimp Development Team. See the CREDITS file for a list of all contributors.",IDC_STATIC,30,65,204,23
 | 
			
		||||
    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,27,282,1
 | 
			
		||||
    LTEXT           "http://assimp.sourceforge.net  http://www.zfx.info",IDC_STATIC,31,101,127,22
 | 
			
		||||
    DEFPUSHBUTTON   "Love this library",IDOK,186,110,84,14
 | 
			
		||||
    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,148,283,1
 | 
			
		||||
    CONTROL         IDB_BITMAP1,IDC_STATIC,"Static",SS_BITMAP,0,129,514,20
 | 
			
		||||
    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,10,281,1
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
IDD_DIALOGMAIN DIALOGEX 0, 0, 656, 450
 | 
			
		||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
 | 
			
		||||
EXSTYLE WS_EX_ACCEPTFILES | WS_EX_WINDOWEDGE
 | 
			
		||||
CAPTION "Open Asset Import Library - Model Viewer "
 | 
			
		||||
MENU IDR_MENU1
 | 
			
		||||
FONT 8, "Microsoft Sans Serif", 400, 0, 0x0
 | 
			
		||||
BEGIN
 | 
			
		||||
    CONTROL         "",IDC_RT,"Static",SS_OWNERDRAW,0,0,513,324
 | 
			
		||||
    CONTROL         "",IDC_TREE1,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_SHOWSELALWAYS | WS_BORDER | WS_HSCROLL | WS_TABSTOP,513,0,143,450
 | 
			
		||||
    CONTROL         "<<",IDC_BLUBB,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | WS_TABSTOP,471,328,35,14
 | 
			
		||||
    COMBOBOX        IDC_COMBO1,367,328,100,14,CBS_DROPDOWN | WS_VSCROLL | WS_TABSTOP
 | 
			
		||||
    PUSHBUTTON      "Play",IDC_PLAY,328,328,35,14
 | 
			
		||||
    CONTROL         "",IDC_SLIDERANIM,"msctls_trackbar32",TBS_AUTOTICKS | TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,0,328,328,15
 | 
			
		||||
    GROUPBOX        "Display",IDC_STATIC,7,345,172,101
 | 
			
		||||
    CONTROL         "Multisampling [M]",IDC_TOGGLEMS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,357,80,10
 | 
			
		||||
    CONTROL         "Wireframe [W]",IDC_TOGGLEWIRE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,369,80,10
 | 
			
		||||
    CONTROL         "No materials [D]",IDC_TOGGLEMAT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,381,80,10
 | 
			
		||||
    CONTROL         "Display normals [N]",IDC_TOGGLENORMALS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,393,80,10
 | 
			
		||||
    CONTROL         "Low quality [P]",IDC_LOWQUALITY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,405,80,10
 | 
			
		||||
    CONTROL         "No specular [S]",IDC_NOSPECULAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,417,80,10
 | 
			
		||||
    CONTROL         "Show skeleton [K]",IDC_SHOWSKELETON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,429,80,10
 | 
			
		||||
    CONTROL         "AutoRotate [A]",IDC_AUTOROTATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,93,357,80,10
 | 
			
		||||
    CONTROL         "Zoom/Rotate [Z]",IDC_ZOOM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,93,369,80,10
 | 
			
		||||
    CONTROL         "Rotate lights [R]",IDC_LIGHTROTATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,93,381,80,10
 | 
			
		||||
    CONTROL         "Two lights [L]",IDC_3LIGHTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,93,393,80,10
 | 
			
		||||
    CONTROL         "Backface culling [C]",IDC_BFCULL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,93,405,80,10
 | 
			
		||||
    CONTROL         "No transparency [T]",IDC_NOAB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,93,417,80,10
 | 
			
		||||
    GROUPBOX        "Statistics",IDC_STATIC,186,345,164,63
 | 
			
		||||
    LTEXT           "Vertices:",IDC_NUMVERTS,192,357,35,8
 | 
			
		||||
    LTEXT           "Nodes:",IDC_NUMNODES,192,369,35,8
 | 
			
		||||
    LTEXT           "Shaders:",IDC_NUMSHADERS,192,381,35,8
 | 
			
		||||
    LTEXT           "Time:",IDC_LOADTIME,192,393,35,8
 | 
			
		||||
    EDITTEXT        IDC_EVERT,227,357,35,8,ES_RIGHT | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER
 | 
			
		||||
    EDITTEXT        IDC_ENODEWND,227,369,35,8,ES_RIGHT | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER
 | 
			
		||||
    EDITTEXT        IDC_ESHADER,227,381,35,8,ES_RIGHT | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER
 | 
			
		||||
    EDITTEXT        IDC_ELOAD,227,393,35,8,ES_RIGHT | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER
 | 
			
		||||
    LTEXT           "Faces:",IDC_NUMFACES,272,357,35,8
 | 
			
		||||
    LTEXT           "Materials:",IDC_NUMMATS,272,369,35,8
 | 
			
		||||
    LTEXT           "Meshes:",IDC_NUMMESHES,272,381,35,8
 | 
			
		||||
    LTEXT           "FPS:",IDC_FPS,272,393,35,8
 | 
			
		||||
    EDITTEXT        IDC_EFACE,307,357,35,8,ES_RIGHT | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER
 | 
			
		||||
    EDITTEXT        IDC_EMAT,307,369,35,8,ES_RIGHT | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER
 | 
			
		||||
    EDITTEXT        IDC_EMESH,307,381,35,8,ES_RIGHT | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER
 | 
			
		||||
    EDITTEXT        IDC_EFPS,307,393,35,8,ES_RIGHT | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER
 | 
			
		||||
    EDITTEXT        IDC_VIEWMATRIX,192,412,72,44,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY | NOT WS_VISIBLE | NOT WS_BORDER
 | 
			
		||||
    GROUPBOX        "Colors",IDC_STATIC,357,345,109,87
 | 
			
		||||
    LTEXT           "Primary:",IDC_STATIC,363,360,48,8
 | 
			
		||||
    LTEXT           "Secondary:",IDC_STATIC,363,378,54,8
 | 
			
		||||
    LTEXT           "Ambient:",IDC_STATIC,363,396,54,8
 | 
			
		||||
    CONTROL         "Button1",IDC_LCOLOR1,"Button",BS_OWNERDRAW | WS_TABSTOP,423,357,35,14
 | 
			
		||||
    CONTROL         "Button1",IDC_LCOLOR2,"Button",BS_OWNERDRAW | WS_TABSTOP,423,375,35,14
 | 
			
		||||
    CONTROL         "Button1",IDC_LCOLOR3,"Button",BS_OWNERDRAW | WS_TABSTOP,423,393,35,14
 | 
			
		||||
    PUSHBUTTON      "Reset",IDC_LRESET,423,411,35,14
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
IDD_LOADDIALOG DIALOGEX 0, 0, 143, 60
 | 
			
		||||
STYLE DS_SETFONT | DS_CENTER | WS_POPUP | WS_BORDER | WS_SYSMENU
 | 
			
		||||
FONT 12, "Tahoma", 400, 0, 0x0
 | 
			
		||||
BEGIN
 | 
			
		||||
    DEFPUSHBUTTON   "Cancel",IDOK,104,41,33,13
 | 
			
		||||
    CONTROL         "",IDC_PROGRESS,"msctls_progress32",WS_BORDER,6,30,130,8
 | 
			
		||||
    LTEXT           "Loading ...\nMay the force be with you ...",IDC_STATIC,8,9,123,16
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
IDD_AVHELP DIALOGEX 0, 0, 481, 346
 | 
			
		||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
 | 
			
		||||
CAPTION "ASSIMP Viewer: Help"
 | 
			
		||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
 | 
			
		||||
BEGIN
 | 
			
		||||
    DEFPUSHBUTTON   "OK",IDOK,420,324,50,14
 | 
			
		||||
    CONTROL         "",IDC_RICHEDIT21,"RichEdit20A",ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_TABSTOP,19,18,462,294
 | 
			
		||||
    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,312,490,1
 | 
			
		||||
    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,16,490,1
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
IDD_LOGVIEW DIALOGEX 0, 0, 365, 182
 | 
			
		||||
STYLE DS_SETFONT | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
 | 
			
		||||
EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE
 | 
			
		||||
CAPTION "AssimpView Log Output"
 | 
			
		||||
FONT 8, "Courier New", 400, 0, 0x0
 | 
			
		||||
BEGIN
 | 
			
		||||
    CONTROL         "",IDC_EDIT1,"RichEdit20A",ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | ES_NUMBER | WS_VSCROLL | WS_TABSTOP,3,4,358,174,WS_EX_STATICEDGE
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
IDD_DIALOGSMOOTH DIALOGEX 0, 0, 278, 141
 | 
			
		||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
 | 
			
		||||
CAPTION "Set smooth limit "
 | 
			
		||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
 | 
			
		||||
BEGIN
 | 
			
		||||
    DEFPUSHBUTTON   "OK",IDOK,213,94,50,14
 | 
			
		||||
    PUSHBUTTON      "Cancel",IDCANCEL,161,94,50,14
 | 
			
		||||
    EDITTEXT        IDC_EDITSM,99,7,175,14,ES_AUTOHSCROLL | ES_NUMBER
 | 
			
		||||
    LTEXT           "Angle limit (in degrees):",IDC_STATIC,13,10,76,8
 | 
			
		||||
    LTEXT           "The angle limit defines the maximum angle that may be between two adjacent face normals that they're smoothed together.",IDC_STATIC,13,31,253,19
 | 
			
		||||
    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,113,278,1
 | 
			
		||||
    LTEXT           "Also used during import, but can be overridden by single model importers to match the original look of a model as close as possible. Examples includes 3DS, ASE and LWO, all of them relying on smoothing groups and their own angle limits. ",IDC_STATIC,13,51,254,33
 | 
			
		||||
    LTEXT           "NOTE: New settings don't take effect immediately, use 'Smooth Normals' or 'Reload' to update the model.",IDC_STATIC,14,118,254,22
 | 
			
		||||
    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,90,277,1
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef APSTUDIO_INVOKED
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// TEXTINCLUDE
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
1 TEXTINCLUDE 
 | 
			
		||||
BEGIN
 | 
			
		||||
    "resource.h\0"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
2 TEXTINCLUDE 
 | 
			
		||||
BEGIN
 | 
			
		||||
    "#define APSTUDIO_HIDDEN_SYMBOLS\r\n"
 | 
			
		||||
    "#include ""windows.h""\r\n"
 | 
			
		||||
    "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n"
 | 
			
		||||
    "\0"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
3 TEXTINCLUDE 
 | 
			
		||||
BEGIN
 | 
			
		||||
    "\r\n"
 | 
			
		||||
    "\0"
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
#endif    // APSTUDIO_INVOKED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// Version
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
VS_VERSION_INFO VERSIONINFO
 | 
			
		||||
 FILEVERSION 1,1,700,0
 | 
			
		||||
 PRODUCTVERSION 1,1,700,1
 | 
			
		||||
 FILEFLAGSMASK 0x17L
 | 
			
		||||
#ifdef _DEBUG
 | 
			
		||||
 FILEFLAGS 0x1L
 | 
			
		||||
#else
 | 
			
		||||
 FILEFLAGS 0x0L
 | 
			
		||||
#endif
 | 
			
		||||
 FILEOS 0x4L
 | 
			
		||||
 FILETYPE 0x0L
 | 
			
		||||
 FILESUBTYPE 0x0L
 | 
			
		||||
BEGIN
 | 
			
		||||
    BLOCK "StringFileInfo"
 | 
			
		||||
    BEGIN
 | 
			
		||||
        BLOCK "040704b0"
 | 
			
		||||
        BEGIN
 | 
			
		||||
            VALUE "CompanyName", "assimp team"
 | 
			
		||||
            VALUE "FileDescription", "ASSIMP Viewer Application"
 | 
			
		||||
            VALUE "FileVersion", "1, 1, SVNRevision, 0"
 | 
			
		||||
            VALUE "InternalName", "assimp_view"
 | 
			
		||||
            VALUE "LegalCopyright", "Licensed under the LGPL"
 | 
			
		||||
            VALUE "OriginalFilename", "assimpview32.exe"
 | 
			
		||||
            VALUE "ProductName", "ASSIMP Viewer Application"
 | 
			
		||||
            VALUE "ProductVersion", "1, 1, SVNRevision, 0"
 | 
			
		||||
        END
 | 
			
		||||
    END
 | 
			
		||||
    BLOCK "VarFileInfo"
 | 
			
		||||
    BEGIN
 | 
			
		||||
        VALUE "Translation", 0x407, 1200
 | 
			
		||||
    END
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// DESIGNINFO
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifdef APSTUDIO_INVOKED
 | 
			
		||||
GUIDELINES DESIGNINFO
 | 
			
		||||
BEGIN
 | 
			
		||||
    IDD_ABOUTBOX, DIALOG
 | 
			
		||||
    BEGIN
 | 
			
		||||
        TOPMARGIN, 1
 | 
			
		||||
        BOTTOMMARGIN, 138
 | 
			
		||||
    END
 | 
			
		||||
 | 
			
		||||
    IDD_DIALOGMAIN, DIALOG
 | 
			
		||||
    BEGIN
 | 
			
		||||
        RIGHTMARGIN, 623
 | 
			
		||||
    END
 | 
			
		||||
 | 
			
		||||
    IDD_LOADDIALOG, DIALOG
 | 
			
		||||
    BEGIN
 | 
			
		||||
        LEFTMARGIN, 7
 | 
			
		||||
        TOPMARGIN, 7
 | 
			
		||||
    END
 | 
			
		||||
 | 
			
		||||
    IDD_AVHELP, DIALOG
 | 
			
		||||
    BEGIN
 | 
			
		||||
        LEFTMARGIN, 7
 | 
			
		||||
        RIGHTMARGIN, 474
 | 
			
		||||
        TOPMARGIN, 7
 | 
			
		||||
        BOTTOMMARGIN, 339
 | 
			
		||||
    END
 | 
			
		||||
 | 
			
		||||
    IDD_LOGVIEW, DIALOG
 | 
			
		||||
    BEGIN
 | 
			
		||||
        LEFTMARGIN, 7
 | 
			
		||||
        RIGHTMARGIN, 358
 | 
			
		||||
        TOPMARGIN, 14
 | 
			
		||||
        BOTTOMMARGIN, 175
 | 
			
		||||
    END
 | 
			
		||||
 | 
			
		||||
    IDD_DIALOGSMOOTH, DIALOG
 | 
			
		||||
    BEGIN
 | 
			
		||||
        LEFTMARGIN, 7
 | 
			
		||||
        RIGHTMARGIN, 271
 | 
			
		||||
        TOPMARGIN, 7
 | 
			
		||||
        BOTTOMMARGIN, 134
 | 
			
		||||
    END
 | 
			
		||||
END
 | 
			
		||||
#endif    // APSTUDIO_INVOKED
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// Bitmap
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
IDB_BITMAP1             BITMAP                  "banner.bmp"
 | 
			
		||||
 | 
			
		||||
IDB_BANIM               BITMAP                  "base_anim.bmp"
 | 
			
		||||
 | 
			
		||||
IDB_BDISPLAY            BITMAP                  "base_display.bmp"
 | 
			
		||||
 | 
			
		||||
IDB_BINTER              BITMAP                  "base_inter.bmp"
 | 
			
		||||
 | 
			
		||||
IDB_BRENDERING          BITMAP                  "base_rendering.bmp"
 | 
			
		||||
 | 
			
		||||
IDB_BSTATS              BITMAP                  "base_stats.bmp"
 | 
			
		||||
 | 
			
		||||
IDB_BTX                 BITMAP                  "tx.bmp"
 | 
			
		||||
 | 
			
		||||
IDB_BFX                 BITMAP                  "fx.bmp"
 | 
			
		||||
 | 
			
		||||
IDB_BNODE               BITMAP                  "n.bmp"
 | 
			
		||||
 | 
			
		||||
IDB_BROOT               BITMAP                  "root.bmp"
 | 
			
		||||
 | 
			
		||||
IDB_BTXI                BITMAP                  "txi.bmp"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// Menu
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
IDR_MENU1 MENU
 | 
			
		||||
BEGIN
 | 
			
		||||
    POPUP "Viewer"
 | 
			
		||||
    BEGIN
 | 
			
		||||
        MENUITEM "Open Asset",                  ID_VIEWER_OPEN
 | 
			
		||||
        MENUITEM "Close Asset",                 ID_VIEWER_CLOSEASSET
 | 
			
		||||
        MENUITEM "Reload",                      ID_VIEWER_RELOAD
 | 
			
		||||
        POPUP "Import settings"
 | 
			
		||||
        BEGIN
 | 
			
		||||
            MENUITEM "Calculate Tangent Space",     ID_VIEWER_PP_CTS
 | 
			
		||||
            MENUITEM "Compute Indexed Meshes",      ID_VIEWER_PP_JIV
 | 
			
		||||
            MENUITEM "Optimize Materials",          ID_VIEWER_PP_RRM2
 | 
			
		||||
            MENUITEM "Optimize Meshes",             ID_VIEWER_PP_OM
 | 
			
		||||
            MENUITEM "Optimize Scenegraph",         ID_VIEWER_PP_OG
 | 
			
		||||
            MENUITEM "Find Instanced Meshes",       ID_VIEWER_PP_FIM
 | 
			
		||||
            MENUITEM "Run Full Validation",         ID_VIEWER_PP_VDS
 | 
			
		||||
            MENUITEM "Pretransform Vertices",       ID_VIEWER_PP_PTV
 | 
			
		||||
            MENUITEM "VCache Optimization",         ID_VIEWER_PP_ICL
 | 
			
		||||
            MENUITEM "Fix Infacing Normals",        ID_VIEWER_PP_FIN
 | 
			
		||||
            MENUITEM "Find Degenerates",            ID_VIEWER_PP_FD
 | 
			
		||||
            MENUITEM "Find Invalid Data",           ID_VIEWER_PP_FID
 | 
			
		||||
            MENUITEM "Generate UV Coords",          ID_VIEWER_PP_GUV
 | 
			
		||||
            MENUITEM "Transform UV Coords",         ID_VIEWER_PP_TUV
 | 
			
		||||
            MENUITEM "Remove Lines and Points",     ID_VIEWER_PP_RLINE_PNT, GRAYED
 | 
			
		||||
            MENUITEM "Remove dummy bones (De-bone)", ID_VIEWER_PP_DB
 | 
			
		||||
            MENUITEM SEPARATOR
 | 
			
		||||
            MENUITEM "(required) Triangulate",      ID_VIEWER_PP_JIV, GRAYED
 | 
			
		||||
            MENUITEM "(required) Limit Bone Weights", ID_VIEWER_PP_JIV, GRAYED
 | 
			
		||||
            MENUITEM "(required) Split Large Meshes", ID_VIEWER_PP_JIV, GRAYED
 | 
			
		||||
            MENUITEM "(required) Sort by primitive type", ID_VIEWER_PP_JIV, GRAYED
 | 
			
		||||
            MENUITEM "(required) Convert to Left-Handed", ID_VIEWER_PP_JIV, GRAYED
 | 
			
		||||
            MENUITEM SEPARATOR
 | 
			
		||||
            MENUITEM "Reset to default",            ID_IMPORTSETTINGS_RESETTODEFAULT
 | 
			
		||||
            MENUITEM "Open Post-Process Short Reference", ID_IMPORTSETTINGS_OPENPOST
 | 
			
		||||
        END
 | 
			
		||||
        MENUITEM SEPARATOR
 | 
			
		||||
        MENUITEM "Save Screenshot",             ID_VIEWER_SAVESCREENSHOTTOFILE
 | 
			
		||||
        MENUITEM "Reset view",                  ID_VIEWER_RESETVIEW
 | 
			
		||||
        MENUITEM "Memory consumption",          ID_VIEWER_MEMORYCONSUMATION
 | 
			
		||||
        MENUITEM SEPARATOR
 | 
			
		||||
        MENUITEM "Setup file associations",     ID_VIEWER_H
 | 
			
		||||
        MENUITEM SEPARATOR
 | 
			
		||||
        MENUITEM "Recent files ",               ID_VIEWER_RECENTFILES
 | 
			
		||||
        MENUITEM "Clear history",               ID_VIEWER_CLEARHISTORY
 | 
			
		||||
        MENUITEM SEPARATOR
 | 
			
		||||
        MENUITEM "Quit",                        ID_VIEWER_QUIT
 | 
			
		||||
    END
 | 
			
		||||
    POPUP "Tools"
 | 
			
		||||
    BEGIN
 | 
			
		||||
        MENUITEM "Log window",                  ID_TOOLS_LOGWINDOW
 | 
			
		||||
        MENUITEM "Save log to file",            ID_TOOLS_SAVELOGTOFILE
 | 
			
		||||
        MENUITEM "Clear log",                   ID_TOOLS_CLEARLOG
 | 
			
		||||
        MENUITEM SEPARATOR
 | 
			
		||||
        MENUITEM "Original normals",            ID_TOOLS_ORIGINALNORMALS, CHECKED
 | 
			
		||||
        MENUITEM "Hard normals",                ID_TOOLS_HARDNORMALS
 | 
			
		||||
        MENUITEM "Smooth normals",              ID_TOOLS_SMOOTHNORMALS
 | 
			
		||||
        MENUITEM SEPARATOR
 | 
			
		||||
        MENUITEM "Set angle limit ...",         ID_TOOLS_SETANGLELIMIT
 | 
			
		||||
        MENUITEM "Flip normals",                ID_TOOLS_FLIPNORMALS
 | 
			
		||||
        MENUITEM SEPARATOR
 | 
			
		||||
        MENUITEM "Stereo view",                 ID_TOOLS_STEREOVIEW
 | 
			
		||||
    END
 | 
			
		||||
    POPUP "Background"
 | 
			
		||||
    BEGIN
 | 
			
		||||
        MENUITEM "Set color",                   ID_BACKGROUND_SETCOLOR
 | 
			
		||||
        MENUITEM "Load skybox",                 ID_BACKGROUND_LOADSKYBOX
 | 
			
		||||
        MENUITEM "Load texture",                ID_BACKGROUND_LOADTEXTURE
 | 
			
		||||
        MENUITEM SEPARATOR
 | 
			
		||||
        MENUITEM "Clear",                       ID_BACKGROUND_CLEAR
 | 
			
		||||
    END
 | 
			
		||||
    MENUITEM "Export",                      32878
 | 
			
		||||
    POPUP "?"
 | 
			
		||||
    BEGIN
 | 
			
		||||
        POPUP "Feedback"
 | 
			
		||||
        BEGIN
 | 
			
		||||
            MENUITEM "Report bug",                  ID_REPORTBUG
 | 
			
		||||
            MENUITEM "Feature request/discuss",     ID_FR
 | 
			
		||||
        END
 | 
			
		||||
        MENUITEM "Help",                        ID__HELP
 | 
			
		||||
        MENUITEM SEPARATOR
 | 
			
		||||
        MENUITEM "About",                       ID__ABOUT
 | 
			
		||||
        MENUITEM SEPARATOR
 | 
			
		||||
        MENUITEM "Website",                     ID__WEBSITE
 | 
			
		||||
        MENUITEM "SF.net Project Page",         ID__WEBSITESF
 | 
			
		||||
    END
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
IDR_TXPOPUP MENU
 | 
			
		||||
BEGIN
 | 
			
		||||
    POPUP "Hey"
 | 
			
		||||
    BEGIN
 | 
			
		||||
        MENUITEM "Replace texture",             ID_HEY_REPLACE
 | 
			
		||||
        MENUITEM "Export texture",              ID_HEY_EXPORT
 | 
			
		||||
        MENUITEM "Remove texture",              ID_HEY_REMOVE
 | 
			
		||||
        MENUITEM SEPARATOR
 | 
			
		||||
        MENUITEM "Reset texture",               ID_HEY_RESETTEXTURE
 | 
			
		||||
    END
 | 
			
		||||
    MENUITEM "This is not an easter egg",   0
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
IDR_MATPOPUP MENU
 | 
			
		||||
BEGIN
 | 
			
		||||
    POPUP "So long"
 | 
			
		||||
    BEGIN
 | 
			
		||||
        MENUITEM "Add diffuse texture",         ID_SOLONG_ADDDIFFUSETEXTURE
 | 
			
		||||
        MENUITEM "Add specular texture",        ID_SOLONG_ADDSPECULARTEXTURE
 | 
			
		||||
        MENUITEM "Add ambient texture",         ID_SOLONG_ADDAMBIENTTEXTURE
 | 
			
		||||
        MENUITEM "Add emissive texture",        ID_SOLONG_ADDEMISSIVETEXTURE
 | 
			
		||||
        MENUITEM "Add opacity texture",         ID_SOLONG_ADDOPACITYTEXTURE
 | 
			
		||||
        MENUITEM "Add normal/height texture",   ID_SOLONG_ADDNORMAL
 | 
			
		||||
        MENUITEM "Add shininess texture",       ID_SOLONG_ADDSHININESSTEXTURE
 | 
			
		||||
        MENUITEM SEPARATOR
 | 
			
		||||
        MENUITEM "Set diffuse color",           ID_SOLONG_CLEARDIFFUSECOLOR
 | 
			
		||||
        MENUITEM "Set specular color",          ID_SOLONG_CLEARSPECULARCOLOR
 | 
			
		||||
        MENUITEM "Set ambient color",           ID_SOLONG_CLEARAMBIENTCOLOR
 | 
			
		||||
        MENUITEM "Set emissive color",          ID_SOLONG_CLEAREMISSIVECOLOR
 | 
			
		||||
        MENUITEM "Set transparency",            ID_SOLONG_CLEARTRANSPARENCY
 | 
			
		||||
        MENUITEM SEPARATOR
 | 
			
		||||
        MENUITEM "Make default material",       ID_SOLONG_MAKEDEFAULTMATERIAL
 | 
			
		||||
        POPUP "Set shading mode"
 | 
			
		||||
        BEGIN
 | 
			
		||||
            MENUITEM "Gouraud",                     ID_SETSHADINGMODE_GOURAUD
 | 
			
		||||
            MENUITEM "Phong (specular)",            ID_SETSHADINGMODE_PHONG
 | 
			
		||||
        END
 | 
			
		||||
    END
 | 
			
		||||
    MENUITEM "and thanks for all the fish", 0
 | 
			
		||||
END
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// TEXT
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
IDR_TEXT1               TEXT                    "text1.bin"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// RCDATA
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
IDR_HUD                 RCDATA                  "HUD.png"
 | 
			
		||||
 | 
			
		||||
IDR_HUDMASK             RCDATA                  "HUDMask.png"
 | 
			
		||||
 | 
			
		||||
#endif    // Deutsch (Deutschland) resources
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef APSTUDIO_INVOKED
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
//
 | 
			
		||||
// Generated from the TEXTINCLUDE 3 resource.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
#endif    // not APSTUDIO_INVOKED
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								thirdparty/assimp/tools/assimp_view/banner.bmp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 141 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								thirdparty/assimp/tools/assimp_view/banner_pure.bmp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 106 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								thirdparty/assimp/tools/assimp_view/base.PNG
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								thirdparty/assimp/tools/assimp_view/base_anim.bmp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 9.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								thirdparty/assimp/tools/assimp_view/base_display.bmp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 9.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								thirdparty/assimp/tools/assimp_view/base_inter.bmp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 9.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								thirdparty/assimp/tools/assimp_view/base_rendering.bmp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 9.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								thirdparty/assimp/tools/assimp_view/base_stats.bmp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 9.4 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								thirdparty/assimp/tools/assimp_view/fx.bmp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 822 B  | 
							
								
								
									
										418
									
								
								thirdparty/assimp/tools/assimp_view/help.rtf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,418 @@
 | 
			
		||||
{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1031\deflangfe1031\themelang1031\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}
 | 
			
		||||
{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}MS Reference Sans Serif;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
 | 
			
		||||
{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}
 | 
			
		||||
{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
 | 
			
		||||
{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
 | 
			
		||||
{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f41\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f42\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
 | 
			
		||||
{\f44\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f45\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f46\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f47\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
 | 
			
		||||
{\f48\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f49\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f381\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f382\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}
 | 
			
		||||
{\f384\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f385\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f388\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f431\fbidi \fswiss\fcharset238\fprq2 MS Reference Sans Serif CE;}
 | 
			
		||||
{\f432\fbidi \fswiss\fcharset204\fprq2 MS Reference Sans Serif Cyr;}{\f434\fbidi \fswiss\fcharset161\fprq2 MS Reference Sans Serif Greek;}{\f435\fbidi \fswiss\fcharset162\fprq2 MS Reference Sans Serif Tur;}
 | 
			
		||||
{\f438\fbidi \fswiss\fcharset186\fprq2 MS Reference Sans Serif Baltic;}{\f439\fbidi \fswiss\fcharset163\fprq2 MS Reference Sans Serif (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
 | 
			
		||||
{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
 | 
			
		||||
{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
 | 
			
		||||
{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
 | 
			
		||||
{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
 | 
			
		||||
{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
 | 
			
		||||
{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}
 | 
			
		||||
{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
 | 
			
		||||
{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
 | 
			
		||||
{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
 | 
			
		||||
{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
 | 
			
		||||
{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
 | 
			
		||||
{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
 | 
			
		||||
{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
 | 
			
		||||
{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
 | 
			
		||||
{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
 | 
			
		||||
{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}
 | 
			
		||||
{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
 | 
			
		||||
{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
 | 
			
		||||
{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;
 | 
			
		||||
\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;
 | 
			
		||||
\red192\green192\blue192;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{
 | 
			
		||||
\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1031\langfe1031\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 
 | 
			
		||||
\snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
 | 
			
		||||
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1
 | 
			
		||||
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1031\langfe1031\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 
 | 
			
		||||
\snext11 \ssemihidden \sunhideused \sqformat Normal Table;}}{\*\rsidtbl \rsid2432159\rsid3942873\rsid5053873\rsid5113869\rsid5338181\rsid6912689\rsid6976329\rsid7213193\rsid8068556\rsid9465848\rsid13463017}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0
 | 
			
		||||
\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator Alexander Gessler}{\creatim\yr2008\mo5\dy13\hr12\min5}{\revtim\yr2008\mo7\dy8\hr13\min6}{\version11}{\edmins0}{\nofpages5}{\nofwords1505}{\nofchars7670}
 | 
			
		||||
{\nofcharsws9157}{\vern32895}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1417\margr1417\margt1417\margb1134\gutter0\ltrsect 
 | 
			
		||||
\deftab708\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves1\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120
 | 
			
		||||
\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale91\viewzk1\rsidroot13463017 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang 
 | 
			
		||||
{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}
 | 
			
		||||
{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9
 | 
			
		||||
\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 
 | 
			
		||||
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \ab\af39\afs32 \ltrch\fcs0 \b\f39\fs32\lang1033\langfe1031\langnp1033\insrsid5338181 
 | 
			
		||||
\par \hich\af39\dbch\af31505\loch\f39 ASSIMP Viewer Utility 
 | 
			
		||||
\par }{\rtlch\fcs1 \ab\af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 Document version 1.0, April 2008
 | 
			
		||||
\par }{\rtlch\fcs1 \ab\af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 I.\tab 
 | 
			
		||||
Usage 
 | 
			
		||||
\par }\pard \ltrpar\qj \li340\ri850\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin850\lin340\itap0\pararsid5338181 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
The ASSIMP Viewer Utility is a small and fast stand-alone viewer utility which is us\hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
ing the ASSIMP library to import assets from files. It consists of a single executable file and has no external dependencies. It displays assets with even highly complex materials and bone animations correctly.
 | 
			
		||||
\par \hich\af39\dbch\af31505\loch\f39 AssimpView allows you to modify the textures \hich\af39\dbch\af31505\loch\f39 and material properties sets of your models at runtime, }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid6976329 \hich\af39\dbch\af31505\loch\f39 easily}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
 and fast per Drag&Drop. Furthermore it can visualize normals, UV sets, bounding boxes ... It allows artists and engine }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid6912689 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
programmers}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39  to work together with maximal efficiency and find the ideal mode\hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
l format for your internal workflow.
 | 
			
		||||
\par }{\rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 System requirements}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 :
 | 
			
		||||
\par }\pard \ltrpar\qj \fi-360\li700\ri850\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin850\lin700\itap0\pararsid5338181 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 -\tab 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 A Direct3D 9.0c compliant video card with }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \b\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid6976329 \hich\af39\dbch\af31505\loch\f39 at least}{\rtlch\fcs1 \af39\afs20 
 | 
			
		||||
\ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39  support for Shader Model 2.0.}{\rtlch\fcs1 \af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid5338181 
 | 
			
		||||
\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 -\tab \hich\af39\dbch\af31505\loch\f39 Shader Model 3.0 cards are recommended. Shader Model 2.0 cards always render the lighting in low-quality and have
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39  some limitations concerning complex materials. 
 | 
			
		||||
\par -\tab \hich\af39\dbch\af31505\loch\f39 Windows 2000 or higher. AssimpView should also run on older versions, with DirectX 9 installed, but this has never been tested. If you're a proud owner of such a version and AssimpView works for you, let u
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 s know.}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid8068556 
 | 
			
		||||
\par }\pard \ltrpar\ql \li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39  
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 II.\tab 
 | 
			
		||||
User interface
 | 
			
		||||
\par }\pard \ltrpar\ql \li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 The viewer\hich\f39 \rquote 
 | 
			
		||||
\loch\f39 s user interface mainly consists of three components: 
 | 
			
		||||
\par }\pard \ltrpar\ql \fi340\li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
The menu bar provides access to the viewer\hich\f39 \rquote \loch\f39 s basic options.
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li720\ri850\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin850\lin720\itap0\pararsid5338181 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 -\tab }{\rtlch\fcs1 \af39\afs20 
 | 
			
		||||
\ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5338181 \loch\af39\dbch\af31505\hich\f39 \'93}{\rtlch\fcs1 \ab\ai\af39\afs20 \ltrch\fcs0 \b\i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5338181 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Viewer}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5338181 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39 
 | 
			
		||||
: Items to load / unload assets, take screenshots and open the viewer\hich\f39 \rquote \loch\f39 s options dialog.
 | 
			
		||||
\par }\pard \ltrpar\qj \fi-360\li720\ri1206\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1206\lin720\itap0\pararsid13463017 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \tab }{\rtlch\fcs1 \af39\afs16 
 | 
			
		||||
\ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 * \hich\af39\dbch\af31505\loch\f39 "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Open Asset}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
": Displays the file system dialog where you can choose a new asset to load. Note that you can also Drag&Drop models onto the viewer panel.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Close Asset}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 ": Closes the current asset and releases all resources associated with it. No action if no\hich\af39\dbch\af31505\loch\f39  asset is loaded.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Screenshot}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
": Save a snapshot of the viewer to a file. The snapshot does only include the preview panel, the rest of the user interface is not visible. Saved screenshots have no watermarks. This is }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689 \hich\af39\dbch\af31505\loch\f39 Open Source}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39  Software!
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Reset View}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 "\hich\af39\dbch\af31505\loch\f39 : Reset the viewing position and direction to the default settings. This is: Camera position at 0|0|0, looking at 0|0|1.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Memory consumption}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 ": Display a box with approximated memory statistics. Note that the total memory consumption needn't be equal to \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
the physical memory allocated to the process (as displayed by Windows }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689 \hich\af39\dbch\af31505\loch\f39 Task Manager}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 ). The memory consumption does only refer to the memory required for the asset itself, not for the rest of the viewer.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Setup file associations}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 ": Associate all file format\hich\af39\dbch\af31505\loch\f39 s which can be read by ASSIMP with the viewer. If you double }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689 \hich\af39\dbch\af31505\loch\f39 click}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
 on such a file in Windows Explorer, it will be automatically opened with AssimpView.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Recent files}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 ": Displays a popup menu with a list of recently opened assets. Simply click on one to r\hich\af39\dbch\af31505\loch\f39 eload it.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Clear history}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 ": Clear the file history
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Quit}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 ": What do you think?
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 - \tab }{\rtlch\fcs1 
 | 
			
		||||
\ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5338181 \hich\af39\dbch\af31505\loch\f39 "}{\rtlch\fcs1 \ab\ai\af39\afs20 \ltrch\fcs0 \b\i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5338181 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Tools}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5338181 \hich\af39\dbch\af31505\loch\f39 "}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5338181 \hich\af39\dbch\af31505\loch\f39 : Additional utilities like stereo view, normal type.
 | 
			
		||||
\par }\pard \ltrpar\qj \fi-360\li720\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin720\itap0\pararsid3942873 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \tab }{\rtlch\fcs1 \af39\afs16 
 | 
			
		||||
\ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
Log window}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 ": Displays the output window of the logger. Warnings are displayed in orange/yel\hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
low, errors in red, debug messages in blue and status }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid7213193 \hich\af39\dbch\af31505\loch\f39 information}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid9465848 \hich\af39\dbch\af31505\loch\f39  messages}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39  in green.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Save log to file}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 ": Saves the contents of the log window to a file.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Clear log}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 " Clear the contents of the log window
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Original normals}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 ": Specifies that the origin\hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
al normal set from the model file is used in the preview. Normally this is the best choice, as smoothing groups etc. are handled correctly, but there are many models out there which have invalid or corrupt normal sets. However, if a model has no normal se
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 t\hich\af39\dbch\af31505\loch\f39 , ASSIMP computes a smooth normal set for it. "Original normals" is in this case equivalent to "Smooth normals"
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Smooth normals}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 ": Specifies that a smoothed, per-vertex, normal set is used in the preview window.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Hard normals}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 ": Specifies that a hard, \hich\af39\dbch\af31505\loch\f39 per-face, normal set is used
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Flip normals}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 ": Flip all normal vectors
 | 
			
		||||
\par }\pard \ltrpar\qj \fi-360\li720\ri850\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin850\lin720\itap0\pararsid5338181 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 -}{\rtlch\fcs1 \af39\afs20 
 | 
			
		||||
\ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5338181 \tab \loch\af39\dbch\af31505\hich\f39 \'93}{\rtlch\fcs1 \ab\ai\af39\afs20 \ltrch\fcs0 \b\i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5338181 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Background}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5338181 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39 : Set the background color or use a texture (}{
 | 
			
		||||
\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid9465848\charrsid5338181 \hich\af39\dbch\af31505\loch\f39 cube maps}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5338181 \hich\af39\dbch\af31505\loch\f39  are supported as skyboxes) as background image for the viewer.
 | 
			
		||||
\par }\pard \ltrpar\qj \fi-360\li720\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin720\itap0\pararsid3942873 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \tab }{\rtlch\fcs1 \af39\afs16 
 | 
			
		||||
\ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Set color}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
": Displays a color picker where you can choose a new background color for the viewer.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Load skybox}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 ": Opens a file system dialog where you can select a skybox as background image. Accepted file formats are: *.dds, *.hdr.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Load texture}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 ": Opens a \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
file system dialog where you can select a texture as background image. If the format of the texture doesn't fit to the proportions of the preview window, the texture will be stretched. }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid3942873 
 | 
			
		||||
\par }\pard \ltrpar\qj \fi-12\li720\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin720\itap0\pararsid3942873 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Accepted file formats are: *.jpg;*.png;*.tif;*.tga;*.dds;*.hdr;*.ppm;*\hich\af39\dbch\af31505\loch\f39 .bmp
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 - "}{\rtlch\fcs1 
 | 
			
		||||
\ab\af39\afs20 \ltrch\fcs0 \b\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 ?}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 ": }{
 | 
			
		||||
\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \b\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Help and feedback}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 
 | 
			
		||||
 | 
			
		||||
\par \tab }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Feedback}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 ": Opens a popup menu with two options:
 | 
			
		||||
\par }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \tab }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 * "}{
 | 
			
		||||
\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Report bug}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 ": Report a bug in AssimpView or in Assimp
 | 
			
		||||
\par }\pard \ltrpar\qj \fi-360\li720\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid13463017 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \tab }{\rtlch\fcs1 \af39\afs16 
 | 
			
		||||
\ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Feature request}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 ": Tell us what}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid9465848 \hich\af39\dbch\af31505\loch\f39  you'd like us to support. Any }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid13463017 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 exotic file formats? 
 | 
			
		||||
\par }\pard \ltrpar\qj \li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0\pararsid13463017 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 \hich\f39 
 | 
			
		||||
The side panel \'93}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 Statistics}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 
 | 
			
		||||
\loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  di\hich\af39\dbch\af31505\loch\f39 splays rendering statistics. The meanings of the fields change if you change between normal}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid2432159 \hich\af39\dbch\af31505\loch\f39 , node a\hich\af39\dbch\af31505\loch\f39 nd texture or }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 material}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid2432159 \hich\af39\dbch\af31505\loch\f39  view}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39  mode.
 | 
			
		||||
\par }\pard \ltrpar\qj \li340\ri1474\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1474\lin340\itap0\pararsid13463017 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
Normal view mode:
 | 
			
		||||
\par }\pard \ltrpar\qj \li340\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin340\itap0\pararsid5053873 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \tab }{\rtlch\fcs1 \af39\afs16 
 | 
			
		||||
\ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Verts}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 ": Number of unique vertices in the asset
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 Faces}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689 \hich\af39\dbch\af31505\loch\f39 ": Numb}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
er of faces (= triangles) in the asset
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 Nodes}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 ": Number of nodes in the scenegraph, including the root node
 | 
			
		||||
\par }\pard \ltrpar\qj \fi-368\li708\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin708\itap0\pararsid5053873 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \tab 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 Mats:}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 " Number of different materials f}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 ound in the mesh. Most loaders }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 remove unreferenced materials.
 | 
			
		||||
\par }\pard \ltrpar\qj \li700\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin700\itap0\pararsid5053873 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 Mesh}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 ": Number of }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 sub meshes}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 . Each mesh h}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 \hich\af39\dbch\af31505\loch\f39 as only one material \tab assigned, so }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 this number\hich\af39\dbch\af31505\loch\f39  is in most cas}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6976329 \hich\af39\dbch\af31505\loch\f39 es equal to or higher than the }{
 | 
			
		||||
\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 number of materials.
 | 
			
		||||
\par \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 Shd}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 ": Number of unique shaders created}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39  for this asset. If AssimpView }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
detects that two materials can be rendered using }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 \hich\af39\dbch\af31505\loch\f39 the same }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689 \hich\af39\dbch\af31505\loch\f39 Shader}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 \hich\af39\dbch\af31505\loch\f39  code, but with }{\rtlch\fcs1 
 | 
			
		||||
\af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 different}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39  }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 parameterizations}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 , it do}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 \hich\af39\dbch\af31505\loch\f39 es
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 n't create the }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689 \hich\af39\dbch\af31505\loch\f39 Shader}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 \hich\af39\dbch\af31505\loch\f39  twice. }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
Most engines do so, too. }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6976329 \hich\af39\dbch\af31505\loch\f39 This allows you to \hich\af39\dbch\af31505\loch\f39 approximate\hich\af39\dbch\af31505\loch\f39  the
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39  rendering const for the asset.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 
 | 
			
		||||
\par \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 Time}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 ": Time required for loading, in seco}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 nds. This time is the raw time }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 the process spent in Assimp loading the mod}{
 | 
			
		||||
\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 \hich\af39\dbch\af31505\loch\f39 el itself, it does not include }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 texture loading, }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Shader}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39  }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5113869\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 compilation...}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181 
 | 
			
		||||
\par }\pard \ltrpar\qj \li340\ri1474\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1474\lin340\itap0\pararsid6976329 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid6976329 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
Texture view mode\hich\af39\dbch\af31505\loch\f39 :
 | 
			
		||||
\par }\pard \ltrpar\qj \li340\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin340\itap0\pararsid6976329 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid6976329 \tab }{\rtlch\fcs1 \af39\afs16 
 | 
			
		||||
\ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6976329\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
Width}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6976329\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 ": }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Width of the texture, in pixels}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6976329\charrsid5053873 
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 \hich\af39\dbch\af31505\loch\f39 Height}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid6976329 \hich\af39\dbch\af31505\loch\f39 ":}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 \hich\af39\dbch\af31505\loch\f39  \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
Height of the texture in pixels
 | 
			
		||||
\par }\pard \ltrpar\qj \li708\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin708\itap0\pararsid2432159 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6976329\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 \hich\af39\dbch\af31505\loch\f39 Format}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid6976329\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 ": }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
Format of the texture. This will normally be ARGB8. Other possible \hich\af39\dbch\af31505\loch\f39 valu\hich\af39\dbch\af31505\loch\f39 e\hich\af39\dbch\af31505\loch\f39 s are:\hich\af39\dbch\af31505\loch\f39  \hich\af39\dbch\af31505\loch\f39 RRG565
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 , ARGB16f\hich\af39\dbch\af31505\loch\f39 , ARGB32F. Embedded textures are always converted \hich\af39\dbch\af31505\loch\f39 to ARGB8 format, even if they\loch\af39\dbch\af31505\hich\f39 \rquote 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 re stored\hich\af39\dbch\af31505\loch\f39  in the file\hich\af39\dbch\af31505\loch\f39  with a higher color\hich\af39\dbch\af31505\loch\f39  \hich\af39\dbch\af31505\loch\f39 depth.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid6976329 
 | 
			
		||||
\par }\pard \ltrpar\qj \fi368\li340\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin340\itap0\pararsid2432159 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 \hich\af39\dbch\af31505\loch\f39 UV}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 ": }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
UV channel used by the texture. Normally this is the first channel.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159\charrsid5053873 
 | 
			
		||||
\par }\pard \ltrpar\qj \li340\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin340\itap0\pararsid2432159 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159\charrsid5053873 \tab 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 * }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 \loch\af39\dbch\af31505\hich\f39 \'93}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 \hich\af39\dbch\af31505\loch\f39 MIPs}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 \hich\af39\dbch\af31505\loch\f39 ":
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39  \hich\af39\dbch\af31505\loch\f39 Number of MIP map levels created for the textur\hich\af39\dbch\af31505\loch\f39 e
 | 
			
		||||
\par }\pard \ltrpar\qj \li708\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin708\itap0\pararsid2432159 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 * }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 \loch\af39\dbch\af31505\hich\f39 \'93}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 \hich\af39\dbch\af31505\loch\f39 Blend}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 \hich\af39\dbch\af31505\loch\f39 ":
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39  \hich\af39\dbch\af31505\loch\f39 Strength of the texture. The \hich\af39\dbch\af31505\loch\f39 color value obtained from\hich\af39\dbch\af31505\loch\f39  the texture is \hich\af39\dbch\af31505\loch\f39 multiplied
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39  \hich\af39\dbch\af31505\loch\f39 with this factor to calculate the final color.
 | 
			
		||||
\par }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Op}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 ": }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid2432159 \hich\af39\dbch\af31505\loch\f39 Blend operation used to combine this texture with the corresponding \hich\af39\dbch\af31505\loch\f39 material color \hich\af39\dbch\af31505\loch\f39 (
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 or the previous texture\hich\af39\dbch\af31505\loch\f39 ).
 | 
			
		||||
\par }\pard \ltrpar\qj \li340\ri1474\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1474\lin340\itap0\pararsid6976329 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid6976329 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
Always visible\hich\af39\dbch\af31505\loch\f39 :}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid6976329\charrsid6976329 
 | 
			
		||||
\par }\pard \ltrpar\qj \li700\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin700\itap0\pararsid9465848 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 FPS}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 ": Cur\hich\af39\dbch\af31505\loch\f39 rent frame rate, in frames per se}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 \hich\af39\dbch\af31505\loch\f39 cond. Note that this number }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid13463017\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 is }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 not really exact.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 \hich\af39\dbch\af31505\loch\f39  It is only an approximation to the real frame rate. The maximum frame rate will never be reached since there is a 10 ms blocker included (to work around good }{
 | 
			
		||||
\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6976329 \hich\af39\dbch\af31505\loch\f39 our }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 old AMD timing b\hich\af39\dbch\af31505\loch\f39 ug)}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5338181\charrsid9465848 
 | 
			
		||||
\par }\pard \ltrpar\ql \li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 \hich\f39 The \'93}{
 | 
			
		||||
\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 Rendering}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 
 | 
			
		||||
\loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  panel provides rendering-related options, such as wireframe/normal visualization.}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid9465848 
 | 
			
		||||
\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 \hich\f39  \'93}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Interaction}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  bundles all input related options.
 | 
			
		||||
\par \hich\af39\dbch\af31505\loch\f39 The main \hich\af39\dbch\af31505\loch\f39 component is the large viewer panel where the assets are displayed. Status messages (e.g. if a texture could not be loaded)}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid9465848 \hich\af39\dbch\af31505\loch\f39  are displayed in the upper-right}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39  edge.
 | 
			
		||||
}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid9465848 \hich\af39\dbch\af31505\loch\f39  Yellow messages are simple information messages, red messages are error messages. Green messa\hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
ges, however, are coming from heart ;-)}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 
 | 
			
		||||
\par }{\rtlch\fcs1 \af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid5338181 
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 III.\tab Input
 | 
			
		||||
\par }\pard \ltrpar\ql \li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 \hich\f39 
 | 
			
		||||
The input mode depends on the selected input behavior. If \'84}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 Zoom/Rotate}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  is }{\rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 NOT}{
 | 
			
		||||
\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39  selected the following scheme applies:
 | 
			
		||||
\par }\pard \ltrpar\ql \fi368\li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \loch\af39\dbch\af31505\hich\f39 \lquote }{\rtlch\fcs1 
 | 
			
		||||
\ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 Arrow up}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \loch\af39\dbch\af31505\hich\f39 
 | 
			
		||||
\rquote \loch\f39  \tab = Move forwards
 | 
			
		||||
\par \loch\af39\dbch\af31505\hich\f39 \lquote }{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 Arrow left\hich\f39 \rquote }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39  \tab = Move to the left
 | 
			
		||||
\par \loch\af39\dbch\af31505\hich\f39 \lquote }{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 Arrow down}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \loch\af39\dbch\af31505\hich\f39 \rquote \loch\f39  \tab \hich\af39\dbch\af31505\loch\f39 = Move backwards
 | 
			
		||||
\par \loch\af39\dbch\af31505\hich\f39 \lquote }{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 Arrow right}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \loch\af39\dbch\af31505\hich\f39 \rquote \loch\f39  \tab = Move to the right
 | 
			
		||||
\par }\pard \ltrpar\ql \fi340\li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
The mouse specifies the view direction. This is the typical FPS input behavior.
 | 
			
		||||
\par }{\rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 \hich\f39 Otherwise, if \'84}{\rtlch\fcs1 \ab\ai\af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\b\i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 Zoom/Rotate}{\rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39 
 | 
			
		||||
 is enabled:
 | 
			
		||||
\par }\pard \ltrpar\ql \li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \loch\af39\dbch\af31505\hich\f39 \'93}{\rtlch\fcs1 
 | 
			
		||||
\ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 Left Mouse Button}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 
 | 
			
		||||
\loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  = Keep pressed and move the mouse to rotate the asset around its\hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
 local axes. Inside the yellow circle: x/y-axis, outside: Z-axis. To rotate around one axis only use the axis snap-ins (yellow squares with a cross inside).
 | 
			
		||||
\par \loch\af39\dbch\af31505\hich\f39 \'93}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 Right Mouse Button}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  = Keep pressed and move the mouse to rotate the light source(s) around their x\hich\af39\dbch\af31505\loch\f39  and y axes.
 | 
			
		||||
\par \loch\af39\dbch\af31505\hich\f39 \'93}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 Middle Mouse Button}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  = Keep pressed and move the mouse from the left to the right or the other way round to increase/decrease the intensity of the light source(s)
 | 
			
		||||
\par \loch\af39\dbch\af31505\hich\f39 \'93}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 Right }{\rtlch\fcs1 \ab\ai\af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\b\i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 AND}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39  Left Mouse Button}{
 | 
			
		||||
\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  = Keep pressed and move the mouse to rotate skybo\hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
x (if existing) around the global x/y axes.
 | 
			
		||||
\par \loch\af39\dbch\af31505\hich\f39 \'93}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 Mouse wheel}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  = Zoom in/out
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 IV.\tab }{\rtlch\fcs1 
 | 
			
		||||
\af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 Rendering
 | 
			
		||||
\par }\pard \ltrpar\ql \li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
Enabling MultiSampling improves rendering quality. MultiSampling is activated by default. The highest quality MultiSampling mode supported by the video card is used.
 | 
			
		||||
\par \hich\af39\dbch\af31505\loch\f39 Mult\hich\af39\dbch\af31505\loch\f39 iSampling is especially useful to remove line artifacts in wireframe/normals mode. Note that the transition between normal and multisampled rendering may take a few seconds.
 | 
			
		||||
\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 Rendering is done via Direct3D\'99\loch\f39 \hich\f39  9.0c. Note that the \'93}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
Low-quality lighting}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39 -Option \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
is not available for PS 2.0 cards. Lighting on PS 2.0 cards is always low quality.
 | 
			
		||||
\par 
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 V.\tab }{\rtlch\fcs1 
 | 
			
		||||
\af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid5338181 \hich\af39\dbch\af31505\loch\f39 Known issues 
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li700\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin700\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 -\tab \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
If a loading process is canceled it is not guaranteed that further loading processes will succeed. ASSIMP Viewer might even crash in this case. }{\rtlch\fcs1 \af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid5338181 
 | 
			
		||||
\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 -\tab \hich\af39\dbch\af31505\loch\f39 Some v\hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
ery complex materials involving real time reflection/refraction are not displayed properly.}{\rtlch\fcs1 \af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid5338181 
 | 
			
		||||
\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid5338181 -\tab \hich\af39\dbch\af31505\loch\f39 When rendering non-opaque objects some triangle artifacts might occur.}{\rtlch\fcs1 \af39\afs24 \ltrch\fcs0 
 | 
			
		||||
\f39\fs24\lang1033\langfe1031\langnp1033\insrsid5338181 
 | 
			
		||||
\par }{\*\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8
 | 
			
		||||
72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7
 | 
			
		||||
2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b
 | 
			
		||||
44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7
 | 
			
		||||
065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000
 | 
			
		||||
00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08
 | 
			
		||||
84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc
 | 
			
		||||
52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353
 | 
			
		||||
bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468
 | 
			
		||||
656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c
 | 
			
		||||
070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7
 | 
			
		||||
29e245eb2b260a0238fd010000ffff0300504b03041400060008000000210096b5ade296060000501b0000160000007468656d652f7468656d652f7468656d65
 | 
			
		||||
312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87615b8116d8
 | 
			
		||||
a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad79482a9c04
 | 
			
		||||
98f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b5d8a314d3c
 | 
			
		||||
94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab999fb7b471
 | 
			
		||||
7509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9699640f671
 | 
			
		||||
9e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd5868b37a088d1
 | 
			
		||||
e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d60cf03ac1a5
 | 
			
		||||
193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f9e7ef3f2d1
 | 
			
		||||
17d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be15c308d3f2
 | 
			
		||||
8acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a99793849c26ae6
 | 
			
		||||
6252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d32a423279a
 | 
			
		||||
668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2af074481847
 | 
			
		||||
bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86e877f0034e
 | 
			
		||||
16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb44f95d843b
 | 
			
		||||
5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a6409fb44d0
 | 
			
		||||
8741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c3d9058edf2
 | 
			
		||||
c00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db02565e85f3b966
 | 
			
		||||
0d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276b9f7dec44b
 | 
			
		||||
7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc399161ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8c33585b5fb
 | 
			
		||||
9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e51440ca2e0
 | 
			
		||||
088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95b21be5ceaf
 | 
			
		||||
8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff6dce591a26
 | 
			
		||||
ade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b9265844c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec69ffb9e65d0
 | 
			
		||||
28d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f44acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239b75a5bb1e6
 | 
			
		||||
345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a44959d366ad93
 | 
			
		||||
b65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b34766661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e82db8df9f30
 | 
			
		||||
254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f74
 | 
			
		||||
68656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f24
 | 
			
		||||
51eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198
 | 
			
		||||
720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528
 | 
			
		||||
a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa0000001c0200001300000000000000000000000000
 | 
			
		||||
000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b000000000000000000000000
 | 
			
		||||
002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000140200007468
 | 
			
		||||
656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210096b5ade296060000501b000016000000000000000000
 | 
			
		||||
00000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b010000270000000000
 | 
			
		||||
00000000000000009b0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000960a00000000}
 | 
			
		||||
{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
 | 
			
		||||
617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
 | 
			
		||||
6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
 | 
			
		||||
656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
 | 
			
		||||
{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;
 | 
			
		||||
\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;
 | 
			
		||||
\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7;
 | 
			
		||||
\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000
 | 
			
		||||
4d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000
 | 
			
		||||
d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 | 
			
		||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 | 
			
		||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 | 
			
		||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 | 
			
		||||
fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 | 
			
		||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 | 
			
		||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 | 
			
		||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 | 
			
		||||
ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f000000000000000000000000b080
 | 
			
		||||
05aceae0c801feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
 | 
			
		||||
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
 | 
			
		||||
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
 | 
			
		||||
0000000000000000000000000000000000000000000000000105000000000000}}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								thirdparty/assimp/tools/assimp_view/n.bmp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 822 B  | 
							
								
								
									
										235
									
								
								thirdparty/assimp/tools/assimp_view/resource.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,235 @@
 | 
			
		||||
//{{NO_DEPENDENCIES}}
 | 
			
		||||
// Microsoft Visual C++ generated include file.
 | 
			
		||||
// Used by assimp_view.rc
 | 
			
		||||
//
 | 
			
		||||
#define IDC_MYICON                      2
 | 
			
		||||
#define IDD_ASSIMP_VIEW_DIALOG          102
 | 
			
		||||
#define IDD_ABOUTBOX                    103
 | 
			
		||||
#define IDI_ASSIMP_VIEW                 107
 | 
			
		||||
#define IDI_SMALL                       108
 | 
			
		||||
#define IDR_MAINFRAME                   128
 | 
			
		||||
#define IDD_DIALOGMAIN                  129
 | 
			
		||||
#define IDB_BITMAP1                     130
 | 
			
		||||
#define IDR_MENU1                       131
 | 
			
		||||
#define IDD_LOADDIALOG                  132
 | 
			
		||||
#define IDB_BITMAP2                     134
 | 
			
		||||
#define IDD_AVHELP                      135
 | 
			
		||||
#define IDR_TEXT1                       138
 | 
			
		||||
#define IDR_MAX                         140
 | 
			
		||||
#define IDB_MAXCIRCLEMASK               141
 | 
			
		||||
#define IDB_MAXCIRCLE                   142
 | 
			
		||||
#define IDR_HUD                         143
 | 
			
		||||
#define IDR_HUDMASK                     144
 | 
			
		||||
#define IDB_BANIM                       145
 | 
			
		||||
#define IDB_BITMAP4                     146
 | 
			
		||||
#define IDB_BDISPLAY                    146
 | 
			
		||||
#define IDB_BITMAP5                     147
 | 
			
		||||
#define IDB_BINTER                      147
 | 
			
		||||
#define IDB_BITMAP6                     148
 | 
			
		||||
#define IDB_BRENDERING                  148
 | 
			
		||||
#define IDB_BITMAP7                     149
 | 
			
		||||
#define IDB_BSTATS                      149
 | 
			
		||||
#define IDB_BTX                         150
 | 
			
		||||
#define IDB_BITMAP8                     151
 | 
			
		||||
#define IDB_BFX                         151
 | 
			
		||||
#define IDB_BITMAP9                     152
 | 
			
		||||
#define IDB_BNODE                       152
 | 
			
		||||
#define IDB_BITMAP10                    153
 | 
			
		||||
#define IDB_BROOT                       153
 | 
			
		||||
#define IDD_LOGVIEW                     154
 | 
			
		||||
#define IDB_BTXI                        155
 | 
			
		||||
#define IDR_TXPOPUP                     156
 | 
			
		||||
#define IDR_MATPOPUP                    157
 | 
			
		||||
#define IDD_DIALOGSMOOTH                159
 | 
			
		||||
#define SVNRevision                     700
 | 
			
		||||
#define IDC_CHECK1                      1000
 | 
			
		||||
#define IDC_TOGGLEMS                    1000
 | 
			
		||||
#define IDC_CHECK2                      1001
 | 
			
		||||
#define IDC_TOGGLEWIRE                  1001
 | 
			
		||||
#define IDC_CHECK3                      1002
 | 
			
		||||
#define IDC_TOGGLEMAT                   1002
 | 
			
		||||
#define IDC_CHECK4                      1003
 | 
			
		||||
#define IDC_TOGGLENORMALS               1003
 | 
			
		||||
#define IDC_CHECK5                      1004
 | 
			
		||||
#define IDC_AUTOROTATE                  1004
 | 
			
		||||
#define IDC_RT                          1006
 | 
			
		||||
#define IDC_NUMVERTS                    1007
 | 
			
		||||
#define IDC_NUMFACES                    1008
 | 
			
		||||
#define IDC_NUMMATS                     1009
 | 
			
		||||
#define IDC_FPS                         1010
 | 
			
		||||
#define IDC_EFPS                        1011
 | 
			
		||||
#define IDC_EMAT                        1012
 | 
			
		||||
#define IDC_EFACE                       1013
 | 
			
		||||
#define IDC_EVERT                       1014
 | 
			
		||||
#define IDC_CHECK6                      1015
 | 
			
		||||
#define IDC_LIGHTROTATE                 1015
 | 
			
		||||
#define IDC_3LIGHTS                     1016
 | 
			
		||||
#define IDC_PROGRESS                    1016
 | 
			
		||||
#define IDC_LOADTIME                    1017
 | 
			
		||||
#define IDC_ELOAD                       1018
 | 
			
		||||
#define IDC_CHECK7                      1019
 | 
			
		||||
#define IDC_ZOOM                        1019
 | 
			
		||||
#define IDC_CHECK8                      1020
 | 
			
		||||
#define IDC_LOWQUALITY                  1020
 | 
			
		||||
#define IDC_NUMMATS2                    1021
 | 
			
		||||
#define IDC_NUMSHADERS                  1021
 | 
			
		||||
#define IDC_ESHADER                     1022
 | 
			
		||||
#define IDC_RICHEDIT21                  1023
 | 
			
		||||
#define IDC_EMESH                       1023
 | 
			
		||||
#define IDC_CHECK9                      1024
 | 
			
		||||
#define IDC_NOSPECULAR                  1024
 | 
			
		||||
#define IDC_PLAYANIM                    1025
 | 
			
		||||
#define IDC_3LIGHTS2                    1025
 | 
			
		||||
#define IDC_NOAB                        1025
 | 
			
		||||
#define IDC_SPEED                       1026
 | 
			
		||||
#define IDC_COMBO1                      1027
 | 
			
		||||
#define IDC_PINORDER                    1028
 | 
			
		||||
#define IDC_NOSPECULAR2                 1028
 | 
			
		||||
#define IDC_SSPEED                      1029
 | 
			
		||||
#define IDC_SANIM                       1030
 | 
			
		||||
#define IDC_SANIMGB                     1031
 | 
			
		||||
#define IDC_ENODE                       1031
 | 
			
		||||
#define IDC_ESHADER2                    1032
 | 
			
		||||
#define IDC_ETEX                        1032
 | 
			
		||||
#define IDC_TREE1                       1033
 | 
			
		||||
#define IDC_EDIT1                       1034
 | 
			
		||||
#define IDC_BLUBB                       1037
 | 
			
		||||
#define IDC_BLABLA                      1038
 | 
			
		||||
#define IDC_NUMNODES                    1038
 | 
			
		||||
#define IDC_LCOLOR1                     1041
 | 
			
		||||
#define IDC_LCOLOR2                     1042
 | 
			
		||||
#define IDC_ENODEWND                    1043
 | 
			
		||||
#define IDC_LCOLOR3                     1044
 | 
			
		||||
#define IDC_LRESET                      1046
 | 
			
		||||
#define IDC_NUMMESHES                   1047
 | 
			
		||||
#define IDC_VIEWMAT                     1048
 | 
			
		||||
#define IDC_VIEWMATRIX                  1048
 | 
			
		||||
#define IDC_SLIDERANIM                  1052
 | 
			
		||||
#define IDC_PLAY                        1053
 | 
			
		||||
#define IDC_SHOWSKELETON                1054
 | 
			
		||||
#define IDC_BFCULL                      1055
 | 
			
		||||
#define IDC_EDITSM                      1056
 | 
			
		||||
#define ID_VIEWER_OPEN                  32771
 | 
			
		||||
#define ID_VIEWER_CLOSETHIS             32772
 | 
			
		||||
#define ID_VIEWER_CLOSEASSET            32773
 | 
			
		||||
#define ID_VIEWER_QUIT                  32774
 | 
			
		||||
#define ID__ABOUT                       32775
 | 
			
		||||
#define ID__HELP                        32776
 | 
			
		||||
#define ID_VIEWER_SAVESCREENSHOTTOFILE  32777
 | 
			
		||||
#define ID_VIEWER_RESETVIEW             32778
 | 
			
		||||
#define ID_BACKGROUND_LOADTEXTURE       32779
 | 
			
		||||
#define ID_BACKGROUND_CLEAR             32780
 | 
			
		||||
#define ID_BACKGROUND_SETCOLOR          32781
 | 
			
		||||
#define ID_Menu                         32782
 | 
			
		||||
#define ID_BACKGROUND_LOADSKYBOX        32783
 | 
			
		||||
#define ID_VIEWER_H                     32784
 | 
			
		||||
#define ID_TOOLS_LOGWINDOW              32785
 | 
			
		||||
#define ID_TOOLS_SAVELOGTOFILE          32786
 | 
			
		||||
#define ID_TOOLS_CLEARLOG               32787
 | 
			
		||||
#define ID_VIEWER_RECENTFILES           32788
 | 
			
		||||
#define ID_VIEWER_MEMORYCONSUMATION     32789
 | 
			
		||||
#define ID_VIEWER_CLEARHISTORY          32790
 | 
			
		||||
#define ID_TOOLS_ORIGINALNORMALS        32791
 | 
			
		||||
#define ID_TOOLS_SMOOTHNORMALS          32792
 | 
			
		||||
#define ID_TOOLS_HARDNORMALS            32793
 | 
			
		||||
#define ID_TOOLS_FLIPNORMALS            32794
 | 
			
		||||
#define ID__S                           32795
 | 
			
		||||
#define ID__FEEDBACK                    32796
 | 
			
		||||
#define ID_FEEDBACK_GH                  32797
 | 
			
		||||
#define ID_FEEDBACK_FEATUREREQUEST      32798
 | 
			
		||||
#define ID_FEEDBACK_DONATE              32799
 | 
			
		||||
#define ID_ANIMATION_PLAYALLINORDER     32800
 | 
			
		||||
#define ID_TOOLS_STEREOVIEW             32801
 | 
			
		||||
#define ID_EGNEKLGEG_EGEG               32802
 | 
			
		||||
#define ID_HEY_REPLACE                  32803
 | 
			
		||||
#define ID_HEY_EXPORT                   32804
 | 
			
		||||
#define ID_HEY_REMOVE                   32805
 | 
			
		||||
#define ID_SOLONG_ADDDIFFUSETEXTURE     32806
 | 
			
		||||
#define ID_SOLONG_ADDSPECULARTEXTURE    32807
 | 
			
		||||
#define ID_SOLONG_ADDAMBIENTTEXTURE     32808
 | 
			
		||||
#define ID_SOLONG_ADDEMISSIVETEXTURE    32809
 | 
			
		||||
#define ID_SOLONG_ADDOPACITYTEXTURE     32810
 | 
			
		||||
#define ID_SOLONG_ADDNORMAL             32811
 | 
			
		||||
#define ID_SOLONG_ADDSHININESSTEXTURE   32812
 | 
			
		||||
#define ID_SOLONG_CLEARDIFFUSECOLOR     32813
 | 
			
		||||
#define ID_SOLONG_CLEARSPECULARCOLOR    32814
 | 
			
		||||
#define ID_SOLONG_CLEARAMBIENTCOLOR     32815
 | 
			
		||||
#define ID_SOLONG_CLEAREMISSIVECOLOR    32816
 | 
			
		||||
#define ID_SOLONG_CLEARTRANSPARENCY     32817
 | 
			
		||||
#define ID_SOLONG_MAKEDEFAULTMATERIAL   32818
 | 
			
		||||
#define ID_HEY_RESETTEXTURE             32819
 | 
			
		||||
#define ID_SOLONG_SETSHADINGMODE        32820
 | 
			
		||||
#define ID_SETSHADINGMODE_GOURAUD       32821
 | 
			
		||||
#define ID_SETSHADINGMODE_PHONG         32822
 | 
			
		||||
#define ID_OPTIMIZE_OPTIMIZEACMR        32823
 | 
			
		||||
#define ID_OPTIMIZE_OPTIMIZEOVERDRAW    32824
 | 
			
		||||
#define ID_OPTIMIZE_OPTIMIZEBOTH        32825
 | 
			
		||||
#define ID_VERTEXCACHELOCALITY_FINDCURRENT 32826
 | 
			
		||||
#define ID_VERTEXCACHELOCALITY_OPTIMIZE 32827
 | 
			
		||||
#define ID_VERTEXCACHELOCALITY_FINDBEST 32828
 | 
			
		||||
#define ID_OPTIMIZE_SCENEGRAPH          32829
 | 
			
		||||
#define ID_SCENEGRAPH_SMALLESTPOSSIBLEGRAPH 32830
 | 
			
		||||
#define ID_SMOOTHNORMALS_5              32831
 | 
			
		||||
#define ID_SMOOTHNORMALS_6              32832
 | 
			
		||||
#define ID_SMOOTHNORMALS_MAXANGLE60     32833
 | 
			
		||||
#define ID_SMOOTHNORMALS_MAXANGLE90     32834
 | 
			
		||||
#define ID_SMOOTHNORMALS_MAXANGLE120    32835
 | 
			
		||||
#define ID_SMOOTHNORMALS_NOLIMIT        32836
 | 
			
		||||
#define ID_SMOOTHNORMALS_30             32837
 | 
			
		||||
#define ID_SMOOTHNORMALS_40             32838
 | 
			
		||||
#define ID_SMOOTHNORMALS_60             32839
 | 
			
		||||
#define ID_SMOOTHNORMALS_90             32840
 | 
			
		||||
#define ID_SMOOTHNORMALS_120            32841
 | 
			
		||||
#define ID_Menu32842                    32842
 | 
			
		||||
#define ID_SMOOTHANGLE_30               32843
 | 
			
		||||
#define ID_SMOOTHANGLE_40               32844
 | 
			
		||||
#define ID_SMOOTHANGLE_50               32845
 | 
			
		||||
#define ID_SMOOTHANGLE_60               32846
 | 
			
		||||
#define ID_SMOOTHANGLE_70               32847
 | 
			
		||||
#define ID_SMOOTHANGLE_90               32848
 | 
			
		||||
#define ID_SMOOTHANGLE_120              32849
 | 
			
		||||
#define ID_SMOOTHANGLE_NONE             32850
 | 
			
		||||
#define ID_TOOLS_SETANGLELIMIT          32851
 | 
			
		||||
#define ID_VIEWER_PP_JIV                32852
 | 
			
		||||
#define ID_VIEWER_PP_RRM                32852
 | 
			
		||||
#define ID_VIEWER_PP_OM                 32853
 | 
			
		||||
#define ID_VIEWER_PP_OG                 32854
 | 
			
		||||
#define ID_VIEWER_PP_FIM                32855
 | 
			
		||||
#define ID_VIEWER_PP_VDS                32856
 | 
			
		||||
#define ID_VIEWER_PP_PTV                32857
 | 
			
		||||
#define ID_VIEWER_PP_ICL                32858
 | 
			
		||||
#define ID_VIEWER_PP_FIN                32859
 | 
			
		||||
#define ID_VIEWER_PP_FD                 32860
 | 
			
		||||
#define ID_VIEWER_PP_FID                32861
 | 
			
		||||
#define ID_VIEWER_PP_GUV                32862
 | 
			
		||||
#define ID_VIEWER_PP_TUV                32863
 | 
			
		||||
#define ID_VIEWER_PP_RLINE_PNT          32864
 | 
			
		||||
#define ID_REPORTBUG                    32865
 | 
			
		||||
#define ID_FR                           32866
 | 
			
		||||
#define ID__WEBSITE                     32867
 | 
			
		||||
#define ID__SF                          32868
 | 
			
		||||
#define ID__                            32869
 | 
			
		||||
#define ID__WEBSITESF                   32870
 | 
			
		||||
#define ID_IMPORTSETTINGS_CALCULATETANGENTSPACE 32871
 | 
			
		||||
#define ID_VIEWER_CTS                   32872
 | 
			
		||||
#define ID_VIEWER_PP_CTS                32873
 | 
			
		||||
#define ID_VIEWER_RELOAD                32874
 | 
			
		||||
#define ID_VIEWER_PP_RRM2               32875
 | 
			
		||||
#define ID_IMPORTSETTINGS_RESETTODEFAULT 32876
 | 
			
		||||
#define ID_IMPORTSETTINGS_OPENPOST      32877
 | 
			
		||||
#define ID_EXPORT                       32878
 | 
			
		||||
#define ID_IMPORTSETTINGS_REMOVEDUMMYBONES 32879
 | 
			
		||||
#define ID_VIEWER_PP_DB                 32880
 | 
			
		||||
#define IDC_STATIC                      -1
 | 
			
		||||
 | 
			
		||||
// Next default values for new objects
 | 
			
		||||
// 
 | 
			
		||||
#ifdef APSTUDIO_INVOKED
 | 
			
		||||
#ifndef APSTUDIO_READONLY_SYMBOLS
 | 
			
		||||
#define _APS_NO_MFC                     1
 | 
			
		||||
#define _APS_NEXT_RESOURCE_VALUE        160
 | 
			
		||||
#define _APS_NEXT_COMMAND_VALUE         32881
 | 
			
		||||
#define _APS_NEXT_CONTROL_VALUE         1059
 | 
			
		||||
#define _APS_NEXT_SYMED_VALUE           110
 | 
			
		||||
#endif
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								thirdparty/assimp/tools/assimp_view/root.bmp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 822 B  | 
							
								
								
									
										8
									
								
								thirdparty/assimp/tools/assimp_view/stdafx.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,8 @@
 | 
			
		||||
// stdafx.cpp : Quelldatei, die nur die Standard-Includes einbindet.
 | 
			
		||||
// assimp_view.pch ist der vorkompilierte Header.
 | 
			
		||||
// stdafx.obj enthält die vorkompilierten Typinformationen.
 | 
			
		||||
 | 
			
		||||
#include "stdafx.h"
 | 
			
		||||
 | 
			
		||||
// TODO: Auf zusätzliche Header verweisen, die in STDAFX.H
 | 
			
		||||
// und nicht in dieser Datei erforderlich sind.
 | 
			
		||||
							
								
								
									
										73
									
								
								thirdparty/assimp/tools/assimp_view/stdafx.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,73 @@
 | 
			
		||||
// stdafx.h : Includedatei für Standardsystem-Includedateien
 | 
			
		||||
// oder häufig verwendete projektspezifische Includedateien,
 | 
			
		||||
// die nur in unregelmäßigen Abständen geändert werden.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
// Ändern Sie folgende Definitionen für Plattformen, die älter als die unten angegebenen sind.
 | 
			
		||||
// In MSDN finden Sie die neuesten Informationen über die entsprechenden Werte für die unterschiedlichen Plattformen.
 | 
			
		||||
#ifndef WINVER              // Lassen Sie die Verwendung spezifischer Features von Windows XP oder später zu.
 | 
			
		||||
#   define WINVER 0x0501        // Ändern Sie dies in den geeigneten Wert für andere Versionen von Windows.
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef _WIN32_WINNT        // Lassen Sie die Verwendung spezifischer Features von Windows XP oder später zu.
 | 
			
		||||
#   define _WIN32_WINNT 0x0501  // Ändern Sie dies in den geeigneten Wert für andere Versionen von Windows.
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef _WIN32_WINDOWS      // Lassen Sie die Verwendung spezifischer Features von Windows 98 oder später zu.
 | 
			
		||||
#   define _WIN32_WINDOWS 0x0410 // Ändern Sie dies in den geeigneten Wert für Windows Me oder höher.
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifndef _WIN32_IE           // Lassen Sie die Verwendung spezifischer Features von IE 6.0 oder später zu.
 | 
			
		||||
#define _WIN32_IE 0x0600    // Ändern Sie dies in den geeigneten Wert für andere Versionen von IE.
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Windows-Headerdateien:
 | 
			
		||||
#include <windows.h>
 | 
			
		||||
 | 
			
		||||
// C RunTime-Headerdateien
 | 
			
		||||
#include <assert.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <malloc.h>
 | 
			
		||||
#include <memory.h>
 | 
			
		||||
#include <tchar.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <time.h>
 | 
			
		||||
 | 
			
		||||
// D3D9 includes
 | 
			
		||||
 | 
			
		||||
#if (defined _DEBUG)
 | 
			
		||||
#   define D3D_DEBUG_INFO
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <d3d9.h>
 | 
			
		||||
#include <d3dx9.h>
 | 
			
		||||
#include <d3dx9mesh.h>
 | 
			
		||||
 | 
			
		||||
// ShellExecute()
 | 
			
		||||
#include <shellapi.h>
 | 
			
		||||
#include <commctrl.h>
 | 
			
		||||
 | 
			
		||||
// GetOpenFileName()
 | 
			
		||||
#include <commdlg.h>
 | 
			
		||||
#include <algorithm>
 | 
			
		||||
#include <mmsystem.h>
 | 
			
		||||
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <list>
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
#if defined _MSC_VER
 | 
			
		||||
// Windows CommonControls 6.0 Manifest Extensions
 | 
			
		||||
#   if defined _M_IX86
 | 
			
		||||
#       pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
 | 
			
		||||
#   elif defined _M_IA64
 | 
			
		||||
#       pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
 | 
			
		||||
#   elif defined _M_X64
 | 
			
		||||
#       pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
 | 
			
		||||
#   else
 | 
			
		||||
#       pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
 | 
			
		||||
#   endif
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								thirdparty/assimp/tools/assimp_view/test.xcf
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										373
									
								
								thirdparty/assimp/tools/assimp_view/text1.bin
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,373 @@
 | 
			
		||||
{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi31507\deflang1031\deflangfe1031\themelang1031\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f34\fbidi \froman\fcharset1\fprq2{\*\panose 02040503050406030204}Cambria Math;}
 | 
			
		||||
{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}MS Reference Sans Serif;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
 | 
			
		||||
{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}
 | 
			
		||||
{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
 | 
			
		||||
{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
 | 
			
		||||
{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f40\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f41\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
 | 
			
		||||
{\f43\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f44\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f45\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f46\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
 | 
			
		||||
{\f47\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f48\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f430\fbidi \fswiss\fcharset238\fprq2 MS Reference Sans Serif CE;}
 | 
			
		||||
{\f431\fbidi \fswiss\fcharset204\fprq2 MS Reference Sans Serif Cyr;}{\f433\fbidi \fswiss\fcharset161\fprq2 MS Reference Sans Serif Greek;}{\f434\fbidi \fswiss\fcharset162\fprq2 MS Reference Sans Serif Tur;}
 | 
			
		||||
{\f437\fbidi \fswiss\fcharset186\fprq2 MS Reference Sans Serif Baltic;}{\f438\fbidi \fswiss\fcharset163\fprq2 MS Reference Sans Serif (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
 | 
			
		||||
{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
 | 
			
		||||
{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
 | 
			
		||||
{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
 | 
			
		||||
{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
 | 
			
		||||
{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
 | 
			
		||||
{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}
 | 
			
		||||
{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
 | 
			
		||||
{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
 | 
			
		||||
{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
 | 
			
		||||
{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
 | 
			
		||||
{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
 | 
			
		||||
{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
 | 
			
		||||
{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
 | 
			
		||||
{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
 | 
			
		||||
{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
 | 
			
		||||
{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}
 | 
			
		||||
{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
 | 
			
		||||
{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
 | 
			
		||||
{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;
 | 
			
		||||
\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;
 | 
			
		||||
\red192\green192\blue192;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{
 | 
			
		||||
\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1031\langfe1031\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 
 | 
			
		||||
\snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
 | 
			
		||||
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1
 | 
			
		||||
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1031\langfe1031\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 
 | 
			
		||||
\snext11 \ssemihidden \sunhideused \sqformat Normal Table;}}{\*\rsidtbl \rsid3942873\rsid5053873\rsid6912689\rsid7213193\rsid8068556\rsid9465848\rsid13463017}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1
 | 
			
		||||
\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator Alexander Gessler}{\creatim\yr2008\mo5\dy13\hr12\min5}{\revtim\yr2008\mo5\dy13\hr12\min20}{\version7}{\edmins0}{\nofpages4}{\nofwords1365}{\nofchars6975}{\nofcharsws8324}{\vern32893}}
 | 
			
		||||
{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1417\margr1417\margt1417\margb1134\gutter0\ltrsect 
 | 
			
		||||
\deftab708\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves1\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120
 | 
			
		||||
\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale91\viewzk1\rsidroot13463017 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang 
 | 
			
		||||
{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}
 | 
			
		||||
{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9
 | 
			
		||||
\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 
 | 
			
		||||
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \ab\af39\afs32 \ltrch\fcs0 \b\f39\fs32\lang1033\langfe1031\langnp1033\insrsid8068556 
 | 
			
		||||
\par \hich\af39\dbch\af31505\loch\f39 ASSIMP Viewer Utility 
 | 
			
		||||
\par }{\rtlch\fcs1 \ab\af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 Document version 1.0, April 2008
 | 
			
		||||
\par }{\rtlch\fcs1 \ab\af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 I.\tab 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Usage\hich\af39\dbch\af31505\loch\f39  
 | 
			
		||||
\par }\pard \ltrpar\qj \li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0\pararsid13463017 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
The ASSIMP Viewer Utility is a small and fast stand-alone viewer utility which is us\hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
ing the ASSIMP library to import assets from files. It consists of a single executable file and has no external dependencies. It displays assets with even highly complex materials and bone animations correctly.
 | 
			
		||||
\par \hich\af39\dbch\af31505\loch\f39 AssimpView allows you to modify the textures \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
and material properties sets of your models at runtime, easy and fast per Drag&Drop. Furthermore it can visualize normals, UV sets, bounding boxes ... It allows artists and engine }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid6912689 \hich\af39\dbch\af31505\loch\f39 programmers}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
 to work together with maximal efficiency and find the ideal mod\hich\af39\dbch\af31505\loch\f39 el format for your internal workflow.
 | 
			
		||||
\par }{\rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 System requirements}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 :
 | 
			
		||||
\par }\pard \ltrpar\qj \fi-360\li700\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin700\itap0\pararsid13463017 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 -\tab \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
A Direct3D 9.0c compliant video card with at least support for Shader Model 2.0.}{\rtlch\fcs1 \af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid8068556 
 | 
			
		||||
\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 -\tab \hich\af39\dbch\af31505\loch\f39 Shader Model 3.0 cards are recommended. Shader Model 2.0 cards always render the lighting in low-quality and hav
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 e some limitations concerning complex materials.}{\rtlch\fcs1 \af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid8068556 
 | 
			
		||||
\par }\pard \ltrpar\qj \fi-360\li700\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin700\itap0\pararsid8068556 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 -\tab \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
Windows 2000 or higher. AssimpView should also run on older versions, with DirectX 9 installed, but this has never been tested. If you're a proud owner of such a version and AssimpView works for you, let u\hich\af39\dbch\af31505\loch\f39 s know.}{
 | 
			
		||||
\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid8068556 
 | 
			
		||||
\par }\pard \ltrpar\ql \li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39  
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 II.\tab 
 | 
			
		||||
User interface
 | 
			
		||||
\par }\pard \ltrpar\ql \li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 The viewer\hich\f39 \rquote 
 | 
			
		||||
\loch\f39 s user interface mainly consists of three components: 
 | 
			
		||||
\par }\pard \ltrpar\ql \fi340\li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
The menu bar provides access to the viewer\hich\f39 \rquote \loch\f39 s basic options.
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 -\tab }{\rtlch\fcs1 \af39 \ltrch\fcs0 
 | 
			
		||||
\f39\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \loch\af39\dbch\af31505\hich\f39 \'93}{\rtlch\fcs1 \ab\ai\af39 \ltrch\fcs0 \b\i\f39\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Viewer}
 | 
			
		||||
{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39 : Items to load / unload assets, take screenshots and open the viewer\hich\f39 \rquote \loch\f39 
 | 
			
		||||
s options dialog.}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 
 | 
			
		||||
\par }\pard \ltrpar\qj \fi-360\li720\ri1206\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1206\lin720\itap0\pararsid13463017 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \tab }{\rtlch\fcs1 \af39\afs16 
 | 
			
		||||
\ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 * \hich\af39\dbch\af31505\loch\f39 "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Open Asset}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
": Displays the file system dialog where you can choose a new asset to load. Note that you can also Drag&Drop models onto the viewer panel.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Close Asset}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 ": Closes the current asset and releases all resources associated with it. No action if no\hich\af39\dbch\af31505\loch\f39  asset is loaded.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Screenshot}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
": Save a snapshot of the viewer to a file. The snapshot does only include the preview panel, the rest of the user interface is not visible. Saved screenshots have no watermarks. This is }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689 \hich\af39\dbch\af31505\loch\f39 Open Source}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39  Software!
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Reset View}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 ": Reset the viewing position and direction to the default settings. This is: Camera position at 0|0|0, looking at 0|0|1.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Memory consumption}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 ": Display a box with approximated memory statistics. Note that the total memory consumption needn'\hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
t be equal to the physical memory allocated to the process (as displayed by Windows }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689 \hich\af39\dbch\af31505\loch\f39 Task Manager}{\rtlch\fcs1 \af39\afs16 
 | 
			
		||||
\ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 ). The memory consumption does only refer to the memory required for the asset itself, not for the rest of the viewer.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Setup file associations}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 ": Associate al\hich\af39\dbch\af31505\loch\f39 l file formats which can be read by ASSIMP with the viewer. If you double }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689 \hich\af39\dbch\af31505\loch\f39 click}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
 on such a file in Windows Explorer, it will be automatically opened with AssimpView.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Recent files}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 ": Displays a popup menu with a list of recently opened assets. Simply cli\hich\af39\dbch\af31505\loch\f39 ck on one to reload it.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Clear history}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 ": Clear the file history
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Quit}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 ": What do you think?
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 - \tab }{\rtlch\fcs1 
 | 
			
		||||
\ai\af39 \ltrch\fcs0 \i\f39\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 "}{\rtlch\fcs1 \ab\ai\af39 \ltrch\fcs0 \b\i\f39\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Tools}{\rtlch\fcs1 \ai\af39 \ltrch\fcs0 \i\f39\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 "}{\rtlch\fcs1 \af39 \ltrch\fcs0 
 | 
			
		||||
\f39\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 : Additional utilities like stereo view, normal type.
 | 
			
		||||
\par }\pard \ltrpar\qj \fi-360\li720\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin720\itap0\pararsid3942873 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \tab }{\rtlch\fcs1 \af39\afs16 
 | 
			
		||||
\ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
Log window}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 ": Displays the output window of the logger. Warnings are displayed in orange/yel\hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
low, errors in red, debug messages in blue and status }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid7213193 \hich\af39\dbch\af31505\loch\f39 information}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid9465848 \hich\af39\dbch\af31505\loch\f39  messages}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39  in green.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Save log to file}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 ": Saves the contents of the log window to a file.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Clear log}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 " Clear the contents of the log window
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Original normals}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 ": Specifies that the original norma\hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
l set from the model file is used in the preview. Normally this is the best choice, as smoothing groups etc. are handled correctly, but there are many models out there which have invalid or corrupt normal sets. However, if a model has no normal set, ASSIM
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 P\hich\af39\dbch\af31505\loch\f39  computes a smooth normal set for it. "Original normals" is in this case equivalent to "Smooth normals"
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Smooth normals}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 ": Specifies that a smoothed, per-vertex, normal set is used in the preview window.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Hard normals}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 ": Specifies that a hard, per-face\hich\af39\dbch\af31505\loch\f39 , normal set is used
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Flip normals}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 ": Flip all normal vectors
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 -\tab }{\rtlch\fcs1 \af39 \ltrch\fcs0 
 | 
			
		||||
\f39\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \loch\af39\dbch\af31505\hich\f39 \'93}{\rtlch\fcs1 \ab\ai\af39 \ltrch\fcs0 \b\i\f39\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
Background}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39 : Set the background color or use a texture (}{\rtlch\fcs1 \af39 \ltrch\fcs0 
 | 
			
		||||
\f39\lang1033\langfe1031\langnp1033\insrsid9465848\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 cube maps}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
 are supported as skyboxes) as background image for the viewer.
 | 
			
		||||
\par }\pard \ltrpar\qj \fi-360\li720\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin720\itap0\pararsid3942873 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \tab }{\rtlch\fcs1 \af39\afs16 
 | 
			
		||||
\ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Set color}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 ": Displays a color picker where you can choose 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 a new background color for the viewer.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Load skybox}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 ": Opens a file system dialog where you can select a skybox as background image. Accepted file formats are: *.dds, *.hdr.
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Load texture}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 ": Opens a file system dialog where you can select a texture as \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
background image. If the format of the texture doesn't fit to the proportions of the preview window, the texture will be stretched. }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid3942873 
 | 
			
		||||
\par }\pard \ltrpar\qj \fi-12\li720\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin720\itap0\pararsid3942873 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Accepted file formats are: *.jpg;*.png;*.tif;*.tga;*.dds;*.hdr;*.ppm;*.bmp
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li720\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 - "}{\rtlch\fcs1 
 | 
			
		||||
\ab\af39\afs20 \ltrch\fcs0 \b\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 ?}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 ": }{
 | 
			
		||||
\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \b\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Help and feedback}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 
 | 
			
		||||
 | 
			
		||||
\par \tab }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Feedback}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 ": Opens a p\hich\af39\dbch\af31505\loch\f39 opup menu with two options:
 | 
			
		||||
\par }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \tab }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 * "}{
 | 
			
		||||
\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 Report bug}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 ": Report a bug in AssimpView or in Assimp
 | 
			
		||||
\par }\pard \ltrpar\qj \fi-360\li720\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin720\itap0\pararsid13463017 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556 \tab }{\rtlch\fcs1 \af39\afs16 
 | 
			
		||||
\ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Feature request}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 \hich\af39\dbch\af31505\loch\f39 ": Tell us what}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid9465848 \hich\af39\dbch\af31505\loch\f39  you'd like us to support. Any }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid13463017 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 exotic file formats? 
 | 
			
		||||
\par }\pard \ltrpar\qj \li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0\pararsid13463017 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 \hich\f39 
 | 
			
		||||
The side panel \'93}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 Statistics}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 
 | 
			
		||||
\loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  displays rendering statistics. The meanings of the fi\hich\af39\dbch\af31505\loch\f39 elds change if you change between normal and texture/material mode.
 | 
			
		||||
\par }\pard \ltrpar\qj \li340\ri1474\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1474\lin340\itap0\pararsid13463017 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
Normal view mode:
 | 
			
		||||
\par }\pard \ltrpar\qj \li340\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin340\itap0\pararsid5053873 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \tab }{\rtlch\fcs1 \af39\afs16 
 | 
			
		||||
\ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Verts}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 ": Number of unique vertices in the asset
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 Faces}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689 \hich\af39\dbch\af31505\loch\f39 ": Numb}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
er of faces (= triangles) in the asset
 | 
			
		||||
\par \tab \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 Nodes}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 ": Number of nodes in the scenegraph, including the root node
 | 
			
		||||
\par }\pard \ltrpar\qj \fi-368\li708\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin708\itap0\pararsid5053873 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \tab 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 Mats:}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 " Number of different materials found in the mesh. Most loaders \tab remove unreferenced materials.
 | 
			
		||||
\par }\pard \ltrpar\qj \li700\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin700\itap0\pararsid5053873 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 Mesh}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 ": Number of }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 sub meshes}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 . Each mesh has only one material \tab assigned, so thi
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 s number is in most cases equal to or higher than the \tab number of materials.
 | 
			
		||||
\par \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 Shd}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 ": Number of unique shaders created}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39  for this asset. If AssimpView }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
detects that two materials can be rendered using }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 \hich\af39\dbch\af31505\loch\f39 the same }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689 \hich\af39\dbch\af31505\loch\f39 Shader}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 \hich\af39\dbch\af31505\loch\f39  code, 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 but \hich\af39\dbch\af31505\loch\f39 with }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 different}{\rtlch\fcs1 \af39\afs16 
 | 
			
		||||
\ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39  }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 parameterizations}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 , it do}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 \hich\af39\dbch\af31505\loch\f39 esn't create the }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689 \hich\af39\dbch\af31505\loch\f39 Shader}{\rtlch\fcs1 
 | 
			
		||||
\af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 \hich\af39\dbch\af31505\loch\f39  twice. }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Most engines do so, too. 
 | 
			
		||||
\par \hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 Time}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 ": Time required for loading, in seco}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 nds. This time is the raw time }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 the process spent in Assimp loading the mod}{
 | 
			
		||||
\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 \hich\af39\dbch\af31505\loch\f39 el itself, it does not include }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 texture loading, }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid6912689\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Shader}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39  compilation ...
 | 
			
		||||
\par }\pard \ltrpar\qj \li700\ri1208\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin1208\lin700\itap0\pararsid9465848 {\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 * "}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \b\i\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 FPS}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 ": Current frame rate, in frames per se}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 cond. Note that this number }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid13463017\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 is }{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 
 | 
			
		||||
\f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid5053873 \hich\af39\dbch\af31505\loch\f39 not really exact.}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid5053873 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
 It is only an approximation to the real frame rate. The maximum frame rate \hich\af39\dbch\af31505\loch\f39 will\hich\af39\dbch\af31505\loch\f39  \hich\af39\dbch\af31505\loch\f39 never be reached since there is a 10 ms blocker included (
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 to work around good old AMD timing bug\hich\af39\dbch\af31505\loch\f39 )}{\rtlch\fcs1 \af39\afs16 \ltrch\fcs0 \f39\fs16\lang1033\langfe1031\langnp1033\insrsid8068556\charrsid9465848 
 | 
			
		||||
\par }\pard \ltrpar\ql \li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 \hich\f39 The \'93}{
 | 
			
		||||
\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 Rendering}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 
 | 
			
		||||
\loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  panel provides rendering-related options, such as wireframe/normal visualization.}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid9465848 
 | 
			
		||||
\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 \hich\f39  \'93}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39 Interaction}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  bundles all input related options.
 | 
			
		||||
\par \hich\af39\dbch\af31505\loch\f39 The main \hich\af39\dbch\af31505\loch\f39 component is the large viewer panel where the assets are displayed. Status messages (e.g. if a texture could not be loaded)}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid9465848 \hich\af39\dbch\af31505\loch\f39  \hich\af39\dbch\af31505\loch\f39 are displayed in the upper-right}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39  edge.}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid9465848 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
 Yellow messages are simple information messages, red messages are error messages. Green messages\hich\af39\dbch\af31505\loch\f39 , however, are coming from heart ;-)}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 
 | 
			
		||||
\par }{\rtlch\fcs1 \af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid8068556 
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 III.\tab Input
 | 
			
		||||
\par }\pard \ltrpar\ql \li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 \hich\f39 
 | 
			
		||||
The input mode depends on the selected input behavior. If \'84}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 Zoom/Rotate}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  is }{\rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 NOT}{
 | 
			
		||||
\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39  selected the following scheme applies:
 | 
			
		||||
\par }\pard \ltrpar\ql \fi368\li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \loch\af39\dbch\af31505\hich\f39 \lquote }{\rtlch\fcs1 
 | 
			
		||||
\ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 Arrow up}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \loch\af39\dbch\af31505\hich\f39 
 | 
			
		||||
\rquote \loch\f39  \tab = Move forwards
 | 
			
		||||
\par \loch\af39\dbch\af31505\hich\f39 \lquote }{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 Arrow left\hich\f39 \rquote }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39  \tab = Move to the left
 | 
			
		||||
\par \loch\af39\dbch\af31505\hich\f39 \lquote }{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 Arrow down}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \loch\af39\dbch\af31505\hich\f39 \rquote \loch\f39  \tab = Move backwards
 | 
			
		||||
\par \loch\af39\dbch\af31505\hich\f39 \lquote }{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 Arrow right}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \loch\af39\dbch\af31505\hich\f39 \rquote \loch\f39  \tab = Move to the right
 | 
			
		||||
\par }\pard \ltrpar\ql \fi340\li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
The mouse specifies the view direction. This is the typical FPS input behavior.
 | 
			
		||||
\par }{\rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 Otherwise\hich\af39\dbch\af31505\loch\f39 \hich\f39 , if \'84}{\rtlch\fcs1 \ab\ai\af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\b\i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 Zoom/Rotate}{\rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39 
 | 
			
		||||
 is enabled:
 | 
			
		||||
\par }\pard \ltrpar\ql \li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \loch\af39\dbch\af31505\hich\f39 \'93}{\rtlch\fcs1 
 | 
			
		||||
\ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 Left Mouse Button}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 
 | 
			
		||||
\loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  = Keep pressed and move the mouse to rotate the asset around its local axes. Inside the yellow circle: x/y-axis, outside: Z-axis. To rotate around one axis only use the axis snap-ins (yellow squares with a
 | 
			
		||||
\hich\af39\dbch\af31505\loch\f39  cross inside).
 | 
			
		||||
\par \loch\af39\dbch\af31505\hich\f39 \'93}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 Right Mouse Button}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  = Keep pressed and move the mouse to rotate the light source(s) around their x and y axes.
 | 
			
		||||
\par \loch\af39\dbch\af31505\hich\f39 \'93}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 Middle Mouse Button}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  = Keep pressed and move the mouse from the left to the right or the other way round to increase/decrease t\hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
he intensity of the light source(s)
 | 
			
		||||
\par \loch\af39\dbch\af31505\hich\f39 \'93}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 Right }{\rtlch\fcs1 \ab\ai\af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\b\i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 AND}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39  Left Mouse Button}{
 | 
			
		||||
\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  = Keep pressed and move the mouse to rotate skybox (if existing) around the global x/y axes.
 | 
			
		||||
\par \loch\af39\dbch\af31505\hich\f39 \'93}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 Mouse wheel}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 
 | 
			
		||||
\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39  = Zoom in/out
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 IV.\tab }{\rtlch\fcs1 
 | 
			
		||||
\af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 Rendering
 | 
			
		||||
\par }\pard \ltrpar\ql \li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
Enabling MultiSampling improves rendering\hich\af39\dbch\af31505\loch\f39  quality. MultiSampling is activated by default. The highest quality MultiSampling mode supported by the video card is used.
 | 
			
		||||
\par \hich\af39\dbch\af31505\loch\f39 MultiSampling is especially useful to remove line artifacts in wireframe/normals mode. Note that the transition between normal and \hich\af39\dbch\af31505\loch\f39 multisampled rendering may take a few seconds.
 | 
			
		||||
\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 Rendering is done via Direct3D\'99\loch\f39 \hich\f39  9.0c. Note that the \'93}{\rtlch\fcs1 \ai\af39\afs20 \ltrch\fcs0 \i\f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
Low-quality lighting}{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \loch\af39\dbch\af31505\hich\f39 \'94\loch\f39 -Option is not available for PS 2.0 cards. Lighting on PS 2.0 cards is always low quality.
 | 
			
		||||
 | 
			
		||||
\par 
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li340\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin340\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 V.\tab }{\rtlch\fcs1 
 | 
			
		||||
\af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid8068556 \hich\af39\dbch\af31505\loch\f39 Known issues 
 | 
			
		||||
\par }\pard \ltrpar\ql \fi-360\li700\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin700\itap0 {\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 -\tab \hich\af39\dbch\af31505\loch\f39 
 | 
			
		||||
If a loading process is \hich\af39\dbch\af31505\loch\f39 canceled it is not guaranteed that further loading processes will succeed. ASSIMP Viewer might even crash in this case. }{\rtlch\fcs1 \af39\afs24 \ltrch\fcs0 
 | 
			
		||||
\f39\fs24\lang1033\langfe1031\langnp1033\insrsid8068556 
 | 
			
		||||
\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 -\tab \hich\af39\dbch\af31505\loch\f39 Some very complex materials involving real time reflection/refraction are not displayed properly.}{\rtlch\fcs1 
 | 
			
		||||
\af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid8068556 
 | 
			
		||||
\par }{\rtlch\fcs1 \af39\afs20 \ltrch\fcs0 \f39\fs20\lang1033\langfe1031\langnp1033\insrsid8068556 -\tab \hich\af39\dbch\af31505\loch\f39 When rendering non-opaque objects\hich\af39\dbch\af31505\loch\f39  some triangle artifacts might occur.}{\rtlch\fcs1 
 | 
			
		||||
\af39\afs24 \ltrch\fcs0 \f39\fs24\lang1033\langfe1031\langnp1033\insrsid8068556 
 | 
			
		||||
\par }{\*\themedata 504b030414000600080000002100828abc13fa0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb6ac3301045f785fe83d0b6d8
 | 
			
		||||
72ba28a5d8cea249777d2cd20f18e4b12d6a8f843409c9df77ecb850ba082d74231062ce997b55ae8fe3a00e1893f354e9555e6885647de3a8abf4fbee29bbd7
 | 
			
		||||
2a3150038327acf409935ed7d757e5ee14302999a654e99e393c18936c8f23a4dc072479697d1c81e51a3b13c07e4087e6b628ee8cf5c4489cf1c4d075f92a0b
 | 
			
		||||
44d7a07a83c82f308ac7b0a0f0fbf90c2480980b58abc733615aa2d210c2e02cb04430076a7ee833dfb6ce62e3ed7e14693e8317d8cd0433bf5c60f53fea2fe7
 | 
			
		||||
065bd80facb647e9e25c7fc421fd2ddb526b2e9373fed4bb902e182e97b7b461e6bfad3f010000ffff0300504b030414000600080000002100a5d6a7e7c00000
 | 
			
		||||
00360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4fc7060abb08
 | 
			
		||||
84a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b63095120f88d94fbc
 | 
			
		||||
52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462a1a82fe353
 | 
			
		||||
bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f7468656d652f7468
 | 
			
		||||
656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b4b0d592c9c
 | 
			
		||||
070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b4757e8d3f7
 | 
			
		||||
29e245eb2b260a0238fd010000ffff0300504b03041400060008000000210096b5ade296060000501b0000160000007468656d652f7468656d652f7468656d65
 | 
			
		||||
312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87615b8116d8
 | 
			
		||||
a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad79482a9c04
 | 
			
		||||
98f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b5d8a314d3c
 | 
			
		||||
94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab999fb7b471
 | 
			
		||||
7509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9699640f671
 | 
			
		||||
9e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd5868b37a088d1
 | 
			
		||||
e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d60cf03ac1a5
 | 
			
		||||
193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f9e7ef3f2d1
 | 
			
		||||
17d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be15c308d3f2
 | 
			
		||||
8acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a99793849c26ae6
 | 
			
		||||
6252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d32a423279a
 | 
			
		||||
668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2af074481847
 | 
			
		||||
bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86e877f0034e
 | 
			
		||||
16bafb0e258ebb4faf06b769e888340b103d3311da9750aa9d0a1cd3e4efca31a3508f6d0c5c5c398602f8e2ebc71591f5b616e24dd893aa3261fb44f95d843b
 | 
			
		||||
5974bb5c04f4edafb95b7892ec1108f3f98de75dc97d5772bdff7cc95d94cf672db4b3da0a6557f70db629362d72bcb0431e53c6066acac80d699a6409fb44d0
 | 
			
		||||
8741bdce9c0e4971624a2378cceaba830b05366b90e0ea23aaa241845368b0eb9e2612ca8c742851ca251ceccc70256d8d87265dd96361531f186c3d9058edf2
 | 
			
		||||
c00eafe8e1fc5c509031bb4d680e9f39a3154de0accc56ae644441edd76156d7429d995bdd88664a9dc3ad50197c38af1a0c16d684060441db02565e85f3b966
 | 
			
		||||
0d0713cc48a0ed6ef7dedc2dc60b17e92219e180643ed27acffba86e9c94c78ab90980d8a9f0913ee49d62b512b79626fb06dccee2a432bbc60276b9f7dec44b
 | 
			
		||||
7904cfbca4f3f6443ab2a49c9c2c41476dafd55c6e7ac8c769db1bc399161ee314bc2e75cf8759081743be1236ec4f4d6693e5336fb672c5dc24a8c33585b5fb
 | 
			
		||||
9cc24e1d4885545b58463634cc5416022cd19cacfccb4d30eb45296023fd35a458598360f8d7a4003bbaae25e331f155d9d9a5116d3bfb9a95523e51440ca2e0
 | 
			
		||||
088dd844ec6370bf0e55d027a012ae264c45d02f708fa6ad6da6dce29c255df9f6cae0ec38666984b372ab5334cf640b37795cc860de4ae2816e95b21be5ceaf
 | 
			
		||||
8a49f90b52a51cc6ff3355f47e0237052b81f6800fd7b802239daf6d8f0b1571a8426944fdbe80c6c1d40e8816b88b8569082ab84c36ff0539d4ff6dce591a26
 | 
			
		||||
ade1c0a7f669880485fd484582903d284b26fa4e2156cff62e4b9265844c4495c495a9157b440e091bea1ab8aaf7760f4510eaa69a6465c0e04ec69ffb9e65d0
 | 
			
		||||
28d44d4e39df9c1a52ecbd3607fee9cec7263328e5d661d3d0e4f62f44acd855ed7ab33cdf7bcb8ae889599bd5c8b3029895b6825696f6af29c239b75a5bb1e6
 | 
			
		||||
345e6ee6c28117e73586c1a2214ae1be07e93fb0ff51e133fb65426fa843be0fb515c187064d0cc206a2fa926d3c902e907670048d931db4c1a44959d366ad93
 | 
			
		||||
b65abe595f70a75bf03d616c2dd959fc7d4e6317cd99cbcec9c58b34766661c7d6766ca1a9c1b327531486c6f941c638c67cd22a7f75e2a37be0e82db8df9f30
 | 
			
		||||
254d30c1372581a1f51c983c80e4b71ccdd28dbf000000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f74
 | 
			
		||||
68656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f24
 | 
			
		||||
51eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198
 | 
			
		||||
720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528
 | 
			
		||||
a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100828abc13fa0000001c0200001300000000000000000000000000
 | 
			
		||||
000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b000000000000000000000000
 | 
			
		||||
002b0100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000140200007468
 | 
			
		||||
656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210096b5ade296060000501b000016000000000000000000
 | 
			
		||||
00000000d10200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b010000270000000000
 | 
			
		||||
00000000000000009b0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000960a00000000}
 | 
			
		||||
{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
 | 
			
		||||
617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
 | 
			
		||||
6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
 | 
			
		||||
656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
 | 
			
		||||
{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;
 | 
			
		||||
\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;
 | 
			
		||||
\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7;
 | 
			
		||||
\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;
 | 
			
		||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000
 | 
			
		||||
4d73786d6c322e534158584d4c5265616465722e352e3000000000000000000000060000
 | 
			
		||||
d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 | 
			
		||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 | 
			
		||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 | 
			
		||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 | 
			
		||||
fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 | 
			
		||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 | 
			
		||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 | 
			
		||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
 | 
			
		||||
ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffffec69d9888b8b3d4c859eaf6cd158be0f0000000000000000000000004091
 | 
			
		||||
1ff3e2b4c801feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
 | 
			
		||||
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
 | 
			
		||||
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
 | 
			
		||||
0000000000000000000000000000000000000000000000000105000000000000}} | ||||