irrlicht/source/Irrlicht/CMY3DMeshFileLoader.h

115 lines
3.3 KiB
C++

// Copyright (C) 2002-2007 Nikolaus Gebhardt
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
//
// This file was originally written by ZDimitor.
// I (Nikolaus Gebhardt) did some few changes to this:
// - replaced logging calls to their os:: counterparts
// - removed some logging calls
// - enabled image dropping of CImage again, because that bug has been fixed now
// - removed setTexture path and replaced it with the directory of the mesh
// - added EAMT_MY3D file type
// - fixed a memory leak when decompressing RLE data.
// - cleaned multi character constant problems with gcc
// - removed octree child scene node generation because irrlicht is now able to draw
// scene nodes with transparent and sold materials in them at the same time. (see changes.txt)
// Thanks a lot to ZDimitor for his work on this and that he gave me
// his permission to add it into Irrlicht.
//--------------------------------------------------------------------------------
// This tool created by ZDimitor everyone can use it as wants
//--------------------------------------------------------------------------------
#ifndef __CMY3D_MESH_FILE_LOADER_H_INCLUDED__
#define __CMY3D_MESH_FILE_LOADER_H_INCLUDED__
#ifdef _MSC_VER
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#endif
#include "IMeshLoader.h"
#include "SMesh.h"
#include "SMeshBufferLightMap.h"
#include "IFileSystem.h"
#include "IVideoDriver.h"
#include "irrString.h"
#include "ISceneManager.h"
#include "CMY3DStuff.h"
namespace irr
{
namespace scene
{
class CMY3DMeshFileLoader : public IMeshLoader
{
public:
CMY3DMeshFileLoader(
io::IFileSystem* fs, video::IVideoDriver* driver, ISceneManager *scmgr);
virtual ~CMY3DMeshFileLoader();
virtual bool isALoadableFileExtension(const c8* fileName);
virtual IAnimatedMesh* createMesh(io::IReadFile* file);
//! getting access to the nodes (with transparent material), creating
//! while loading .my3d file
core::array<ISceneNode*>& getChildNodes();
private:
scene::SMesh* Mesh;
video::IVideoDriver* Driver;
io::IFileSystem* FileSystem;
ISceneManager *SceneManager;
video::SColor SceneBackgrColor;
video::SColor SceneAmbientColor;
struct SMyMaterialEntry
{
SMyMaterialEntry ()
: Texture1FileName("null"), Texture2FileName("null"),
Texture1(0), Texture2(0), MaterialType(video::EMT_SOLID) {}
SMyMaterialHeader Header;
core::stringc Texture1FileName;
core::stringc Texture2FileName;
video::ITexture *Texture1;
video::ITexture *Texture2;
video::E_MATERIAL_TYPE MaterialType;
};
struct SMyMeshBufferEntry
{
SMyMeshBufferEntry() : MaterialIndex(-1), MeshBuffer(0) {}
SMyMeshBufferEntry(s32 mi, SMeshBufferLightMap* mb)
: MaterialIndex(mi), MeshBuffer(mb) {}
s32 MaterialIndex;
SMeshBufferLightMap* MeshBuffer;
};
SMyMaterialEntry* getMaterialEntryByIndex (u32 matInd);
SMeshBufferLightMap* getMeshBufferByMaterialIndex(u32 matInd);
core::array<SMyMaterialEntry> MaterialEntry;
core::array<SMyMeshBufferEntry> MeshBufferEntry;
core::array<ISceneNode*> ChildNodes;
};
} // end namespace scene
} // end namespace irr
#endif // __CMY3D_MESH_FILE_LOADER_H_INCLUDED__