00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __IENGINE_POLYGON_H__
00020 #define __IENGINE_POLYGON_H__
00021
00022 #include "csutil/scf.h"
00023 #include "csgeom/plane3.h"
00024 #include "csutil/flags.h"
00025
00026 struct iMaterialHandle;
00027 struct iMaterialWrapper;
00028 struct iPolygon3D;
00029 struct iPolyTxtPlane;
00030 struct iPolygonTexture;
00031 struct iLight;
00032 struct iLightMap;
00033 struct iPortal;
00034 struct iSector;
00035 struct iThingState;
00036 struct iPolyTexType;
00037 struct iObject;
00038
00039 class csPolygon3D;
00040 class csVector3;
00041 class csVector2;
00042 class csMatrix3;
00043 class csColor;
00044
00049 #define CS_POLY_LIGHTING 0x00000001
00050
00054 #define CS_POLY_COLLDET 0x00000002
00055
00056
00057 SCF_VERSION (iPolygon3D, 0, 1, 14);
00058
00062 struct iPolygon3D : public iBase
00063 {
00065 virtual csPolygon3D *GetPrivateObject () = 0;
00066
00068 virtual iObject *QueryObject() = 0;
00073 virtual iThingState *GetParent () = 0;
00075 virtual iLightMap *GetLightMap () = 0;
00077 virtual iPolygonTexture *GetTexture () = 0;
00079 virtual iMaterialHandle *GetMaterialHandle () = 0;
00081 virtual void SetMaterial (iMaterialWrapper* mat) = 0;
00083 virtual iMaterialWrapper* GetMaterial () = 0;
00084
00086 virtual int GetVertexCount () = 0;
00088 virtual int* GetVertexIndices () = 0;
00090 virtual const csVector3 &GetVertex (int idx) const = 0;
00092 virtual const csVector3 &GetVertexW (int idx) const = 0;
00094 virtual const csVector3 &GetVertexC (int idx) const = 0;
00096 virtual int CreateVertex (int idx) = 0;
00098 virtual int CreateVertex (const csVector3 &iVertex) = 0;
00099
00101 virtual int GetAlpha () = 0;
00108 virtual void SetAlpha (int iAlpha) = 0;
00109
00111 virtual void CreatePlane (const csVector3 &iOrigin,
00112 const csMatrix3 &iMatrix) = 0;
00114 virtual bool SetPlane (const char *iName) = 0;
00115
00117 virtual csFlags& GetFlags () = 0;
00118
00120 virtual void SetLightingMode (bool iGouraud) = 0;
00121
00127 virtual iPortal* CreateNullPortal () = 0;
00129 virtual iPortal *CreatePortal (iSector *iTarget) = 0;
00133 virtual iPortal* GetPortal () = 0;
00134
00139 virtual void SetTextureSpace (
00140 const csVector3& p1, const csVector2& uv1,
00141 const csVector3& p2, const csVector2& uv2,
00142 const csVector3& p3, const csVector2& uv3) = 0;
00143
00159 virtual void SetTextureSpace (const csVector3& v_orig,
00160 const csVector3& v1, float l1) = 0;
00161
00166 virtual void SetTextureSpace (
00167 const csVector3& v_orig,
00168 const csVector3& v1, float len1,
00169 const csVector3& v2, float len2) = 0;
00170
00175 virtual void SetTextureSpace (csMatrix3 const&, csVector3 const&) = 0;
00176
00180 virtual void SetTextureSpace (iPolyTxtPlane* plane) = 0;
00181
00188 virtual void SetTextureType (int type) = 0;
00194 virtual void CopyTextureType (iPolygon3D* other_polygon) = 0;
00195
00199 virtual int GetTextureType () = 0;
00200
00202 virtual const csPlane3& GetWorldPlane () = 0;
00204 virtual const csPlane3& GetObjectPlane () = 0;
00206 virtual const csPlane3& GetCameraPlane () = 0;
00207
00211 virtual bool IsTransparent () = 0;
00212
00216 virtual float GetCosinusFactor () = 0;
00220 virtual void SetCosinusFactor (float cosfact) = 0;
00224 virtual iPolyTexType* GetPolyTexType () = 0;
00225
00240 virtual void UpdateVertexLighting (iLight* light, const csColor& lcol,
00241 bool dynamic, bool reset) = 0;
00246 virtual unsigned long GetPolygonID () = 0;
00247
00252 virtual bool IntersectSegment (const csVector3& start, const csVector3& end,
00253 csVector3& isect, float* pr = NULL) = 0;
00254
00262 virtual bool IntersectRay (const csVector3& start, const csVector3& end) = 0;
00263
00271 virtual bool IntersectRayNoBackFace (const csVector3& start,
00272 const csVector3& end) = 0;
00273
00281 virtual bool IntersectRayPlane (const csVector3& start, const csVector3& end,
00282 csVector3& isect) = 0;
00283
00288 virtual bool PointOnPolygon (const csVector3& v) = 0;
00289 };
00290
00291 SCF_VERSION (iPolygonTexture, 1, 0, 0);
00292
00297 struct iPolygonTexture : public iBase
00298 {
00300 virtual iMaterialHandle *GetMaterialHandle () = 0;
00302 virtual float GetFDU () = 0;
00304 virtual float GetFDV () = 0;
00306 virtual int GetWidth () = 0;
00308 virtual int GetHeight () = 0;
00311 virtual int GetShiftU () = 0;
00312
00314 virtual int GetIMinU () = 0;
00316 virtual int GetIMinV () = 0;
00318 virtual void GetTextureBox (float& fMinU, float& fMinV,
00319 float& fMaxU, float& fMaxV) = 0;
00321 virtual int GetOriginalWidth () = 0;
00322
00324 virtual iPolygon3D *GetPolygon () = 0;
00326 virtual bool DynamicLightsDirty () = 0;
00333 virtual bool RecalculateDynamicLights () = 0;
00334
00336 virtual iLightMap *GetLightMap () = 0;
00338 virtual int GetLightCellSize () = 0;
00340 virtual int GetLightCellShift () = 0;
00341
00343 virtual void *GetCacheData (int idx) = 0;
00345 virtual void SetCacheData (int idx, void *d) = 0;
00346 };
00347
00348 #endif // __IENGINE_POLYGON_H__