int main(int argc, char **argv) { // OSG init osgInit(argc,argv); // Set up Window TutorialWindow = createNativeWindow(); TutorialWindow->initWindow(); TutorialWindow->setDisplayCallback(display); TutorialWindow->setReshapeCallback(reshape); //Add Window Listener TutorialKeyListener TheKeyListener; TutorialWindow->addKeyListener(&TheKeyListener); TutorialMouseListener TheTutorialMouseListener; TutorialMouseMotionListener TheTutorialMouseMotionListener; TutorialWindow->addMouseListener(&TheTutorialMouseListener); TutorialWindow->addMouseMotionListener(&TheTutorialMouseMotionListener); // Create the SimpleSceneManager helper mgr = new SimpleSceneManager; // Tell the Manager what to manage mgr->setWindow(TutorialWindow); //Shader Material BlendChunkUnrecPtr ExampleBlendChunk = BlendChunk::create(); ExampleBlendChunk->setSrcFactor(GL_SRC_ALPHA); ExampleBlendChunk->setDestFactor(GL_ONE_MINUS_SRC_ALPHA); //Material Chunk MaterialChunkUnrecPtr ShaderMaterialChunk = MaterialChunk::create(); ShaderMaterialChunk->setAmbient(Color4f(0.4f,0.4f,0.4f,1.0f)); ShaderMaterialChunk->setDiffuse(Color4f(0.7f,0.7f,0.7f,1.0f)); ShaderMaterialChunk->setSpecular(Color4f(1.0f,1.0f,1.0f,1.0f)); //Shader Chunk SimpleSHLChunkUnrecPtr TheSHLChunk = SimpleSHLChunk::create(); TheSHLChunk->setVertexProgram(createSHLVertexProg()); TheSHLChunk->setFragmentProgram(createSHLFragProg()); //Color Parameter ShaderVariableVec4fUnrecPtr Color1Parameter = ShaderVariableVec4f::create(); Color1Parameter->setName("Color1"); Color1Parameter->setValue(Vec4f(0.0f,1.0f,0.0f,1.0f)); ShaderVariableVec4fUnrecPtr Color2Parameter = ShaderVariableVec4f::create(); Color2Parameter->setName("Color2"); Color2Parameter->setValue(Vec4f(1.0f,1.0f,1.0f,1.0f)); //Shader Parameter Chunk SHLParameterChunkUnrecPtr SHLParameters = SHLParameterChunk::create(); SHLParameters->getParameters().push_back(Color1Parameter); SHLParameters->getParameters().push_back(Color2Parameter); SHLParameters->setSHLChunk(TheSHLChunk); ChunkMaterialUnrecPtr ShaderMaterial = ChunkMaterial::create(); ShaderMaterial->addChunk(ShaderMaterialChunk); ShaderMaterial->addChunk(TheSHLChunk); ShaderMaterial->addChunk(SHLParameters); //Torus Node GeometryUnrecPtr TorusGeometry = makeTorusGeo(5.0f,20.0f, 32,32); TorusGeometry->setMaterial(ShaderMaterial); NodeUnrecPtr TorusNode = Node::create(); TorusNode->setCore(TorusGeometry); // Make Main Scene Node NodeUnrecPtr scene = Node::create(); scene->setCore(Group::create()); scene->addChild(TorusNode); mgr->setRoot(scene); // Show the whole Scene mgr->showAll(); //Create the Animations initAnimations(Color1Parameter, "value"); //Open Window Vec2f WinSize(TutorialWindow->getDesktopSize() * 0.85f); Pnt2f WinPos((TutorialWindow->getDesktopSize() - WinSize) *0.5); TutorialWindow->openWindow(WinPos, WinSize, "04ShaderAnimation"); //Main Loop TutorialWindow->mainLoop(); osgExit(); return 0; }
int main(int argc, char **argv) { // OSG init osgInit(argc,argv); { // Set up Window WindowEventProducerRecPtr TutorialWindow = createNativeWindow(); //Initialize Window TutorialWindow->initWindow(); SimpleSceneManager sceneManager; TutorialWindow->setDisplayCallback(boost::bind(display, &sceneManager)); TutorialWindow->setReshapeCallback(boost::bind(reshape, _1, &sceneManager)); // Tell the Manager what to manage sceneManager.setWindow(TutorialWindow); //Attach to events TutorialWindow->connectMousePressed(boost::bind(mousePressed, _1, &sceneManager)); TutorialWindow->connectMouseReleased(boost::bind(mouseReleased, _1, &sceneManager)); TutorialWindow->connectMouseDragged(boost::bind(mouseDragged, _1, &sceneManager)); TutorialWindow->connectMouseWheelMoved(boost::bind(mouseWheelMoved, _1, &sceneManager)); TutorialWindow->connectKeyPressed(boost::bind(keyPressed, _1, TutorialWindow.get())); //Shader Chunk SimpleSHLChunkUnrecPtr TheSHLChunk = SimpleSHLChunk::create(); TheSHLChunk->setVertexProgram(createSHLVertexProg()); TheSHLChunk->setFragmentProgram(createSHLFragProg()); //TheSHLChunk->addUniformVariable("Color1",Vec4f(0.0f,1.0f,0.0f,1.0f)); //TheSHLChunk->addUniformVariable("Color2",Vec4f(1.0f,1.0f,1.0f,1.0f)); //Shader Parameter Chunk SimpleSHLVariableChunkUnrecPtr SHLParameters = SimpleSHLVariableChunk::create(); //Color Parameter SHLParameters->addUniformVariable("Color1",Vec4f(0.0f,1.0f,0.0f,1.0f)); SHLParameters->addUniformVariable("Color2",Vec4f(1.0f,1.0f,1.0f,1.0f)); ChunkMaterialUnrecPtr ShaderMaterial = ChunkMaterial::create(); ShaderMaterial->addChunk(TheSHLChunk); ShaderMaterial->addChunk(SHLParameters); //Torus Node GeometryUnrecPtr TorusGeometry = makeTorusGeo(5.0f,20.0f, 32,32); TorusGeometry->setMaterial(ShaderMaterial); NodeUnrecPtr TorusNode = Node::create(); TorusNode->setCore(TorusGeometry); // Make Main Scene Node NodeUnrecPtr scene = Node::create(); scene->setCore(Group::create()); scene->addChild(TorusNode); sceneManager.setRoot(scene); // Show the whole Scene sceneManager.showAll(); //Create the Animations ShaderVariableVec4fUnrecPtr Color1Parameter; ShaderVariableVec4fUnrecPtr Color2Parameter; Color1Parameter = dynamic_cast<ShaderVariableVec4f*>(const_cast<ShaderVariable*>(SHLParameters->getVariables()->getVariable("Color1"))); Color2Parameter = dynamic_cast<ShaderVariableVec4f*>(const_cast<ShaderVariable*>(SHLParameters->getVariables()->getVariable("Color2"))); commitChanges(); AnimationUnrecPtr TheAnimation = setupAnimation(Color1Parameter, "value"); TheAnimation->attachUpdateProducer(TutorialWindow); TheAnimation->start(); //Open Window Vec2f WinSize(TutorialWindow->getDesktopSize() * 0.85f); Pnt2f WinPos((TutorialWindow->getDesktopSize() - WinSize) *0.5); TutorialWindow->openWindow(WinPos, WinSize, "04ShaderAnimation"); //Main Loop TutorialWindow->mainLoop(); } osgExit(); return 0; }