OSDN Git Service

rm latex/
[moflib/moflib.git] / oldmof / MaterialBuilder.cpp
1 #include "mof/MaterialBuilder.hpp"
2 #include "mof/Material.hpp"
3 #include "mof/private/GraphicsDeviceImpl.hpp"
4 #include "mof/Constant.hpp"
5
6 struct mof::MaterialBuilder::Impl{
7
8         Impl(
9                 const mof::Animation<mof::Color4f>::Handler& ambient_ ,
10                 const mof::Animation<mof::Color4f>::Handler& diffuse_ ,
11                 const mof::Animation<mof::Color4f>::Handler& specular_ ,
12                 const mof::Animation<float>::Handler& specularPower_ ,
13                 const mof::Animation<mof::Color4f>::Handler& emissive_)
14         : diffuse(diffuse_) , ambient(ambient_) , specular(specular_) ,
15         specularPower(specularPower_) , emissive(emissive_) , pMaterial(NULL) , frame(0) {
16         }
17
18         ~Impl(){
19                 delete pMaterial;
20         }
21
22         mof::Material* pMaterial;
23         FrameNumber frame;
24         mof::Animation<mof::Color4f>::Handler diffuse;
25         mof::Animation<mof::Color4f>::Handler ambient;
26         mof::Animation<mof::Color4f>::Handler specular;
27         mof::Animation<float>::Handler specularPower;
28         mof::Animation<mof::Color4f>::Handler emissive;
29
30         
31 };
32
33
34
35         
36 mof::MaterialBuilder::MaterialBuilder( )
37 : m_pImpl(new Impl( 
38                   mof::makeConstantHandler(mof::Color4f(0 , 0 , 0)) ,
39                   mof::makeConstantHandler(mof::Color4f(0 , 0 , 0)) ,
40                   mof::makeConstantHandler(mof::Color4f(0 , 0 , 0)) ,
41                   mof::makeConstantHandler(0.0f) , 
42                   mof::makeConstantHandler(mof::Color4f(0 , 0 , 0)) 
43                   ) )
44 {
45         m_pImpl->pMaterial = new Material;
46 }
47
48
49 mof::MaterialBuilder::MaterialBuilder( mof::Color4f ambient )
50 : m_pImpl(new Impl( 
51                   mof::makeConstantHandler(ambient) ,
52                   mof::makeConstantHandler(mof::Color4f(0 , 0 , 0)) ,
53                   mof::makeConstantHandler(mof::Color4f(0 , 0 , 0)) ,
54                   mof::makeConstantHandler(0.0f) , 
55                   mof::makeConstantHandler(mof::Color4f(0 , 0 , 0)) ))
56 {
57         m_pImpl->pMaterial = new Material;
58         construct();
59 }
60
61
62 mof::MaterialBuilder::MaterialBuilder( mof::Color4f ambient , mof::Color4f diffuse , 
63                                                                            mof::Color4f specular , float power , mof::Color4f emissive )
64 : m_pImpl(new Impl(
65                   mof::makeConstantHandler(ambient) ,
66                   mof::makeConstantHandler(diffuse) ,
67                   mof::makeConstantHandler(specular) ,
68                   mof::makeConstantHandler(power) , 
69                   mof::makeConstantHandler(emissive) ))
70 {
71         m_pImpl->pMaterial = new Material;
72         construct();
73 }
74
75 mof::MaterialBuilder::MaterialBuilder(
76                         const mof::Animation<mof::Color4f>::Handler& ambient_ , 
77                         const mof::Animation<mof::Color4f>::Handler& diffuse_ ,
78                         const mof::Animation<mof::Color4f>::Handler& specular_ ,
79                         const mof::Animation<float>::Handler& power_ ,
80                         const mof::Animation<mof::Color4f>::Handler& emissive_ )
81 : m_pImpl(new Impl( ambient_ , diffuse_ , specular_ , power_ , emissive_ ))
82 {
83         m_pImpl->pMaterial = new Material;
84         construct();
85 }
86
87 mof::MaterialBuilder::~MaterialBuilder(){
88 }
89
90 void mof::MaterialBuilder::setFrameNumber(mof::FrameNumber frame){
91         m_pImpl->frame = frame;
92 }
93
94 void mof::MaterialBuilder::nextFrame(){
95         setFrameNumber(m_pImpl->frame + 1 );
96 }
97
98 void mof::MaterialBuilder::prevFrame(){
99         if(m_pImpl->frame > 0)setFrameNumber(m_pImpl->frame - 1);
100 }
101
102
103
104 mof::Color4f mof::MaterialBuilder::getDiffuseColor() const{
105         return m_pImpl->diffuse->getValue(m_pImpl->frame);
106 }
107
108 mof::Color4f mof::MaterialBuilder::getAmbientColor() const{
109         return m_pImpl->ambient->getValue(m_pImpl->frame);
110 }
111
112 mof::Color4f mof::MaterialBuilder::getSpecularColor() const{
113         return m_pImpl->specular->getValue(m_pImpl->frame);
114 }
115
116 mof::Color4f mof::MaterialBuilder::getEmissiveColor() const{
117         return m_pImpl->emissive->getValue(m_pImpl->frame);
118 }
119
120 float mof::MaterialBuilder::getSpecularPower() const{
121         return m_pImpl->specularPower->getValue(m_pImpl->frame);
122 }
123
124
125 const mof::Material& mof::MaterialBuilder::construct() const{
126         
127         m_pImpl->pMaterial->diffuseColor = m_pImpl->diffuse->getValue(m_pImpl->frame);
128         m_pImpl->pMaterial->ambientColor = m_pImpl->ambient->getValue(m_pImpl->frame);
129         m_pImpl->pMaterial->specularColor = m_pImpl->specular->getValue(m_pImpl->frame);
130         m_pImpl->pMaterial->power = m_pImpl->specularPower->getValue(m_pImpl->frame);
131         m_pImpl->pMaterial->emissiveColor = m_pImpl->emissive->getValue(m_pImpl->frame);
132
133         return *(m_pImpl->pMaterial);
134 }