Commit e6c197fa authored by cutealien's avatar cutealien

Add b3d mesh-writer.

- Interface getMeshType moved from IAnimatedMesh up to IMesh.
- Static b3d mesh-writer written by Hendu, support for animated meshes added by JLouisB, testing and bugfixes by CuteAlien.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@5095 dfc29bdd-3216-0410-991c-e03cc46cb475
parent c6eec21c
-------------------------- --------------------------
Changes in 1.9 (not yet released) Changes in 1.9 (not yet released)
- Interface getMeshType moved from IAnimatedMesh up to IMesh.
- Add b3d mesh-writer. Static writer written by Hendu, support for animated meshes added by JLouisB, testing and bugfixes by CuteAlien.
- Node-collision functions of SceneCollisionManager like getSceneNodeFromScreenCoordinatesBB will now ignore collisions against empty boundingboxes. - Node-collision functions of SceneCollisionManager like getSceneNodeFromScreenCoordinatesBB will now ignore collisions against empty boundingboxes.
- Cameras return again an empty boundingbox (at 0,0,0) instead of returning the frustum boundingbox (was changed in very old Irrlicht version). - Cameras return again an empty boundingbox (at 0,0,0) instead of returning the frustum boundingbox (was changed in very old Irrlicht version).
You can access the frustum boundingbox through the frustum itself. You can access the frustum boundingbox through the frustum itself.
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<Project filename="01.HelloWorld/HelloWorld.cbp" /> <Project filename="01.HelloWorld/HelloWorld.cbp" />
<Project filename="02.Quake3Map/Quake3Map.cbp" /> <Project filename="02.Quake3Map/Quake3Map.cbp" />
<Project filename="03.CustomSceneNode/CustomSceneNode.cbp" /> <Project filename="03.CustomSceneNode/CustomSceneNode.cbp" />
<Project filename="04.Movement/Movement.cbp" /> <Project filename="04.Movement/Movement.cbp" active="1" />
<Project filename="05.UserInterface/UserInterface.cbp" /> <Project filename="05.UserInterface/UserInterface.cbp" />
<Project filename="06.2DGraphics/2DGraphics.cbp" /> <Project filename="06.2DGraphics/2DGraphics.cbp" />
<Project filename="07.Collision/Collision.cbp" /> <Project filename="07.Collision/Collision.cbp" />
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
<Project filename="24.CursorControl/CursorControl.cbp" /> <Project filename="24.CursorControl/CursorControl.cbp" />
<Project filename="25.XmlHandling/XmlHandling.cbp" /> <Project filename="25.XmlHandling/XmlHandling.cbp" />
<Project filename="26.OcclusionQuery/OcclusionQuery.cbp" /> <Project filename="26.OcclusionQuery/OcclusionQuery.cbp" />
<Project filename="30.Profiling/Profiling.cbp" active="1" /> <Project filename="30.Profiling/Profiling.cbp" />
<Project filename="Demo/demo.cbp" /> <Project filename="Demo/demo.cbp" />
<Project filename="../tools/GUIEditor/GUIEditor_gcc.cbp" /> <Project filename="../tools/GUIEditor/GUIEditor_gcc.cbp" />
<Project filename="../tools/MeshConverter/MeshConverter.cbp" /> <Project filename="../tools/MeshConverter/MeshConverter.cbp" />
......
...@@ -31,7 +31,10 @@ namespace scene ...@@ -31,7 +31,10 @@ namespace scene
EMWT_OBJ = MAKE_IRR_ID('o','b','j',0), EMWT_OBJ = MAKE_IRR_ID('o','b','j',0),
//! PLY mesh writer for .ply files //! PLY mesh writer for .ply files
EMWT_PLY = MAKE_IRR_ID('p','l','y',0) EMWT_PLY = MAKE_IRR_ID('p','l','y',0),
//! B3D mesh writer, for static .b3d files
EMWT_B3D = MAKE_IRR_ID('b', '3', 'd', 0)
}; };
......
...@@ -12,48 +12,6 @@ namespace irr ...@@ -12,48 +12,6 @@ namespace irr
{ {
namespace scene namespace scene
{ {
//! Possible types of (animated) meshes.
enum E_ANIMATED_MESH_TYPE
{
//! Unknown animated mesh type.
EAMT_UNKNOWN = 0,
//! Quake 2 MD2 model file
EAMT_MD2,
//! Quake 3 MD3 model file
EAMT_MD3,
//! Maya .obj static model
EAMT_OBJ,
//! Quake 3 .bsp static Map
EAMT_BSP,
//! 3D Studio .3ds file
EAMT_3DS,
//! My3D Mesh, the file format by Zhuck Dimitry
EAMT_MY3D,
//! Pulsar LMTools .lmts file. This Irrlicht loader was written by Jonas Petersen
EAMT_LMTS,
//! Cartography Shop .csm file. This loader was created by Saurav Mohapatra.
EAMT_CSM,
//! .oct file for Paul Nette's FSRad or from Murphy McCauley's Blender .oct exporter.
/** The oct file format contains 3D geometry and lightmaps and
can be loaded directly by Irrlicht */
EAMT_OCT,
//! Halflife MDL model file
EAMT_MDL_HALFLIFE,
//! generic skinned mesh
EAMT_SKINNED
};
//! Interface for an animated mesh. //! Interface for an animated mesh.
/** There are already simple implementations of this interface available so /** There are already simple implementations of this interface available so
you don't have to implement this interface on your own if you need to: you don't have to implement this interface on your own if you need to:
......
...@@ -13,6 +13,54 @@ namespace irr ...@@ -13,6 +13,54 @@ namespace irr
{ {
namespace scene namespace scene
{ {
//! Possible types of meshes.
// Note: Was previously only used in IAnimatedMesh so it still has the "animated" in the name.
// But can now be used for all mesh-types as we need those casts as well.
enum E_ANIMATED_MESH_TYPE
{
//! Unknown animated mesh type.
EAMT_UNKNOWN = 0,
//! Quake 2 MD2 model file
EAMT_MD2,
//! Quake 3 MD3 model file
EAMT_MD3,
//! Maya .obj static model
EAMT_OBJ,
//! Quake 3 .bsp static Map
EAMT_BSP,
//! 3D Studio .3ds file
EAMT_3DS,
//! My3D Mesh, the file format by Zhuck Dimitry
EAMT_MY3D,
//! Pulsar LMTools .lmts file. This Irrlicht loader was written by Jonas Petersen
EAMT_LMTS,
//! Cartography Shop .csm file. This loader was created by Saurav Mohapatra.
EAMT_CSM,
//! .oct file for Paul Nette's FSRad or from Murphy McCauley's Blender .oct exporter.
/** The oct file format contains 3D geometry and lightmaps and
can be loaded directly by Irrlicht */
EAMT_OCT,
//! Halflife MDL model file
EAMT_MDL_HALFLIFE,
//! generic skinned mesh
EAMT_SKINNED,
//! generig non-animated mesh
EAMT_STATIC
};
class IMeshBuffer; class IMeshBuffer;
//! Class which holds the geometry of an object. //! Class which holds the geometry of an object.
...@@ -66,6 +114,17 @@ namespace scene ...@@ -66,6 +114,17 @@ namespace scene
indices have changed. Otherwise, changes won't be updated indices have changed. Otherwise, changes won't be updated
on the GPU in the next render cycle. */ on the GPU in the next render cycle. */
virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) = 0; virtual void setDirty(E_BUFFER_TYPE buffer=EBT_VERTEX_AND_INDEX) = 0;
//! Returns the type of the meshes.
/** This is useful for making a safe downcast. For example,
if getMeshType() returns EAMT_MD2 it's safe to cast the
IMesh to IAnimatedMeshMD2.
Note: It's no longer just about animated meshes, that name has just historical reasons.
\returns Type of the mesh */
virtual E_ANIMATED_MESH_TYPE getMeshType() const
{
return EAMT_STATIC;
}
}; };
} // end namespace scene } // end namespace scene
......
...@@ -43,7 +43,7 @@ namespace scene ...@@ -43,7 +43,7 @@ namespace scene
s32 flags=EMWF_NONE) = 0; s32 flags=EMWF_NONE) = 0;
// Writes an animated mesh // Writes an animated mesh
// for future use, no writer is able to write animated meshes currently // for future use, only b3d writer is able to write animated meshes currently and that was implemented using the writeMesh above.
/* \return Returns true if sucessful */ /* \return Returns true if sucessful */
//virtual bool writeAnimatedMesh(io::IWriteFile* file, //virtual bool writeAnimatedMesh(io::IWriteFile* file,
// scene::IAnimatedMesh* mesh, // scene::IAnimatedMesh* mesh,
......
...@@ -482,6 +482,11 @@ B3D, MS3D or X meshes */ ...@@ -482,6 +482,11 @@ B3D, MS3D or X meshes */
#ifdef NO_IRR_COMPILE_WITH_PLY_WRITER_ #ifdef NO_IRR_COMPILE_WITH_PLY_WRITER_
#undef _IRR_COMPILE_WITH_PLY_WRITER_ #undef _IRR_COMPILE_WITH_PLY_WRITER_
#endif #endif
//! Define _IRR_COMPILE_WITH_B3D_WRITER_ if you want to write .b3d files
#define _IRR_COMPILE_WITH_B3D_WRITER_
#ifdef NO_IRR_COMPILE_WITH_B3D_WRITER_
#undef _IRR_COMPILE_WITH_B3D_WRITER_
#endif
//! Define _IRR_COMPILE_WITH_BMP_LOADER_ if you want to load .bmp files //! Define _IRR_COMPILE_WITH_BMP_LOADER_ if you want to load .bmp files
//! Disabling this loader will also disable the built-in font //! Disabling this loader will also disable the built-in font
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "IMeshLoader.h" #include "IMeshLoader.h"
#include "ISceneManager.h" #include "ISceneManager.h"
#include "CSkinnedMesh.h" #include "CSkinnedMesh.h"
#include "SB3DStructs.h"
#include "IReadFile.h" #include "IReadFile.h"
namespace irr namespace irr
...@@ -42,56 +43,6 @@ public: ...@@ -42,56 +43,6 @@ public:
private: private:
struct SB3dChunkHeader
{
c8 name[4];
s32 size;
};
struct SB3dChunk
{
SB3dChunk(const SB3dChunkHeader& header, long sp)
: length(header.size+8), startposition(sp)
{
name[0]=header.name[0];
name[1]=header.name[1];
name[2]=header.name[2];
name[3]=header.name[3];
}
c8 name[4];
s32 length;
long startposition;
};
struct SB3dTexture
{
core::stringc TextureName;
s32 Flags;
s32 Blend;
f32 Xpos;
f32 Ypos;
f32 Xscale;
f32 Yscale;
f32 Angle;
};
struct SB3dMaterial
{
SB3dMaterial() : red(1.0f), green(1.0f),
blue(1.0f), alpha(1.0f), shininess(0.0f), blend(1),
fx(0)
{
for (u32 i=0; i<video::MATERIAL_MAX_TEXTURES; ++i)
Textures[i]=0;
}
video::SMaterial Material;
f32 red, green, blue, alpha;
f32 shininess;
s32 blend,fx;
SB3dTexture *Textures[video::MATERIAL_MAX_TEXTURES];
};
bool load(); bool load();
bool readChunkNODE(CSkinnedMesh::SJoint* InJoint); bool readChunkNODE(CSkinnedMesh::SJoint* InJoint);
bool readChunkMESH(CSkinnedMesh::SJoint* InJoint); bool readChunkMESH(CSkinnedMesh::SJoint* InJoint);
......
This diff is collapsed.
// Copyright (C) 2014 Lauri Kasanen
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
// Modified version with rigging/skinning support
#ifndef __IRR_B3D_MESH_WRITER_H_INCLUDED__
#define __IRR_B3D_MESH_WRITER_H_INCLUDED__
#include "IMeshWriter.h"
#include "IFileSystem.h"
#include "SB3DStructs.h"
#include "ISkinnedMesh.h"
namespace irr
{
namespace scene
{
//! class to write B3D mesh files
class CB3DMeshWriter : public IMeshWriter
{
public:
CB3DMeshWriter(io::IFileSystem *fs);
//! Returns the type of the mesh writer
virtual EMESH_WRITER_TYPE getType() const;
//! writes a mesh
virtual bool writeMesh(io::IWriteFile* file, scene::IMesh* mesh, s32 flags=EMWF_NONE);
private:
io::IFileSystem *FileSystem;
u32 Size;
void writeJointChunk(io::IWriteFile* file, ISkinnedMesh* mesh , ISkinnedMesh::SJoint* joint);
u32 getJointChunkSize(const ISkinnedMesh* mesh, ISkinnedMesh::SJoint* joint);
core::array<ISkinnedMesh::SJoint*> getRootJoints(const ISkinnedMesh* mesh);
u32 getUVlayerCount(IMesh *mesh);
ISkinnedMesh* getSkinned (IMesh *mesh);
void write(io::IWriteFile* file, const void *ptr, const u32 bytes);
};
} // end namespace
} // end namespace
#endif
...@@ -134,6 +134,10 @@ ...@@ -134,6 +134,10 @@
#include "CPLYMeshWriter.h" #include "CPLYMeshWriter.h"
#endif #endif
#ifdef _IRR_COMPILE_WITH_B3D_WRITER_
#include "CB3DMeshWriter.h"
#endif
#include "CCubeSceneNode.h" #include "CCubeSceneNode.h"
#include "CSphereSceneNode.h" #include "CSphereSceneNode.h"
#include "CAnimatedMeshSceneNode.h" #include "CAnimatedMeshSceneNode.h"
...@@ -2545,6 +2549,13 @@ IMeshWriter* CSceneManager::createMeshWriter(EMESH_WRITER_TYPE type) ...@@ -2545,6 +2549,13 @@ IMeshWriter* CSceneManager::createMeshWriter(EMESH_WRITER_TYPE type)
#else #else
return 0; return 0;
#endif #endif
case EMWT_B3D:
#ifdef _IRR_COMPILE_WITH_B3D_WRITER_
return new CB3DMeshWriter(FileSystem);
#else
return 0;
#endif
} }
return 0; return 0;
......
...@@ -614,6 +614,8 @@ ...@@ -614,6 +614,8 @@
<Unit filename="CAttributes.h" /> <Unit filename="CAttributes.h" />
<Unit filename="CB3DMeshFileLoader.cpp" /> <Unit filename="CB3DMeshFileLoader.cpp" />
<Unit filename="CB3DMeshFileLoader.h" /> <Unit filename="CB3DMeshFileLoader.h" />
<Unit filename="CB3DMeshWriter.cpp" />
<Unit filename="CB3DMeshWriter.h" />
<Unit filename="CBSPMeshFileLoader.cpp" /> <Unit filename="CBSPMeshFileLoader.cpp" />
<Unit filename="CBSPMeshFileLoader.h" /> <Unit filename="CBSPMeshFileLoader.h" />
<Unit filename="CBillboardSceneNode.cpp" /> <Unit filename="CBillboardSceneNode.cpp" />
...@@ -1013,6 +1015,7 @@ ...@@ -1013,6 +1015,7 @@
<Unit filename="Octree.h" /> <Unit filename="Octree.h" />
<Unit filename="S2DVertex.h" /> <Unit filename="S2DVertex.h" />
<Unit filename="S4DVertex.h" /> <Unit filename="S4DVertex.h" />
<Unit filename="SB3DStructs.h" />
<Unit filename="SoftwareDriver2_compile_config.h" /> <Unit filename="SoftwareDriver2_compile_config.h" />
<Unit filename="SoftwareDriver2_helper.h" /> <Unit filename="SoftwareDriver2_helper.h" />
<Unit filename="aesGladman\aes.h" /> <Unit filename="aesGladman\aes.h" />
......
...@@ -994,6 +994,7 @@ ...@@ -994,6 +994,7 @@
<ClInclude Include="..\..\include\IGUIToolbar.h" /> <ClInclude Include="..\..\include\IGUIToolbar.h" />
<ClInclude Include="..\..\include\IGUITreeView.h" /> <ClInclude Include="..\..\include\IGUITreeView.h" />
<ClInclude Include="..\..\include\IGUIWindow.h" /> <ClInclude Include="..\..\include\IGUIWindow.h" />
<ClInclude Include="CB3DMeshWriter.h" />
<ClInclude Include="CD3D9RenderTarget.h" /> <ClInclude Include="CD3D9RenderTarget.h" />
<ClInclude Include="CDefaultSceneNodeAnimatorFactory.h" /> <ClInclude Include="CDefaultSceneNodeAnimatorFactory.h" />
<ClInclude Include="CDefaultSceneNodeFactory.h" /> <ClInclude Include="CDefaultSceneNodeFactory.h" />
...@@ -1103,6 +1104,7 @@ ...@@ -1103,6 +1104,7 @@
<ClInclude Include="COpenGLSLMaterialRenderer.h" /> <ClInclude Include="COpenGLSLMaterialRenderer.h" />
<ClInclude Include="COpenGLTexture.h" /> <ClInclude Include="COpenGLTexture.h" />
<ClInclude Include="glext.h" /> <ClInclude Include="glext.h" />
<ClInclude Include="SB3DStructs.h" />
<ClInclude Include="wglext.h" /> <ClInclude Include="wglext.h" />
<ClInclude Include="CColorConverter.h" /> <ClInclude Include="CColorConverter.h" />
<ClInclude Include="CFPSCounter.h" /> <ClInclude Include="CFPSCounter.h" />
...@@ -1240,6 +1242,7 @@ ...@@ -1240,6 +1242,7 @@
<None Include="..\..\readme.txt" /> <None Include="..\..\readme.txt" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="CB3DMeshWriter.cpp" />
<ClCompile Include="CD3D9RenderTarget.cpp" /> <ClCompile Include="CD3D9RenderTarget.cpp" />
<ClCompile Include="CDefaultSceneNodeAnimatorFactory.cpp" /> <ClCompile Include="CDefaultSceneNodeAnimatorFactory.cpp" />
<ClCompile Include="CDefaultSceneNodeFactory.cpp" /> <ClCompile Include="CDefaultSceneNodeFactory.cpp" />
......
...@@ -1309,6 +1309,12 @@ ...@@ -1309,6 +1309,12 @@
<ClInclude Include="COpenGLRenderTarget.h"> <ClInclude Include="COpenGLRenderTarget.h">
<Filter>Irrlicht\video\OpenGL</Filter> <Filter>Irrlicht\video\OpenGL</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="CB3DMeshWriter.h">
<Filter>Irrlicht\scene\writers</Filter>
</ClInclude>
<ClInclude Include="SB3DStructs.h">
<Filter>Irrlicht\scene</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="..\..\changes.txt"> <None Include="..\..\changes.txt">
...@@ -2237,6 +2243,9 @@ ...@@ -2237,6 +2243,9 @@
<ClCompile Include="COpenGLRenderTarget.cpp"> <ClCompile Include="COpenGLRenderTarget.cpp">
<Filter>Irrlicht\video\OpenGL</Filter> <Filter>Irrlicht\video\OpenGL</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="CB3DMeshWriter.cpp">
<Filter>Irrlicht\scene\writers</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="Irrlicht.rc" /> <ResourceCompile Include="Irrlicht.rc" />
......
...@@ -1001,6 +1001,7 @@ ...@@ -1001,6 +1001,7 @@
<ClInclude Include="..\..\include\IGUIToolbar.h" /> <ClInclude Include="..\..\include\IGUIToolbar.h" />
<ClInclude Include="..\..\include\IGUITreeView.h" /> <ClInclude Include="..\..\include\IGUITreeView.h" />
<ClInclude Include="..\..\include\IGUIWindow.h" /> <ClInclude Include="..\..\include\IGUIWindow.h" />
<ClInclude Include="CB3DMeshWriter.h" />
<ClInclude Include="CD3D9RenderTarget.h" /> <ClInclude Include="CD3D9RenderTarget.h" />
<ClInclude Include="CDefaultSceneNodeAnimatorFactory.h" /> <ClInclude Include="CDefaultSceneNodeAnimatorFactory.h" />
<ClInclude Include="CDefaultSceneNodeFactory.h" /> <ClInclude Include="CDefaultSceneNodeFactory.h" />
...@@ -1109,6 +1110,7 @@ ...@@ -1109,6 +1110,7 @@
<ClInclude Include="COpenGLSLMaterialRenderer.h" /> <ClInclude Include="COpenGLSLMaterialRenderer.h" />
<ClInclude Include="COpenGLTexture.h" /> <ClInclude Include="COpenGLTexture.h" />
<ClInclude Include="glext.h" /> <ClInclude Include="glext.h" />
<ClInclude Include="SB3DStructs.h" />
<ClInclude Include="wglext.h" /> <ClInclude Include="wglext.h" />
<ClInclude Include="CColorConverter.h" /> <ClInclude Include="CColorConverter.h" />
<ClInclude Include="CFPSCounter.h" /> <ClInclude Include="CFPSCounter.h" />
...@@ -1247,6 +1249,7 @@ ...@@ -1247,6 +1249,7 @@
<None Include="..\..\readme.txt" /> <None Include="..\..\readme.txt" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="CB3DMeshWriter.cpp" />
<ClCompile Include="CD3D9RenderTarget.cpp" /> <ClCompile Include="CD3D9RenderTarget.cpp" />
<ClCompile Include="CDefaultSceneNodeAnimatorFactory.cpp" /> <ClCompile Include="CDefaultSceneNodeAnimatorFactory.cpp" />
<ClCompile Include="CDefaultSceneNodeFactory.cpp" /> <ClCompile Include="CDefaultSceneNodeFactory.cpp" />
......
...@@ -1308,6 +1308,12 @@ ...@@ -1308,6 +1308,12 @@
</ClInclude> </ClInclude>
<ClInclude Include="COpenGLRenderTarget.h"> <ClInclude Include="COpenGLRenderTarget.h">
<Filter>Irrlicht\video\OpenGL</Filter> <Filter>Irrlicht\video\OpenGL</Filter>
</ClInclude>
<ClInclude Include="CB3DMeshWriter.h">
<Filter>Irrlicht\scene\writers</Filter>
</ClInclude>
<ClInclude Include="SB3DStructs.h">
<Filter>Irrlicht\scene</Filter>
</ClInclude> </ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
...@@ -2236,6 +2242,9 @@ ...@@ -2236,6 +2242,9 @@
</ClCompile> </ClCompile>
<ClCompile Include="COpenGLRenderTarget.cpp"> <ClCompile Include="COpenGLRenderTarget.cpp">
<Filter>Irrlicht\video\OpenGL</Filter> <Filter>Irrlicht\video\OpenGL</Filter>
</ClCompile>
<ClCompile Include="CB3DMeshWriter.cpp">
<Filter>Irrlicht\scene\writers</Filter>
</ClCompile> </ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
......
...@@ -1001,6 +1001,7 @@ ...@@ -1001,6 +1001,7 @@
<ClInclude Include="..\..\include\IGUIToolbar.h" /> <ClInclude Include="..\..\include\IGUIToolbar.h" />
<ClInclude Include="..\..\include\IGUITreeView.h" /> <ClInclude Include="..\..\include\IGUITreeView.h" />
<ClInclude Include="..\..\include\IGUIWindow.h" /> <ClInclude Include="..\..\include\IGUIWindow.h" />
<ClInclude Include="CB3DMeshWriter.h" />
<ClInclude Include="CD3D9RenderTarget.h" /> <ClInclude Include="CD3D9RenderTarget.h" />
<ClInclude Include="CDefaultSceneNodeAnimatorFactory.h" /> <ClInclude Include="CDefaultSceneNodeAnimatorFactory.h" />
<ClInclude Include="CDefaultSceneNodeFactory.h" /> <ClInclude Include="CDefaultSceneNodeFactory.h" />
...@@ -1109,6 +1110,7 @@ ...@@ -1109,6 +1110,7 @@
<ClInclude Include="COpenGLSLMaterialRenderer.h" /> <ClInclude Include="COpenGLSLMaterialRenderer.h" />
<ClInclude Include="COpenGLTexture.h" /> <ClInclude Include="COpenGLTexture.h" />
<ClInclude Include="glext.h" /> <ClInclude Include="glext.h" />
<ClInclude Include="SB3DStructs.h" />
<ClInclude Include="wglext.h" /> <ClInclude Include="wglext.h" />
<ClInclude Include="CColorConverter.h" /> <ClInclude Include="CColorConverter.h" />
<ClInclude Include="CFPSCounter.h" /> <ClInclude Include="CFPSCounter.h" />
...@@ -1247,6 +1249,7 @@ ...@@ -1247,6 +1249,7 @@
<None Include="..\..\readme.txt" /> <None Include="..\..\readme.txt" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="CB3DMeshWriter.cpp" />
<ClCompile Include="CD3D9RenderTarget.cpp" /> <ClCompile Include="CD3D9RenderTarget.cpp" />
<ClCompile Include="CDefaultSceneNodeAnimatorFactory.cpp" /> <ClCompile Include="CDefaultSceneNodeAnimatorFactory.cpp" />
<ClCompile Include="CDefaultSceneNodeFactory.cpp" /> <ClCompile Include="CDefaultSceneNodeFactory.cpp" />
......
...@@ -1308,6 +1308,12 @@ ...@@ -1308,6 +1308,12 @@
</ClInclude> </ClInclude>
<ClInclude Include="COpenGLRenderTarget.h"> <ClInclude Include="COpenGLRenderTarget.h">
<Filter>Irrlicht\video\OpenGL</Filter> <Filter>Irrlicht\video\OpenGL</Filter>
</ClInclude>
<ClInclude Include="CB3DMeshWriter.h">
<Filter>Irrlicht\scene\writers</Filter>
</ClInclude>
<ClInclude Include="SB3DStructs.h">
<Filter>Irrlicht\scene</Filter>
</ClInclude> </ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
...@@ -2236,6 +2242,9 @@ ...@@ -2236,6 +2242,9 @@
</ClCompile> </ClCompile>
<ClCompile Include="COpenGLRenderTarget.cpp"> <ClCompile Include="COpenGLRenderTarget.cpp">
<Filter>Irrlicht\video\OpenGL</Filter> <Filter>Irrlicht\video\OpenGL</Filter>
</ClCompile>
<ClCompile Include="CB3DMeshWriter.cpp">
<Filter>Irrlicht\scene\writers</Filter>
</ClCompile> </ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
......
...@@ -2079,6 +2079,14 @@ ...@@ -2079,6 +2079,14 @@
RelativePath="CSTLMeshWriter.h" RelativePath="CSTLMeshWriter.h"
> >
</File> </File>
<File
RelativePath="CB3DMeshWriter.cpp"
>
</File>
<File
RelativePath="CB3DMeshWriter.h"
>
</File>
</Filter> </Filter>
</Filter> </Filter>
<Filter <Filter
......
...@@ -30,7 +30,7 @@ VERSION_RELEASE = 0 ...@@ -30,7 +30,7 @@ VERSION_RELEASE = 0
#List of object files, separated based on engine architecture #List of object files, separated based on engine architecture
IRRMESHLOADER = CBSPMeshFileLoader.o CMD2MeshFileLoader.o CMD3MeshFileLoader.o CMS3DMeshFileLoader.o CB3DMeshFileLoader.o C3DSMeshFileLoader.o COgreMeshFileLoader.o COBJMeshFileLoader.o CColladaFileLoader.o CCSMLoader.o CDMFLoader.o CLMTSMeshFileLoader.o CMY3DMeshFileLoader.o COCTLoader.o CXMeshFileLoader.o CIrrMeshFileLoader.o CSTLMeshFileLoader.o CLWOMeshFileLoader.o CPLYMeshFileLoader.o CSMFMeshFileLoader.o CMeshTextureLoader.o IRRMESHLOADER = CBSPMeshFileLoader.o CMD2MeshFileLoader.o CMD3MeshFileLoader.o CMS3DMeshFileLoader.o CB3DMeshFileLoader.o C3DSMeshFileLoader.o COgreMeshFileLoader.o COBJMeshFileLoader.o CColladaFileLoader.o CCSMLoader.o CDMFLoader.o CLMTSMeshFileLoader.o CMY3DMeshFileLoader.o COCTLoader.o CXMeshFileLoader.o CIrrMeshFileLoader.o CSTLMeshFileLoader.o CLWOMeshFileLoader.o CPLYMeshFileLoader.o CSMFMeshFileLoader.o CMeshTextureLoader.o
IRRMESHWRITER = CColladaMeshWriter.o CIrrMeshWriter.o CSTLMeshWriter.o COBJMeshWriter.o CPLYMeshWriter.o IRRMESHWRITER = CColladaMeshWriter.o CIrrMeshWriter.o CSTLMeshWriter.o COBJMeshWriter.o CPLYMeshWriter.o CB3DMeshWriter.o
IRRMESHOBJ = $(IRRMESHLOADER) $(IRRMESHWRITER) \ IRRMESHOBJ = $(IRRMESHLOADER) $(IRRMESHWRITER) \
CSkinnedMesh.o CBoneSceneNode.o CMeshSceneNode.o \ CSkinnedMesh.o CBoneSceneNode.o CMeshSceneNode.o \
CAnimatedMeshSceneNode.o CAnimatedMeshMD2.o CAnimatedMeshMD3.o \ CAnimatedMeshSceneNode.o CAnimatedMeshMD2.o CAnimatedMeshMD3.o \
......
// Copyright (C) 2006-2012 Luke Hoschke
// This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in irrlicht.h
// B3D Mesh loader
// File format designed by Mark Sibly for the Blitz3D engine and has been
// declared public domain
#include "IrrCompileConfig.h"
#ifndef SB3DSTRUCTS_H
#define SB3DSTRUCTS_H
#include "SMaterial.h"
namespace irr {
namespace scene {
struct SB3dChunkHeader
{
c8 name[4];
s32 size;
};
struct SB3dChunk
{
SB3dChunk(const SB3dChunkHeader& header, long sp)
: length(header.size+8), startposition(sp)
{
name[0]=header.name[0];
name[1]=header.name[1];
name[2]=header.name[2];
name[3]=header.name[3];
}
c8 name[4];
s32 length;
long startposition;
};
struct SB3dTexture
{
core::stringc TextureName;
s32 Flags;
s32 Blend;
f32 Xpos;
f32 Ypos;
f32 Xscale;
f32 Yscale;
f32 Angle;
};
struct SB3dMaterial
{
SB3dMaterial() : red(1.0f), green(1.0f),
blue(1.0f), alpha(1.0f), shininess(0.0f), blend(1),
fx(0)
{
for (u32 i=0; i<video::MATERIAL_MAX_TEXTURES; ++i)
Textures[i]=0;
}
video::SMaterial Material;
f32 red, green, blue, alpha;
f32 shininess;
s32 blend,fx;
SB3dTexture *Textures[video::MATERIAL_MAX_TEXTURES];
};
} // end namespace scene
} // end namespace irr
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment