|
mesh.h00001 /* 00002 Copyright (C) 2000-2001 by Jorrit Tyberghein 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 __IENGINE_MESH_H__ 00020 #define __IENGINE_MESH_H__ 00021 00022 #include "csutil/scf.h" 00023 #include "csgeom/box.h" 00024 #include "iutil/eventh.h" 00025 #include "iutil/comp.h" 00026 #include "ivideo/graph3d.h" 00027 00028 struct iMeshObject; 00029 struct iCamera; 00030 struct iMeshObjectFactory; 00031 struct iMeshWrapper; 00032 struct iMeshList; 00033 struct iMeshFactoryList; 00034 class csMeshWrapper; 00035 class csMeshFactoryWrapper; 00036 struct iMeshFactoryWrapper; 00037 struct iRenderView; 00038 struct iMovable; 00039 struct iLight; 00040 struct iObject; 00041 class csFlags; 00042 00050 #define CS_ENTITY_CONVEX 1 00051 00059 #define CS_ENTITY_DETAIL 2 00060 00066 #define CS_ENTITY_CAMERA 4 00067 00073 #define CS_ENTITY_INVISIBLE 8 00074 00080 #define CS_ENTITY_NOSHADOWS 16 00081 00087 #define CS_ENTITY_NOLIGHTING 32 00088 00089 SCF_VERSION (iMeshDrawCallback, 0, 0, 1); 00090 00099 struct iMeshDrawCallback : public iBase 00100 { 00102 virtual bool BeforeDrawing (iMeshWrapper* spr, iRenderView* rview) = 0; 00103 }; 00104 00105 00106 SCF_VERSION (iMeshWrapper, 0, 1, 18); 00107 00120 struct iMeshWrapper : public iBase 00121 { 00123 virtual csMeshWrapper* GetPrivateObject () = 0; 00125 virtual iObject *QueryObject () = 0; 00126 00128 virtual iMeshObject* GetMeshObject () const = 0; 00130 virtual void SetMeshObject (iMeshObject*) = 0; 00131 00133 virtual iMeshFactoryWrapper *GetFactory () const = 0; 00135 virtual void SetFactory (iMeshFactoryWrapper* factory) = 0; 00136 00142 virtual void DeferUpdateLighting (int flags, int num_lights) = 0; 00143 00153 virtual void UpdateLighting (iLight** lights, int num_lights) = 0; 00154 00162 virtual iMovable* GetMovable () const = 0; 00163 00176 virtual void PlaceMesh () = 0; 00177 00187 virtual int HitBeamBBox (const csVector3& start, const csVector3& end, 00188 csVector3& isect, float* pr) = 0; 00189 00194 virtual bool HitBeamOutline (const csVector3& start, 00195 const csVector3& end, csVector3& isect, float* pr) = 0; 00196 00201 virtual bool HitBeamObject (const csVector3& start, const csVector3& end, 00202 csVector3& isect, float* pr) = 0; 00207 virtual bool HitBeam (const csVector3& start, const csVector3& end, 00208 csVector3& isect, float* pr) = 0; 00209 00218 virtual void SetDrawCallback (iMeshDrawCallback* cb) = 0; 00219 00221 virtual iMeshDrawCallback* GetDrawCallback () const = 0; 00222 00239 virtual void SetRenderPriority (long rp) = 0; 00243 virtual long GetRenderPriority () const = 0; 00244 00258 virtual csFlags& GetFlags () = 0; 00259 00270 virtual void SetZBufMode (csZBufMode mode) = 0; 00274 virtual csZBufMode GetZBufMode () const = 0; 00275 00285 virtual void HardTransform (const csReversibleTransform& t) = 0; 00286 00292 virtual void GetWorldBoundingBox (csBox3& cbox) = 0; 00293 00299 virtual void GetTransformedBoundingBox (const csReversibleTransform& trans, 00300 csBox3& cbox) = 0; 00301 00307 virtual float GetScreenBoundingBox (iCamera* camera, csBox2& sbox, 00308 csBox3& cbox) = 0; 00309 00313 virtual iMeshList* GetChildren () = 0; 00318 virtual iMeshWrapper* GetParentContainer () = 0; 00323 virtual void SetParentContainer (iMeshWrapper *) = 0; 00324 00326 virtual void GetRadius (csVector3& rad, csVector3& cent) const = 0; 00327 00334 virtual void Draw (iRenderView* rview) = 0; 00335 00339 virtual bool WantToDie () = 0; 00340 }; 00341 00342 SCF_VERSION (iMeshFactoryWrapper, 0, 1, 6); 00343 00355 struct iMeshFactoryWrapper : public iBase 00356 { 00358 virtual iObject *QueryObject () = 0; 00360 virtual iMeshObjectFactory* GetMeshObjectFactory () const = 0; 00362 virtual void SetMeshObjectFactory (iMeshObjectFactory* fact) = 0; 00372 virtual void HardTransform (const csReversibleTransform& t) = 0; 00377 virtual iMeshWrapper* CreateMeshWrapper () = 0; 00378 00383 virtual iMeshFactoryWrapper* GetParentContainer () const = 0; 00388 virtual void SetParentContainer (iMeshFactoryWrapper *p) = 0; 00389 00393 virtual iMeshFactoryList* GetChildren () = 0; 00394 00398 virtual csReversibleTransform& GetTransform () = 0; 00399 00403 virtual void SetTransform (const csReversibleTransform& tr) = 0; 00404 }; 00405 00406 SCF_VERSION (iMeshList, 0, 0, 1); 00407 00411 struct iMeshList : public iBase 00412 { 00414 virtual int GetCount () const = 0; 00415 00417 virtual iMeshWrapper *Get (int n) const = 0; 00418 00420 virtual int Add (iMeshWrapper *obj) = 0; 00421 00423 virtual bool Remove (iMeshWrapper *obj) = 0; 00424 00426 virtual bool Remove (int n) = 0; 00427 00429 virtual void RemoveAll () = 0; 00430 00432 virtual int Find (iMeshWrapper *obj) const = 0; 00433 00435 virtual iMeshWrapper *FindByName (const char *Name) const = 0; 00436 }; 00437 00438 SCF_VERSION (iMeshFactoryList, 0, 0, 1); 00439 00443 struct iMeshFactoryList : public iBase 00444 { 00446 virtual int GetCount () const = 0; 00447 00449 virtual iMeshFactoryWrapper *Get (int n) const = 0; 00450 00452 virtual int Add (iMeshFactoryWrapper *obj) = 0; 00453 00455 virtual bool Remove (iMeshFactoryWrapper *obj) = 0; 00456 00458 virtual bool Remove (int n) = 0; 00459 00461 virtual void RemoveAll () = 0; 00462 00464 virtual int Find (iMeshFactoryWrapper *obj) const = 0; 00465 00467 virtual iMeshFactoryWrapper *FindByName (const char *Name) const = 0; 00468 }; 00469 00470 #endif // __IENGINE_MESH_H__ 00471 Generated for Crystal Space by doxygen 1.2.5 written by Dimitri van Heesch, ©1997-2000 |