root/OpenSceneGraph/trunk/include/osgFX/SpecularHighlights @ 13041

Revision 13041, 4.3 kB (checked in by robert, 2 years ago)

Ran script to remove trailing spaces and tabs

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2 *
3 * This library is open source and may be redistributed and/or modified under
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version.  The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 * OpenSceneGraph Public License for more details.
12*/
13//osgFX - Copyright (C) 2003 Marco Jez
14
15#ifndef OSGFX_SPECULARHIGHLIGHTS_
16#define OSGFX_SPECULARHIGHLIGHTS_
17
18#include <osgFX/Export>
19#include <osgFX/Effect>
20
21namespace osgFX
22{
23
24    /**
25      This effect applies additive specular highlights at fragment level (instead
26     of OpenGL's vertex-level lighting) by using a cube map and reflective texgen.
27     A texture matrix is computed to rotate the cube map automatically; this makes
28     the specular effect consistent with respect to view direction and light position.
29     The user can choose which light should be used to compute the texture matrix.
30     This effect requires the GL_ARB_texture_env_add extension and one of the cube map
31     extensions (GL_EXT_texture_cube_map, GL_ARB_texture_cube_map or OpenGL v1.3).
32     */
33    class OSGFX_EXPORT SpecularHighlights: public Effect {
34    public:
35        SpecularHighlights();
36        SpecularHighlights(const SpecularHighlights& copy, const osg::CopyOp& copyop = osg::CopyOp::SHALLOW_COPY);
37
38        META_Effect(osgFX, SpecularHighlights,
39
40            "Specular Highlights",
41
42            "This effect applies additive specular highlights at fragment level (instead "
43            "of OpenGL's vertex-level lighting) by using a cube map and reflective texgen. "
44            "A texture matrix is computed to rotate the cube map automatically; this makes "
45            "the specular effect consistent with respect to view direction and light position. "
46            "The user can choose which light should be used to compute the texture matrix.\n"
47            "This effect requires the GL_ARB_texture_env_add extension and one of the cube map "
48            "extensions (GL_EXT_texture_cube_map, GL_ARB_texture_cube_map or OpenGL v1.3).",
49
50            "Marco Jez");
51
52
53        /** get the OpenGL light number */
54        inline int getLightNumber() const;
55
56        /** set the OpenGL light number that will be used in lighting computations */
57        inline void setLightNumber(int n);
58
59        /** get the texture unit number */
60        inline int getTextureUnit() const;
61
62        /** set the texture unit that will be used to apply the cube map */
63        inline void setTextureUnit(int n);
64
65        /** get the specular color */
66        inline const osg::Vec4& getSpecularColor() const;
67
68        /** set the specular color */
69        inline void setSpecularColor(const osg::Vec4& color);
70
71        /** get the specular exponent */
72        inline float getSpecularExponent() const;
73
74        /** set the specular exponent */
75        inline void setSpecularExponent(float e);
76
77    protected:
78        virtual ~SpecularHighlights() {}
79        SpecularHighlights& operator=(const SpecularHighlights&) { return *this; }
80
81        bool define_techniques();
82
83    private:
84        int _lightnum;
85        int _unit;
86        osg::Vec4 _color;
87        float _sexp;
88    };
89
90    // INLINE METHODS
91
92    inline int SpecularHighlights::getLightNumber() const
93    {
94        return _lightnum;
95    }
96
97    inline void SpecularHighlights::setLightNumber(int n)
98    {
99        _lightnum = n;
100        dirtyTechniques();
101    }
102
103    inline int SpecularHighlights::getTextureUnit() const
104    {
105        return _unit;
106    }
107
108    inline void SpecularHighlights::setTextureUnit(int n)
109    {
110        _unit = n;
111        dirtyTechniques();
112    }
113
114    inline const osg::Vec4& SpecularHighlights::getSpecularColor() const
115    {
116        return _color;
117    }
118
119    inline void SpecularHighlights::setSpecularColor(const osg::Vec4& color)
120    {
121        _color = color;
122        dirtyTechniques();
123    }
124
125    inline float SpecularHighlights::getSpecularExponent() const
126    {
127        return _sexp;
128    }
129
130    inline void SpecularHighlights::setSpecularExponent(float e)
131    {
132        _sexp = e;
133        dirtyTechniques();
134    }
135
136}
137
138#endif
Note: See TracBrowser for help on using the browser.