From d91eebf347b370336e4212ae9921ae25694f0172 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 10 Sep 2019 22:13:54 +0200 Subject: [PATCH] Add ortho camera. --- code/glTF/glTFAssetWriter.inl | 6 ++- code/glTF/glTFImporter.cpp | 80 +++++++++++++++++------------------ include/assimp/camera.h | 2 - 3 files changed, 42 insertions(+), 46 deletions(-) diff --git a/code/glTF/glTFAssetWriter.inl b/code/glTF/glTFAssetWriter.inl index 20afb24e7..0aaeca993 100644 --- a/code/glTF/glTFAssetWriter.inl +++ b/code/glTF/glTFAssetWriter.inl @@ -55,7 +55,8 @@ namespace glTF { namespace { template - inline Value& MakeValue(Value& val, float(&r)[N], MemoryPoolAllocator<>& al) { + inline + Value& MakeValue(Value& val, float(&r)[N], MemoryPoolAllocator<>& al) { val.SetArray(); val.Reserve(N, al); for (decltype(N) i = 0; i < N; ++i) { @@ -64,7 +65,8 @@ namespace glTF { return val; } - inline Value& MakeValue(Value& val, const std::vector & r, MemoryPoolAllocator<>& al) { + inline + Value& MakeValue(Value& val, const std::vector & r, MemoryPoolAllocator<>& al) { val.SetArray(); val.Reserve(static_cast(r.size()), al); for (unsigned int i = 0; i < r.size(); ++i) { diff --git a/code/glTF/glTFImporter.cpp b/code/glTF/glTFImporter.cpp index 146d7453e..edcc30636 100644 --- a/code/glTF/glTFImporter.cpp +++ b/code/glTF/glTFImporter.cpp @@ -82,7 +82,7 @@ glTFImporter::glTFImporter() : BaseImporter() , meshOffsets() , embeddedTexIdxs() -, mScene( NULL ) { +, mScene( nullptr ) { // empty } @@ -90,17 +90,16 @@ glTFImporter::~glTFImporter() { // empty } -const aiImporterDesc* glTFImporter::GetInfo() const -{ +const aiImporterDesc* glTFImporter::GetInfo() const { return &desc; } -bool glTFImporter::CanRead(const std::string& pFile, IOSystem* pIOHandler, bool /* checkSig */) const -{ +bool glTFImporter::CanRead(const std::string& pFile, IOSystem* pIOHandler, bool /* checkSig */) const { const std::string &extension = GetExtension(pFile); - if (extension != "gltf" && extension != "glb") + if (extension != "gltf" && extension != "glb") { return false; + } if (pIOHandler) { glTF::Asset asset(pIOHandler); @@ -116,44 +115,42 @@ bool glTFImporter::CanRead(const std::string& pFile, IOSystem* pIOHandler, bool return false; } - - -//static void CopyValue(const glTF::vec3& v, aiColor3D& out) -//{ -// out.r = v[0]; out.g = v[1]; out.b = v[2]; -//} - -static void CopyValue(const glTF::vec4& v, aiColor4D& out) -{ - out.r = v[0]; out.g = v[1]; out.b = v[2]; out.a = v[3]; +static void CopyValue(const glTF::vec4& v, aiColor4D& out) { + out.r = v[0]; + out.g = v[1]; + out.b = v[2]; + out.a = v[3]; } -static void CopyValue(const glTF::vec4& v, aiColor3D& out) -{ - out.r = v[0]; out.g = v[1]; out.b = v[2]; +static void CopyValue(const glTF::vec4& v, aiColor3D& out) { + out.r = v[0]; + out.g = v[1]; + out.b = v[2]; } -static void CopyValue(const glTF::vec3& v, aiVector3D& out) -{ - out.x = v[0]; out.y = v[1]; out.z = v[2]; +static void CopyValue(const glTF::vec3& v, aiVector3D& out) { + out.x = v[0]; + out.y = v[1]; + out.z = v[2]; } -static void CopyValue(const glTF::vec4& v, aiQuaternion& out) -{ - out.x = v[0]; out.y = v[1]; out.z = v[2]; out.w = v[3]; +static void CopyValue(const glTF::vec4& v, aiQuaternion& out) { + out.x = v[0]; + out.y = v[1]; + out.z = v[2]; + out.w = v[3]; } -static void CopyValue(const glTF::mat4& v, aiMatrix4x4& o) -{ +static void CopyValue(const glTF::mat4& v, aiMatrix4x4& o) { o.a1 = v[ 0]; o.b1 = v[ 1]; o.c1 = v[ 2]; o.d1 = v[ 3]; o.a2 = v[ 4]; o.b2 = v[ 5]; o.c2 = v[ 6]; o.d2 = v[ 7]; o.a3 = v[ 8]; o.b3 = v[ 9]; o.c3 = v[10]; o.d3 = v[11]; o.a4 = v[12]; o.b4 = v[13]; o.c4 = v[14]; o.d4 = v[15]; } -inline void SetMaterialColorProperty(std::vector& embeddedTexIdxs, Asset& /*r*/, glTF::TexProperty prop, aiMaterial* mat, - aiTextureType texType, const char* pKey, unsigned int type, unsigned int idx) -{ +inline +void SetMaterialColorProperty(std::vector& embeddedTexIdxs, Asset& /*r*/, glTF::TexProperty prop, aiMaterial* mat, + aiTextureType texType, const char* pKey, unsigned int type, unsigned int idx) { if (prop.texture) { if (prop.texture->source) { aiString uri(prop.texture->source->uri); @@ -167,16 +164,14 @@ inline void SetMaterialColorProperty(std::vector& embeddedTexIdxs, Asset& / mat->AddProperty(&uri, _AI_MATKEY_TEXTURE_BASE, texType, 0); } - } - else { + } else { aiColor4D col; CopyValue(prop.color, col); mat->AddProperty(&col, 1, pKey, type, idx); } } -void glTFImporter::ImportMaterials(glTF::Asset& r) -{ +void glTFImporter::ImportMaterials(glTF::Asset& r) { mScene->mNumMaterials = unsigned(r.materials.Size()); mScene->mMaterials = new aiMaterial*[mScene->mNumMaterials]; @@ -499,27 +494,28 @@ void glTFImporter::ImportMeshes(glTF::Asset& r) CopyVector(meshes, mScene->mMeshes, mScene->mNumMeshes); } -void glTFImporter::ImportCameras(glTF::Asset& r) -{ - if (!r.cameras.Size()) return; +void glTFImporter::ImportCameras(glTF::Asset& r) { + if (!r.cameras.Size()) { + return; + } mScene->mNumCameras = r.cameras.Size(); mScene->mCameras = new aiCamera*[r.cameras.Size()]; - for (size_t i = 0; i < r.cameras.Size(); ++i) { Camera& cam = r.cameras[i]; aiCamera* aicam = mScene->mCameras[i] = new aiCamera(); if (cam.type == Camera::Perspective) { - aicam->mAspect = cam.perspective.aspectRatio; aicam->mHorizontalFOV = cam.perspective.yfov * aicam->mAspect; aicam->mClipPlaneFar = cam.perspective.zfar; aicam->mClipPlaneNear = cam.perspective.znear; - } - else { - // assimp does not support orthographic cameras + } else { + aicam->mClipPlaneFar = cam.ortographic.zfar; + aicam->mClipPlaneNear = cam.ortographic.znear; + aicam->mHorizontalFOV = 0.0; + aicam->mAspect = cam.ortographic.xmag / cam.ortographic.ymag; } } } diff --git a/include/assimp/camera.h b/include/assimp/camera.h index e573eea5d..a9a9f7653 100644 --- a/include/assimp/camera.h +++ b/include/assimp/camera.h @@ -113,7 +113,6 @@ struct aiCamera */ C_STRUCT aiVector3D mPosition; - /** 'Up' - vector of the camera coordinate system relative to * the coordinate space defined by the corresponding node. * @@ -134,7 +133,6 @@ struct aiCamera */ C_STRUCT aiVector3D mLookAt; - /** Half horizontal field of view angle, in radians. * * The field of view angle is the angle between the center