Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/graphics/importer/material.h @ 8376

Last change on this file since 8376 was 8376, checked in by bensch, 18 years ago

orxonox/trunk: no more seg-fault when copying a Texture

File size: 3.1 KB
RevLine 
[2842]1/*!
[7785]2 * @file material.h
3 * @brief Contains the Material Class that handles Material for 3D-Objects.
4 * @todo free SDL-surface when deleting Material.
5 * @todo delete imgNameWithPath after use creation.
6 */
[2842]7
[2776]8#ifndef _MATERIAL_H
9#define _MATERIAL_H
[4584]10#include "base_object.h"
[2804]11
[7785]12
[4584]13#if HAVE_CONFIG_H
14#include <config.h>
[3140]15#endif /* HAVE_CONFIG_H */
16
[7785]17#include <vector>
[6769]18#include "texture.h"
[8376]19#include "color.h"
[6769]20
[5405]21// FORWARD DECLARATIONS //
[3140]22
[2842]23//! Class to handle Materials.
[4584]24class Material : public BaseObject
[2776]25{
[7785]26  public:
27    Material (const std::string& mtlName = "");
28    virtual ~Material ();
[2778]29
[7785]30    Material& operator=(const Material& material);
[6622]31
[7785]32    bool select () const;
[8037]33    bool activateTextureUnit(unsigned int textureNumber);
34    static void unselect();
[2778]35
[7785]36    void setIllum (int illum);
37    int getIllumModel() const { return this->illumModel; };
[8376]38
[7785]39    void setDiffuse (float r, float g, float b);
40    void setAmbient (float r, float g, float b);
41    void setSpecular (float r, float g, float b);
42    void setShininess (float shini);
43    void setTransparency (float trans);
44    void setBlendFunc(GLenum sFactor, GLenum tFactor) { this->sFactor = sFactor; this->tFactor = tFactor; };
[2776]45
[8376]46    const Color& getDiffuseColor() const { return diffuse; };
[7785]47
48    // MAPPING //
[7788]49    void setDiffuseMap(const Texture& texture, unsigned int textureNumber = 0);
[7785]50    void setDiffuseMap(const std::string& dMap, GLenum target = GL_TEXTURE_2D, unsigned int textureNumber = 0);
51    void setSDLDiffuseMap(SDL_Surface *surface, GLenum target = GL_TEXTURE_2D, unsigned int textureNumber = 0);
[8037]52    void renderToTexture(unsigned int textureNumber, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
[7785]53
54    void setAmbientMap(const std::string& aMap, GLenum target = GL_TEXTURE_2D);
55    void setSpecularMap(const std::string& sMap, GLenum target = GL_TEXTURE_2D);
56    void setBump(const std::string& bump);
[7788]57    GLuint getDiffuseTexture(unsigned int i = 0) const { return (this->textures.size() > i)? this->textures[i].getTexture() : 0; };
[7785]58
59    static void addTexturePath(const std::string& pathName);
60
61  public:
62    static const GLenum glTextureArbs[];  //!< The Texture ARB's
63
[8316]64    static unsigned int getMaxTextureUnits();
[7785]65
[5866]66  private:
[7785]67    static const Material* selectedMaterial; //!< The currently selected material.
[6622]68
[7785]69    int              illumModel;       //!< The IlluminationModel is either flat or smooth.
[8376]70    Color            diffuse;          //!< The diffuse color of the Material. (also transparency.)
71    Color            ambient;          //!< The ambient color of the Material.
72    Color            specular;         //!< The specular color of the Material.
[7785]73    float            shininess;        //!< The shininess of the Material.
[8370]74    GLenum           sFactor;          //!< The Blending Factor for the Source.
75    GLenum           tFactor;          //!< The Blending Factor for the Destination.
[7785]76
[8370]77    std::vector<Texture> textures;     //!< An Array of Textures.
[7785]78
79    Texture*         ambientTexture;   //!< The ambient texture of the Material.
80    Texture*         specularTexture;  //!< The specular texture of the Material.
[8370]81};
[7785]82
[2776]83#endif
Note: See TracBrowser for help on using the repository browser.