imesh/animesh.h Source File (Crystal Space 2.0 Public API Reference)

| ## Public API Reference

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

imesh/animesh.h
Go to the documentation of this file.

    00001 /*
    00002   Copyright (C) 2008 by Marten Svanfeldt
    00003
    00004   This library is free software; you can redistribute it and/or
    00005   modify it under the terms of the GNU Library General Public
    00006   License as published by the Free Software Foundation; either
    00007   version 2 of the License, or (at your option) any later version.
    00008
    00009   This library is distributed in the hope that it will be useful,
    00010   but WITHOUT ANY WARRANTY; without even the implied warranty of
    00011   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    00012   Library General Public License for more details.
    00013
    00014   You should have received a copy of the GNU Library General Public
    00015   License along with this library; if not, write to the Free
    00016   Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
    00017 */
    00018
    00019 #ifndef __CS_IMESH_ANIMESH_H__
    00020 #define __CS_IMESH_ANIMESH_H__
    00021
    00022 #include "csutil/scf_interface.h"
    00023
    00024 #include "imesh/skeleton2.h"
    00025
    00026 #include "ivideo/graph3d.h"
    00027 #include "ivideo/rendermesh.h"
    00028
    00029 struct iRenderBuffer;
    00030 struct iMaterialWrapper;
    00031 struct iShaderVariableContext;
    00032
    00033 class csReversibleTransform;
    00034
    00039 namespace CS
    00040 {
    00041 namespace Mesh
    00042 {
    00043
    00044 struct iAnimatedMeshFactory;
    00045 struct iAnimatedMeshSubMeshFactory;
    00046 struct iAnimatedMesh;
    00047 struct iAnimatedMeshSubMesh;
    00048 struct iAnimatedMeshMorphTarget;
    00049
    00050
    00054 struct AnimatedMeshBoneInfluence
    00055 {
    00057   CS::Animation::BoneID bone;
    00058
    00063   float influenceWeight;
    00064 };
    00065
    00069 struct iAnimatedMeshSocketFactory : public virtual iBase
    00070 {
    00071 public:
    00072   SCF_INTERFACE(CS::Mesh::iAnimatedMeshSocketFactory, 2, 0, 0);
    00073
    00077   virtual const char* GetName () const = 0;
    00078
    00082   virtual void SetName (const char* name) = 0;
    00083
    00087   virtual const csReversibleTransform& GetTransform () const = 0;
    00088
    00092   virtual void SetTransform (csReversibleTransform& transform) = 0;
    00093
    00097   virtual CS::Animation::BoneID GetBone () const = 0;
    00098
    00102   virtual void SetBone (CS::Animation::BoneID boneID) = 0;
    00103
    00107   virtual iAnimatedMeshFactory* GetFactory () = 0;
    00108 };
    00109
    00114 struct iAnimatedMeshSocket : public virtual iBase
    00115 {
    00116 public:
    00117   SCF_INTERFACE(CS::Mesh::iAnimatedMeshSocket, 1, 0, 0);
    00118
    00122   virtual const char* GetName () const = 0;
    00123
    00127   virtual iAnimatedMeshSocketFactory* GetFactory () = 0;
    00128
    00132   virtual const csReversibleTransform& GetTransform () const = 0;
    00133
    00137   virtual void SetTransform (csReversibleTransform& tf) = 0;
    00138
    00142   virtual const csReversibleTransform GetFullTransform () const = 0;
    00143
    00147   virtual CS::Animation::BoneID GetBone () const = 0;
    00148
    00152   virtual iAnimatedMesh* GetMesh () const = 0;
    00153
    00157   virtual iSceneNode* GetSceneNode () const = 0;
    00158
    00162   virtual void SetSceneNode (iSceneNode* sn) = 0;
    00163 };
    00164
    00165
    00178 struct iAnimatedMeshFactory : public virtual iBase
    00179 {
    00180   SCF_INTERFACE(CS::Mesh::iAnimatedMeshFactory, 2, 2, 3);
    00181
    00191   virtual iAnimatedMeshSubMeshFactory* CreateSubMesh (iRenderBuffer* indices,
    00192     const char* name, bool visible) = 0;
    00193
    00202   virtual iAnimatedMeshSubMeshFactory* CreateSubMesh (
    00203     const csArray<iRenderBuffer*>& indices,
    00204     const csArray<csArray<unsigned int> >& boneIndices,
    00205     const char* name, bool visible) = 0;
    00206
    00210   virtual iAnimatedMeshSubMeshFactory* GetSubMesh (size_t index) const = 0;
    00211
    00215   virtual size_t FindSubMesh (const char* name) const = 0;
    00216
    00220   virtual size_t GetSubMeshCount () const = 0;
    00221
    00225   virtual void DeleteSubMesh (iAnimatedMeshSubMeshFactory* mesh) = 0;
    00226
    00235   virtual uint GetVertexCount () const = 0;
    00236
    00242   virtual iRenderBuffer* GetVertices () = 0;
    00243
    00250   virtual bool SetVertices (iRenderBuffer* renderBuffer) = 0;
    00251
    00257   virtual iRenderBuffer* GetTexCoords () = 0;
    00258
    00264   virtual bool SetTexCoords (iRenderBuffer* renderBuffer) = 0;
    00265
    00271   virtual iRenderBuffer* GetNormals () = 0;
    00272
    00278   virtual bool SetNormals (iRenderBuffer* renderBuffer) = 0;
    00279
    00285   virtual iRenderBuffer* GetTangents () = 0;
    00286
    00292   virtual bool SetTangents (iRenderBuffer* renderBuffer) = 0;
    00293
    00299   virtual iRenderBuffer* GetBinormals () = 0;
    00300
    00306   virtual bool SetBinormals (iRenderBuffer* renderBuffer) = 0;
    00307
    00313   virtual iRenderBuffer* GetColors () = 0;
    00314
    00320   virtual bool SetColors (iRenderBuffer* renderBuffer) = 0;
    00321
    00334   virtual void Invalidate () = 0;
    00335
    00344   virtual void SetSkeletonFactory (CS::Animation::iSkeletonFactory* skeletonFactory) = 0;
    00345
    00349   virtual CS::Animation::iSkeletonFactory* GetSkeletonFactory () const = 0;
    00350
    00361   virtual void SetBoneInfluencesPerVertex (uint num) = 0;
    00362
    00366   virtual uint GetBoneInfluencesPerVertex () const = 0;
    00367
    00372   virtual AnimatedMeshBoneInfluence* GetBoneInfluences () = 0;
    00373
    00388   virtual iAnimatedMeshMorphTarget* CreateMorphTarget (const char* name) = 0;
    00389
    00393   virtual iAnimatedMeshMorphTarget* GetMorphTarget (uint target) = 0;
    00394
    00398   virtual uint GetMorphTargetCount () const = 0;
    00399
    00404   virtual void ClearMorphTargets () = 0;
    00405
    00410   virtual uint FindMorphTarget (const char* name) const = 0;
    00411
    00423   virtual void CreateSocket (CS::Animation::BoneID bone,
    00424     const csReversibleTransform& transform, const char* name) = 0;
    00425
    00429   virtual size_t GetSocketCount () const = 0;
    00430
    00434   virtual iAnimatedMeshSocketFactory* GetSocket (size_t index) const = 0;
    00435
    00440   virtual uint FindSocket (const char* name) const = 0;
    00441
    00450   virtual void ComputeTangents () = 0;
    00451
    00479   virtual void SetBoneBoundingBox (CS::Animation::BoneID bone, const csBox3& box) = 0;
    00480
    00489   virtual const csBox3& GetBoneBoundingBox (CS::Animation::BoneID bone) const = 0;
    00490
    00510   virtual size_t AddSubset () = 0;
    00511
    00519   virtual void AddSubsetVertex (const size_t subset, const size_t vertexIndex) = 0;
    00520
    00527   virtual size_t GetSubsetVertex (const size_t subset, const size_t vertexIndex) const = 0;
    00528
    00532   virtual size_t GetSubsetVertexCount (const size_t subset) const = 0;
    00533
    00537   virtual size_t GetSubsetCount () const = 0;
    00538
    00544   virtual void ClearSubsets () = 0;
    00545
    00547 };
    00548
    00553 struct iAnimatedMeshSubMeshFactory : public virtual iBase
    00554 {
    00555   SCF_INTERFACE(CS::Mesh::iAnimatedMeshSubMeshFactory, 1, 2, 1);
    00556
    00560   virtual iRenderBuffer* GetIndices (size_t set) = 0;
    00561
    00565   virtual uint GetIndexSetCount () const = 0;
    00566
    00570   virtual const csArray<unsigned int>& GetBoneIndices (size_t set) = 0;
    00571
    00575   virtual iMaterialWrapper* GetMaterial () const = 0;
    00576
    00580   virtual void SetMaterial (iMaterialWrapper* material) = 0;
    00581
    00585   virtual const char* GetName () const = 0;
    00586
    00590   virtual void SetRendering (bool doRender) = 0;
    00591
    00595   virtual bool IsRendering () const = 0;
    00596
    00600   virtual void SetRenderPriority (CS::Graphics::RenderPriority rp) = 0;
    00601
    00605   virtual CS::Graphics::RenderPriority GetRenderPriority () const = 0;
    00606
    00610   virtual void SetZBufMode (csZBufMode mode) = 0;
    00611
    00615   virtual csZBufMode GetZBufMode () const = 0;
    00616 };
    00617
    00624 struct iAnimatedMesh : public virtual iBase
    00625 {
    00626   SCF_INTERFACE(CS::Mesh::iAnimatedMesh, 1, 0, 3);
    00627
    00634   virtual void SetSkeleton (CS::Animation::iSkeleton* skeleton) = 0;
    00635
    00639   virtual CS::Animation::iSkeleton* GetSkeleton () const = 0;
    00640
    00644   virtual iAnimatedMeshSubMesh* GetSubMesh (size_t index) const = 0;
    00645
    00649   virtual size_t GetSubMeshCount () const = 0;
    00650
    00654   virtual void SetMorphTargetWeight (uint target, float weight) = 0;
    00655
    00659   virtual float GetMorphTargetWeight (uint target) const = 0;
    00660
    00667   virtual size_t GetSocketCount () const = 0;
    00668
    00672   virtual iAnimatedMeshSocket* GetSocket (size_t index) const = 0;
    00678   virtual iAnimatedMeshFactory* GetAnimatedMeshFactory () const = 0;
    00679
    00683   virtual iRenderBufferAccessor* GetRenderBufferAccessor () const = 0;
    00684
    00700   virtual void SetBoneBoundingBox (CS::Animation::BoneID bone, const csBox3& box) = 0;
    00701
    00714   virtual const csBox3& GetBoneBoundingBox (CS::Animation::BoneID bone) const = 0;
    00715
    00722   virtual void UnsetObjectBoundingBox () = 0;
    00723
    00727   virtual void ClearMorphTargetWeights () = 0;
    00728 };
    00729
    00734 struct iAnimatedMeshSubMesh : public virtual iBase
    00735 {
    00736   SCF_INTERFACE(CS::Mesh::iAnimatedMeshSubMesh, 1, 2, 0);
    00737
    00741   virtual iAnimatedMeshSubMeshFactory* GetFactorySubMesh () = 0;
    00742
    00746   virtual void SetRendering (bool doRender) = 0;
    00747
    00751   virtual bool IsRendering () const = 0;
    00752
    00756   virtual iShaderVariableContext* GetShaderVariableContext (size_t buffer) const = 0;
    00757
    00761   virtual iMaterialWrapper* GetMaterial () const = 0;
    00762
    00766   virtual void SetMaterial (iMaterialWrapper* material) = 0;
    00767 };
    00768
    00773 struct iAnimatedMeshMorphTarget : public virtual iBase
    00774 {
    00775   SCF_INTERFACE(CS::Mesh::iAnimatedMeshMorphTarget, 2, 0, 1);
    00776
    00784   virtual bool SetVertexOffsets (iRenderBuffer* renderBuffer) = 0;
    00785
    00790   virtual iRenderBuffer* GetVertexOffsets () = 0;
    00791
    00795   virtual void Invalidate () = 0;
    00796
    00800   virtual const char* GetName () const = 0;
    00801
    00807   virtual void AddSubset (const size_t subset) = 0;
    00808
    00812   virtual size_t GetSubset (const size_t index) const = 0;
    00813
    00817   virtual size_t GetSubsetCount () const = 0;
    00818 };
    00819
    00820
    00825 } // namespace Mesh
    00826 } // namespace CS
    00827
    00828 CS_DEPRECATED_METHOD_MSG("Use CS::Mesh::AnimatedMeshBoneInfluence instead")
    00829 typedef CS::Mesh::AnimatedMeshBoneInfluence csAnimatedMeshBoneInfluence;
    00830 CS_DEPRECATED_METHOD_MSG("Use CS::Mesh::iAnimatedMesh instead")
    00831 typedef CS::Mesh::iAnimatedMesh iAnimatedMesh;
    00832 CS_DEPRECATED_METHOD_MSG("Use CS::Mesh::iAnimatedMeshFactory instead")
    00833 typedef CS::Mesh::iAnimatedMeshFactory iAnimatedMeshFactory;
    00834 CS_DEPRECATED_METHOD_MSG("Use CS::Mesh::iAnimatedMeshSocketFactory instead")
    00835 typedef CS::Mesh::iAnimatedMeshSocketFactory iAnimatedMeshSocketFactory;
    00836 CS_DEPRECATED_METHOD_MSG("Use CS::Mesh::iAnimatedMeshSubMesh instead")
    00837 typedef CS::Mesh::iAnimatedMeshSubMesh iAnimatedMeshSubMesh;
    00838 CS_DEPRECATED_METHOD_MSG("Use CS::Mesh::iAnimatedMeshSubMeshFactory instead")
    00839 typedef CS::Mesh::iAnimatedMeshSubMeshFactory iAnimatedMeshFactorySubMesh;
    00840 CS_DEPRECATED_METHOD_MSG("Use CS::Mesh::iAnimatedMeshMorphTarget instead")
    00841 typedef CS::Mesh::iAnimatedMeshMorphTarget iAnimatedMeshMorphTarget;
    00842
    00843 #endif // __CS_IMESH_ANIMESH_H__