1 #include "TestScene.hpp"
2 #include "mof/GraphicsDevice.hpp"
4 #include "mof/VertexBuffer.hpp"
5 #include "mof/AmbientLight.hpp"
6 #include "mof/MaterialBuilder.hpp"
7 #include "mof/Material.hpp"
8 #include "mof/Camera.hpp"
9 #include "mof/Texture.hpp"
10 #include "mof/MeshBuilder.hpp"
11 #include "mof/Graphics3D.hpp"
12 #include "mof/mofAnimations.hpp"
13 #include "mof/EventScheduler.hpp"
14 #include "mof/EventCondition.hpp"
15 #include "mof/Board.hpp"
16 #include "mof/Font.hpp"
17 #include "CharacterBoard.hpp"
19 #include <boost/bind.hpp>
22 #include "mof/Finalizer.hpp"
27 mof::AmbientLight* m_pLight;
28 mof::Camera* m_pCamera;
29 boost::shared_ptr<mof::Texture> m_pTexture;
30 std::vector<::CharacterBoard*> m_modelList;
31 mof::Graphics3D* m_pBox;
32 mof::EventScheduler* m_pScheduler;
33 mof::Animation<mof::Color4f>::Handler m_backgroundColor;
34 mof::FrameNumber m_backgroundColorFrame;
45 std::vector<mof::Animation<mof::Matrix3D>::Handler> handlerList;
48 std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[4];
49 keyFrames[0] = std::pair<mof::FrameNumber , mof::Vector3D>( 25 , mof::Vector3D( mof::deg2rad(-90) , 0 , 0));
50 keyFrames[1] = std::pair<mof::FrameNumber , mof::Vector3D>( 50 , mof::Vector3D( mof::deg2rad(-80) , 0 , 0));
51 keyFrames[2] = std::pair<mof::FrameNumber , mof::Vector3D>( 75 , mof::Vector3D( mof::deg2rad(-25) , 0 , 0));
52 keyFrames[3] = std::pair<mof::FrameNumber , mof::Vector3D>( 100 , mof::Vector3D( mof::deg2rad(0) , 0 , 0));
53 mof::Animation<mof::Matrix3D>::Handler handler(new mof::RotationAnimation3D(keyFrames[0] , keyFrames[3]));
54 handlerList.push_back(handler);
57 mof::Animation<mof::Matrix3D>::Handler handler(
58 mof::constantHandler(mof::Matrix3D::createTranslation(mof::Vector3D(0 , 0 , -4.5f)))
60 handlerList.push_back(handler);
63 std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[3];
64 keyFrames[0] = std::pair<mof::FrameNumber , mof::Vector3D>( 0 , mof::Vector3D( 0 , mof::deg2rad(70) , 0));
65 keyFrames[1] = std::pair<mof::FrameNumber , mof::Vector3D>( 130 , mof::Vector3D( 0 , mof::deg2rad(360) , 0));
66 mof::Animation<mof::Matrix3D>::Handler handler(new mof::RotationAnimation3D(keyFrames[0] , keyFrames[1]));
67 handler = mof::Animation<mof::Matrix3D>::Handler(new mof::LoopAnimation<mof::Matrix3D>(handler , 200));
68 handlerList.push_back(handler);
71 int size = handlerList.size();
72 handlerList.resize(size + 1);
74 mof::tstring title[] = { _T("
\82R") , _T("
\94N") , _T("
\91O") , _T("
\82É") , _T("
\8dÁ") , _T("
\90Ü") , _T("
\82µ") ,
75 _T("
\82½") , _T("
\82q") , _T("
\82o") , _T("
\82f") , _T("
\8aJ") , _T("
\94") , _T("
\82ð") , _T("
\8dÄ") , _T("
\8aJ") ,
76 _T("
\82µ") , _T("
\82Ä") , _T("
\82Ý") , _T("
\82é") };
78 for(int i = 0 ; i < 20 ; i++)
80 m_modelList.push_back(new ::CharacterBoard( title[i]));
82 mof::Animation<mof::Matrix3D>::Handler handler(
83 mof::constantHandler(mof::Matrix3D::createRotation(mof::Vector3D(0 , mof::deg2rad(-360.0f/20 * i) , 0)))
85 handlerList.at(size) = handler;
87 mof::Animation<mof::Matrix3D>::Handler handler(new mof::CascadingAnimation<mof::Matrix3D >(handlerList.front() , handlerList.back()));
88 m_modelList.at(i)->setWorldMatrix(handler);
93 mof::MeshBuilder meshBuilder( "model/demo/box.x");
94 m_pBox = meshBuilder.construct();
98 std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[2];
99 keyFrames[0] = std::pair<mof::FrameNumber , mof::Vector3D>( 0 , mof::Vector3D( 0 , 0 , 0));
100 keyFrames[1] = std::pair<mof::FrameNumber , mof::Vector3D>( 130 , mof::Vector3D( mof::deg2rad(360) , mof::deg2rad(360) , mof::deg2rad(360)));
101 mof::Animation<mof::Matrix3D>::Handler handler(new mof::RotationAnimation3D(keyFrames[0] , keyFrames[1]));
102 handler = mof::Animation<mof::Matrix3D>::Handler(new mof::LoopAnimation<mof::Matrix3D>(handler , 130));
103 handlerList.push_back(handler);
105 mof::Animation<mof::Matrix3D>::Handler handler(new mof::CascadingAnimation<mof::Matrix3D >(handlerList.front() , handlerList.back()));
106 m_pBox->setWorldMatrix(handler);
110 std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[2];
111 keyFrames[0] = std::pair<mof::FrameNumber , mof::Vector3D>( 0 , mof::Vector3D(0 , 10.5f , -5));
112 keyFrames[1] = std::pair<mof::FrameNumber , mof::Vector3D>( 130 , mof::Vector3D(0 , 1.5f , -10 ));
113 mof::Animation<mof::Vector3D>::Handler handler(new mof::KeyFrameAnimation<mof::Vector3D>(keyFrames[0] , keyFrames[1]));
114 m_pCamera->setEye(handler);
120 std::vector<mof::Animation<mof::Matrix3D>::Handler> handlerList;
121 mof::Animation<mof::Matrix3D>::Handler handler;
122 for(unsigned int i = 0 ; i < m_modelList.size() ; ++i){
124 mof::Matrix3D matrix = m_modelList.at(i)->getWorldMatrix();
127 mof::Vector3D a = mof::Vector3D(1 , 0 , 0) * matrix;
128 float rad = static_cast<float>(atan2( -a.x , -a.z));
129 std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[] = {
130 std::pair<mof::FrameNumber , mof::Vector3D>( 20 , mof::Vector3D(0 , 0 , 0) ) ,
131 std::pair<mof::FrameNumber , mof::Vector3D>( 50 , mof::Vector3D(0 , -rad , 0))
133 handler = mof::Animation<mof::Matrix3D>::Handler(new mof::RotationAnimation3D(keyFrames[0] , keyFrames[1]));
134 handlerList.push_back(handler);
138 handler = mof::constantHandler(matrix);
139 handlerList.push_back(handler);
144 float y = (i > 7) ? -1.0f : 0;
145 float x = (i > 7) ? i - 8.0f : i;
146 mof::Vector3D position(1.0f * x - 20 , y , -5);
147 std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[] = {
148 std::pair<mof::FrameNumber , mof::Vector3D>( 0 , mof::Vector3D(0 , 0 , 0) ) ,
149 std::pair<mof::FrameNumber , mof::Vector3D>( 50 , position - m_modelList.at(i)->getPosition())
151 handler = mof::Animation<mof::Matrix3D>::Handler(new mof::TranslationAnimation3D(keyFrames[0] , keyFrames[1]));
152 handlerList.push_back(handler);
154 handler = mof::Animation<mof::Matrix3D>::Handler(
155 new mof::CascadingAnimation<mof::Matrix3D , mof::Multiply<mof::Matrix3D>>(handlerList.front() , handlerList.back())
157 m_modelList.at(i)->setWorldMatrix(handler);
158 m_modelList.at(i)->setFinishColor(70 , 20);
159 m_modelList.at(i)->setFrameNumber(0);
165 mof::Vector3D eye = m_pCamera->getEye();
166 std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[] = {
167 std::pair<mof::FrameNumber , mof::Vector3D>( 0 , eye) ,
168 std::pair<mof::FrameNumber , mof::Vector3D>( 20 , eye) ,
169 std::pair<mof::FrameNumber , mof::Vector3D>( 60 , mof::Vector3D(-16 , 1.0f , eye.z + 1)) ,
170 std::pair<mof::FrameNumber , mof::Vector3D>( 70 , mof::Vector3D(-14 , -0.5f , eye.z - 8 ))
172 mof::Animation<mof::Vector3D>::Handler handler(new mof::KeyFrameAnimation<mof::Vector3D>(keyFrames[0] , keyFrames[3]));
173 m_pCamera->setEye(handler);
177 std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[] = {
178 std::pair<mof::FrameNumber , mof::Vector3D>( 0 , mof::Vector3D(0 , 0 , 0)) ,
179 std::pair<mof::FrameNumber , mof::Vector3D>( 20 , mof::Vector3D(0 , 0 , 0)) ,
180 std::pair<mof::FrameNumber , mof::Vector3D>( 60 , mof::Vector3D(-14 , 0.0f , 0 ))
182 mof::Animation<mof::Vector3D>::Handler handler(new mof::KeyFrameAnimation<mof::Vector3D>(keyFrames[0] , keyFrames[2]));
183 m_pCamera->setCenter(handler);
185 m_pCamera->setFrameNumber(0);
188 std::pair<mof::FrameNumber , mof::Color4f> keyFrames[] = {
189 std::pair<mof::FrameNumber , mof::Color4f>( 70 , mof::Color4f(mof::createColor(0 , 20 , 55)) ) ,
190 std::pair<mof::FrameNumber , mof::Color4f>( 90 , mof::Color4f(mof::createColor(255 , 255 , 255)) )
192 m_backgroundColor = mof::Animation<mof::Color4f>::Handler(new mof::KeyFrameAnimation<mof::Color4f>(keyFrames[0] , keyFrames[1]));
193 m_backgroundColorFrame = 0;
198 std::vector<mof::Animation<mof::Matrix3D>::Handler> handlerList;
199 mof::Animation<mof::Matrix3D>::Handler handler;
203 std::pair<mof::FrameNumber , mof::Vector3D> keyFrames[] = {
204 std::pair<mof::FrameNumber , mof::Vector3D>( 0 , mof::Vector3D(0 , mof::deg2rad(270) , 0) ) ,
205 std::pair<mof::FrameNumber , mof::Vector3D>( 40 , mof::Vector3D(0 , mof::deg2rad(360) , 0))
207 handler = mof::Animation<mof::Matrix3D>::Handler(new mof::RotationAnimation3D(keyFrames[0] , keyFrames[1]));
208 handlerList.push_back(handler);
210 handler = mof::constantHandler(mof::Matrix3D::createScaling(mof::Vector3D(4 , 1 , 1)));
211 handlerList.push_back(handler);
212 handler = mof::constantHandler(mof::Matrix3D::createTranslation(mof::Vector3D(-10 , -2 , -5)));
213 handlerList.push_back(handler);
214 handler = mof::Animation<mof::Matrix3D>::Handler(
215 new mof::CascadingAnimation<mof::Matrix3D , mof::Multiply<mof::Matrix3D>>(handlerList.front() , handlerList.back())
217 ::CharacterBoard* pPartBoard = new ::CharacterBoard( m_part);
218 pPartBoard->setWorldMatrix(handler);
219 pPartBoard->setPartColor(0 , 1);
220 m_modelList.push_back(pPartBoard);
235 m_backgroundColorFrame = 0;
236 m_part = _T("part7");
240 mof::GraphicsDevice::lightEnable(true);
241 m_pLight = new mof::AmbientLight( mof::Color4f(mof::createColor(255 , 255 , 255)));
243 m_pCamera = new mof::Camera(mof::Vector3D(0 , 0.5f , -10) , mof::Vector3D(0 , 0 , 0) , mof::Vector3D(0 , 1 , 0));
245 mof::Animation<mof::Color4f>::Handler(mof::constantHandler(mof::Color4f(mof::createColor(0 , 20 , 55))));
247 m_pScheduler = new mof::EventScheduler();
248 m_pScheduler->addEvent( 125 , &::TestScene::showTitle );
249 m_pScheduler->addEvent( 125+70 , &::TestScene::addPart );
257 for(std::vector<::CharacterBoard*>::iterator itr = m_modelList.begin() ;
258 itr != m_modelList.end() ;
272 for(std::vector<::CharacterBoard*>::iterator itr = m_modelList.begin() ;
273 itr != m_modelList.end() ;
278 m_pScheduler->update();
279 m_pCamera->nextFrame();
280 m_backgroundColorFrame++;
287 mof::GraphicsDevice::lightEnable(true);
288 //m_pGraphics->setZBuffer(false);
289 mof::GraphicsDevice::setViewTransform(m_pCamera->getViewMatrix());
290 mof::GraphicsDevice::clearRenderTarget(m_backgroundColor->getValue(m_backgroundColorFrame).toColorCode());
291 mof::GraphicsDevice::clearZBuffer();
292 mof::GraphicsDevice::setAlphaBlendingMode(mof::GraphicsDevice::BLENDING_MODE_ALPHA);
295 mof::GraphicsDevice::lightEnable(false);
296 std::list<mof::Board*> boardList;
298 for(std::vector<::CharacterBoard*>::iterator itr = m_modelList.begin() ;
299 itr != m_modelList.end() ;
301 (*itr)->append(boardList);
304 for(std::list<mof::Board*>::iterator itr = boardList.begin() ;
305 itr != boardList.end() ;
314 } // namespace TestScene