nuclear@0: #ifndef _OBJECTS_H_ nuclear@0: #define _OBJECTS_H_ nuclear@0: nuclear@0: #include nuclear@0: #include "3dengine.h" nuclear@0: #include "n3dmath.h" nuclear@0: #include "3dgeom.h" nuclear@0: #include "material.h" nuclear@0: #include "motion.h" nuclear@0: nuclear@0: class Object { nuclear@0: protected: nuclear@0: GraphicsContext *gc; nuclear@0: RenderParams rendp; nuclear@0: nuclear@0: TriMesh *mesh; nuclear@0: TriMesh **ShadowVolumes; nuclear@0: int ShadowCount; nuclear@0: bool CastShadows; nuclear@0: nuclear@0: Matrix4x4 WorldXForm; nuclear@0: // Matrix4x4 TransMat, RotMat, ScaleMat, GRotMat; nuclear@0: Matrix4x4 TextureMatrix; nuclear@0: bool UseTextureMatrix; nuclear@0: nuclear@0: bool AutoSetZWrite; nuclear@0: nuclear@0: void Render2TexUnits(); nuclear@0: void Render4TexUnits(); nuclear@0: void Render8TexUnits(); nuclear@0: nuclear@0: public: nuclear@0: std::string name; nuclear@0: Material material; nuclear@0: MotionController controller; nuclear@0: nuclear@0: Matrix4x4 TransMat, RotMat, ScaleMat, GRotMat; nuclear@0: nuclear@0: Object(GraphicsContext *gc, byte DetailLevels = 1); nuclear@0: ~Object(); nuclear@0: nuclear@0: TriMesh *GetTriMesh(); nuclear@0: nuclear@0: void ResetTransform(); nuclear@0: void ResetTranslation(); nuclear@0: void ResetRotation(); nuclear@0: void ResetGlobalRotation(); nuclear@0: void ResetScaling(); nuclear@0: nuclear@0: void Translate(float tx, float ty, float tz); nuclear@0: void Rotate(float rx, float ry, float rz); nuclear@0: void Rotate(const Vector3 &axis, float angle); nuclear@0: void Rotate(const Matrix4x4 &rot); nuclear@0: void GlobalRotate(float rx, float ry, float rz); nuclear@0: void GlobalRotate(const Vector3 &axis, float angle); nuclear@0: void GlobalRotate(const Matrix4x4 &rot); nuclear@0: void Scale(float sx, float sy, float sz); nuclear@0: nuclear@0: void SetTranslation(float tx, float ty, float tz); nuclear@0: void SetRotation(float rx, float ry, float rz); nuclear@0: void SetRotation(const Vector3 &axis, float angle); nuclear@0: void SetRotation(const Matrix4x4 &rot); nuclear@0: void SetGlobalRotation(float rx, float ry, float rz); nuclear@0: void SetGlobalRotation(const Vector3 &axis, float angle); nuclear@0: void SetGlobalRotation(const Matrix4x4 &rot); nuclear@0: void SetScaling(float sx, float sy, float sz); nuclear@0: nuclear@0: const Matrix4x4 GetWorldTransform() const; nuclear@0: nuclear@0: void SetTextureMatrix(Matrix4x4 mat); nuclear@0: Matrix4x4 GetTextureMatrix() const; nuclear@0: nuclear@0: // set render parameters nuclear@0: void SetVertexProgram(dword VertexProgram); nuclear@0: void SetPixelProgram(dword PixelProgram); nuclear@0: void SetShadingMode(ShadeMode smode); nuclear@0: void SetWriteZBuffer(bool enable); nuclear@0: void SetBlendFunc(BlendingFactor src, BlendingFactor dest); nuclear@0: void GetBlendFunc(BlendingFactor *src, BlendingFactor *dest); nuclear@0: nuclear@0: // about shadows nuclear@0: void CalculateShadows(const Light **lights, int LightCount); nuclear@0: TriMesh *GetShadowVolume(int light); nuclear@0: void SetShadowCasting(bool enable); nuclear@0: bool GetShadowCasting() const; nuclear@0: nuclear@0: void SetRenderStates(); nuclear@0: void Render(); nuclear@0: void RenderBare(); nuclear@0: nuclear@0: // generate geometry nuclear@0: void CreatePlane(float size, dword subdivisions); nuclear@0: void CreateCube(float size); nuclear@0: }; nuclear@0: nuclear@0: nuclear@0: #endif // _OBJECTS_H_