summaryrefslogtreecommitdiff
path: root/libs/assimp/code/AssetLib/COB/COBScene.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/assimp/code/AssetLib/COB/COBScene.h')
-rw-r--r--libs/assimp/code/AssetLib/COB/COBScene.h276
1 files changed, 276 insertions, 0 deletions
diff --git a/libs/assimp/code/AssetLib/COB/COBScene.h b/libs/assimp/code/AssetLib/COB/COBScene.h
new file mode 100644
index 0000000..57620ca
--- /dev/null
+++ b/libs/assimp/code/AssetLib/COB/COBScene.h
@@ -0,0 +1,276 @@
+/*
+Open Asset Import Library (assimp)
+----------------------------------------------------------------------
+
+Copyright (c) 2006-2022, 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 COBScene.h
+* @brief Utilities for the COB importer.
+*/
+#pragma once
+#ifndef INCLUDED_AI_COB_SCENE_H
+#define INCLUDED_AI_COB_SCENE_H
+
+#include <assimp/BaseImporter.h>
+#include <assimp/material.h>
+
+#include <deque>
+#include <map>
+
+namespace Assimp {
+namespace COB {
+
+// ------------------
+/** Represents a single vertex index in a face */
+struct VertexIndex
+{
+ // intentionally uninitialized
+ unsigned int pos_idx,uv_idx;
+};
+
+// ------------------
+/** COB Face data structure */
+struct Face
+{
+ // intentionally uninitialized
+ unsigned int material, flags;
+ std::vector<VertexIndex> indices;
+};
+
+// ------------------
+/** COB chunk header information */
+const unsigned int NO_SIZE = UINT_MAX;
+
+struct ChunkInfo
+{
+ ChunkInfo ()
+ : id (0)
+ , parent_id (0)
+ , version (0)
+ , size (NO_SIZE)
+ {}
+
+ // Id of this chunk, unique within file
+ unsigned int id;
+
+ // and the corresponding parent
+ unsigned int parent_id;
+
+ // version. v1.23 becomes 123
+ unsigned int version;
+
+ // chunk size in bytes, only relevant for binary files
+ // NO_SIZE is also valid.
+ unsigned int size;
+};
+
+// ------------------
+/** A node in the scenegraph */
+struct Node : public ChunkInfo
+{
+ enum Type {
+ TYPE_MESH,TYPE_GROUP,TYPE_LIGHT,TYPE_CAMERA,TYPE_BONE
+ };
+
+ virtual ~Node() {}
+ Node(Type type) : type(type), unit_scale(1.f){}
+
+ Type type;
+
+ // used during resolving
+ typedef std::deque<const Node*> ChildList;
+ mutable ChildList temp_children;
+
+ // unique name
+ std::string name;
+
+ // local mesh transformation
+ aiMatrix4x4 transform;
+
+ // scaling for this node to get to the metric system
+ float unit_scale;
+};
+
+// ------------------
+/** COB Mesh data structure */
+struct Mesh : public Node
+{
+ using ChunkInfo::operator=;
+ enum DrawFlags {
+ SOLID = 0x1,
+ TRANS = 0x2,
+ WIRED = 0x4,
+ BBOX = 0x8,
+ HIDE = 0x10
+ };
+
+ Mesh()
+ : Node(TYPE_MESH)
+ , draw_flags(SOLID)
+ {}
+
+ // vertex elements
+ std::vector<aiVector2D> texture_coords;
+ std::vector<aiVector3D> vertex_positions;
+
+ // face data
+ std::vector<Face> faces;
+
+ // misc. drawing flags
+ unsigned int draw_flags;
+
+ // used during resolving
+ typedef std::deque<Face*> FaceRefList;
+ typedef std::map< unsigned int,FaceRefList > TempMap;
+ TempMap temp_map;
+};
+
+// ------------------
+/** COB Group data structure */
+struct Group : public Node
+{
+ using ChunkInfo::operator=;
+ Group() : Node(TYPE_GROUP) {}
+};
+
+// ------------------
+/** COB Bone data structure */
+struct Bone : public Node
+{
+ using ChunkInfo::operator=;
+ Bone() : Node(TYPE_BONE) {}
+};
+
+// ------------------
+/** COB Light data structure */
+struct Light : public Node
+{
+ enum LightType {
+ SPOT,LOCAL,INFINITE
+ };
+
+ using ChunkInfo::operator=;
+ Light() : Node(TYPE_LIGHT),angle(),inner_angle(),ltype(SPOT) {}
+
+ aiColor3D color;
+ float angle,inner_angle;
+
+ LightType ltype;
+};
+
+// ------------------
+/** COB Camera data structure */
+struct Camera : public Node
+{
+ using ChunkInfo::operator=;
+ Camera() : Node(TYPE_CAMERA) {}
+};
+
+// ------------------
+/** COB Texture data structure */
+struct Texture
+{
+ std::string path;
+ aiUVTransform transform;
+};
+
+// ------------------
+/** COB Material data structure */
+struct Material : ChunkInfo
+{
+ using ChunkInfo::operator=;
+ enum Shader {
+ FLAT,PHONG,METAL
+ };
+
+ enum AutoFacet {
+ FACETED,AUTOFACETED,SMOOTH
+ };
+
+ Material() : alpha(),exp(),ior(),ka(),ks(1.f),
+ matnum(UINT_MAX),
+ shader(FLAT),autofacet(FACETED),
+ autofacet_angle()
+ {}
+
+ std::string type;
+
+ aiColor3D rgb;
+ float alpha, exp, ior,ka,ks;
+
+ unsigned int matnum;
+ Shader shader;
+
+ AutoFacet autofacet;
+ float autofacet_angle;
+
+ std::shared_ptr<Texture> tex_env,tex_bump,tex_color;
+};
+
+// ------------------
+/** Embedded bitmap, for instance for the thumbnail image */
+struct Bitmap : ChunkInfo
+{
+ Bitmap() : orig_size() {}
+ struct BitmapHeader
+ {
+ };
+
+ BitmapHeader head;
+ size_t orig_size;
+ std::vector<char> buff_zipped;
+};
+
+typedef std::deque< std::shared_ptr<Node> > NodeList;
+typedef std::vector< Material > MaterialList;
+
+// ------------------
+/** Represents a master COB scene, even if we loaded just a single COB file */
+struct Scene
+{
+ NodeList nodes;
+ MaterialList materials;
+
+ // becomes *0 later
+ Bitmap thumbnail;
+};
+
+ } // end COB
+} // end Assimp
+
+#endif