/*************************************************************************** File: Renderer.hpp Created: 03/01/2001 Author: Maxim Garber Computer Science Department University of North Carolina - Chapel Hill garber@cs.unc.edu Description: ----------------------------------------------------------------------------. Copyright 2001 Maxim Garber UNC Motion Planning Research Group *****************************************************************************/ #include #include #include #include "tga.hpp" #include "trimodel.hpp" #include /*--------------------------------------------------------------------------- Constants ----------------------------------------------------------------------------*/ #define FILE_NAME_LENGTH 20 /*--------------------------------------------------------------------------- Types ----------------------------------------------------------------------------*/ struct RenderState{ // texture int _texHeight; int _texWidth; int _texChannels; GLuint _texName; GLubyte* _texture; // OpenGL texture state parameters std::vector _paramNames; std::vector _paramValues; }; typedef std::vector TriBucket; typedef std::vector TriBucketArray; typedef std::vector RenderStateArray; class Renderer{ public: /*--------------------------------------------------------------------------- Constructors ----------------------------------------------------------------------------*/ Renderer(){}; ~Renderer(){}; void Initialize(const char* renderFile); /*--------------------------------------------------------------------------- Setting Render State Parameters ----------------------------------------------------------------------------*/ void AddTexture(GLubyte* texture, GLuint Width, GLuint Height, GLuint Channels, int renderState); void AddTexture(const char* textureFile, int renderState); void SetParameter(GLenum paramName, GLuint paramValue, int renderState); void CompileRenderStates(); void SetRenderState(int renderState); /*--------------------------------------------------------------------------- Setting Lighting and Camera Parameters ----------------------------------------------------------------------------*/ void SetLightPosition(float lightPosition[4]); void SetCameraPosition(float cameraPosition[3]); /*--------------------------------------------------------------------------- Rendering ----------------------------------------------------------------------------*/ void Begin(); void RenderTriangle(Tri tri); void End(); protected: private: // stylized rendering RenderStateArray _pRenderStates; int _numRenderStates; // triangle buckets for sorting by render state TriBucketArray _triangles; /*--------------------------------------------------------------------------- Lights and Camera ----------------------------------------------------------------------------*/ float _lightPosition[4]; float _cameraPosition[3]; /*--------------------------------------------------------------------------- Render State Decision Function ----------------------------------------------------------------------------*/ int _lastState; int _SelectRenderState(Tri Tri){return _lastState++ % _numRenderStates;} };