OpenSceneGraph: рдПрдХ OpenGL рд╕реНрдЯреЗрдЯ рдорд╢реАрди рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рдирд╛

рдЫрд╡рд┐

рдкрд░рд┐рдЪрдп


рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдЬрдм рд░реЗрдВрдбрд░рд┐рдВрдЧ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдУрдкрдирдЧреЗрд▓ рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдПрдХ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕реНрдЯреЗрдЯ рд╕реНрдЯреЗрдЯреНрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд, рд╕рд╛рдордЧреНрд░реА, рдмрдирд╛рд╡рдЯ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдореЛрдб, glEnable () рдФрд░ glDisable () рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдЪрд╛рд▓реВ рдФрд░ рдмрдВрджред рдЬрдм рдХреЛрдИ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдпрд╣ рддрдм рддрдХ рдкреНрд░рднрд╛рд╡ рдореЗрдВ рд░рд╣рддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдЗрд╕реЗ рдмрджрд▓ рдирд╣реАрдВ рджреЗрддрд╛ред OpenGL рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд┐рд╕реА рднреА рд╕рдордп рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдФрд░ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреЗрдЯ рд╕реНрдЯреИрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИред рд╕реНрдЯреЗрдЯ рдорд╢реАрди рдбреЗрд╡рд▓рдкрд░ рдХреЛ рд╡рд░реНрддрдорд╛рди рдкрд░ рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рджреЗрддреА рд╣реИ рдФрд░ рд╕реНрдЯреИрдХ рдкрд░ рд╕рд╣реЗрдЬреЗ рдЧрдП рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕реНрдЯреЗрдЯреНрд╕ рджреЗрддреА рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдУрдПрд╕рдЬреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдУрдПрд╕рдЬреАрдПрд▓ рд╕реНрдЯреЗрдЯ рдорд╢реАрди рдХреЛ рдУрдПрд╕рдЬреА :: рд╕реНрдЯреЗрдЯрд╕реЗрдЯ рдХреНрд▓рд╛рд╕ рджреНрд╡рд╛рд░рд╛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдЯреЗрдЯ рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рджреГрд╢реНрдп рдЧреНрд░рд╛рдл рдХреЛ рдЯреНрд░реИрд╡рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред

Osg рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг :: StateSet рд╡рд░реНрдЧ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕реНрдЯреЗрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕рдмрд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ osg :: рдиреЛрдб рджреГрд╢реНрдп рдиреЛрдбреНрд╕ рдФрд░ osg рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ :: setStateSet () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реЗрдЦреАрдп рдЬреНрдпрд╛рдорд┐рддреАрдп рд╡рд╕реНрддреБрдПрдВ

osg::StateSet *stateset = new osg::StateSet; node->setStateSet(stateset); 

рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ getOrCreateStateSet () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рд╕рд╣реА рд╕реНрдерд┐рддрд┐ рдХреА рд╡рд╛рдкрд╕реА рдФрд░ рдиреЛрдб рдпрд╛ рдбреНрд░реЙ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░рддрд┐ рд▓рдЧрд╛рд╡ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ

 osg::StateSet *stateset = node->getOrCreateStateSet(); 

Osg :: Node рдФрд░ osg :: рдбреНрд░рд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХрдХреНрд╖рд╛рдПрдВ рд╕рджрд╕реНрдп рдЪрд░ osg :: StateSet рдХреЛ рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░ osg :: ref_ptr <> рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рджреГрд╢реНрдп рдореЗрдВ рдХрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рддрдм рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдпреЗ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

1. рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдФрд░ рдореЛрдб


OSG, рдСрд░реНрдЧрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ :: рд╕реНрдЯреЗрдЯрдСрдЯрд░реНрдмрд┐рдВрдЧ рдХреНрд▓рд╛рд╕ рдХреЛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдПред рдпрд╣ рдПрдХ рдЖрднрд╛рд╕реА рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рддрд┐рдкрд╛рджрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рдХрд╛рд╢, рд╕рд╛рдордЧреНрд░реА рдФрд░ рдХреЛрд╣рд░реЗ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред

рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЛрдб рд╕реНрд╡рд┐рдЪ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЪрд╛рд▓реВ рдФрд░ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗ рдПрдиреНрдпреБрдореЗрд░реЗрдЯрд░реНрд╕ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ, рдЬреЛ рдУрдкрдирдЧреНрд▓ рдореЛрдб рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрднреА-рдХрднреА рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЛрдб рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, GL_LIGHTING рдореЛрдб рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд▓рд┐рдП рдЪрд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдУрдкрдирдЬреАрдПрд▓ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЗрд╕реЗ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЕрдиреНрдпрдерд╛ рдкреНрд░рдХрд╛рд╢ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред

Osg :: StateSet рд╡рд░реНрдЧ рджреЛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдореЛрдб рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ: рдмрдирд╛рд╡рдЯ рдФрд░ рдЧреИрд░-рдмрдирд╛рд╡рдЯред рдЗрд╕рдореЗрдВ рдЧреИрд░-рдмрдирд╛рд╡рдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдореЗрдВ рдореЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЗ рд╣реИрдВ:

  1. setAttribute () - рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдЬреЛрдбрд╝рддрд╛ рд╣реИ osg :: рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВред рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧреБрдг рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕рдорд╛рди рд╕реЗрдЯ рдореЗрдВ рд╕рд╣-рдЕрд╕реНрддрд┐рддреНрд╡ рдирд╣реАрдВ рд░рдЦ рд╕рдХрддреЗред рдкрд┐рдЫрд▓реЗ рд╕реЗрдЯрдкреЙрдЗрдВрдЯ рдХреЛ рдирдП рдХреЗ рд╕рд╛рде рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  2. setMode () - рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЛрдб рдПрдиреНрдпреВрдорд░реЗрдЯрд░ рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдорд╛рди osg :: StateAttribute :: ON рдпрд╛ osg :: StateAttribute :: OFF рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдореЛрдб рдХреЛ рд╕рдХреНрд╖рдо рдпрд╛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ред
  3. setAttributeAndModes () - рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ рдЙрд╕рдХреЗ рд╕рдВрдмрджреНрдз рдореЛрдб рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрд╡рд┐рдЪ рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИ)ред рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдореЛрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ рдЙрд╕рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдореЛрдб рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

 stateset->setAttributeAndModes(attr, osg::StateAttribute::ON); 

рдмрдирд╛рд╡рдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрдирд╛рд╡рдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕ рдкрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред Osg :: StateSet рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрдиреНрдп рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ setTextureAttribute (), setTextureMode (), рдФрд░ setTextureAttributeAndModes ()

 stateset->setTextureAttributeAndModes(0, textattr, osg::StateAttribute::ON); 

рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ 0 рдХреЗ рд╕рд╛рде рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП textattr рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

2. рджреГрд╢реНрдп рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдмрд╣реБрднреБрдЬ рдкреНрд░рджрд░реНрд╢рди рдореЛрдб рдХреА рд╕реНрдерд╛рдкрдирд╛


рд╣рдо рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЙрдкрд░реЛрдХреНрдд рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ - рдУрдПрд╕рдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдУрдкрдирдЬреАрдПрд▓ рдмрд╣реБрднреБрдЬ рдХреЗ рд░реЗрдЦрд╛рдкреБрдВрдЬ рдореЛрдб рдХреЛ рдмрджрд▓рддреЗ рд╣реБрдП :: рдмрд╣реБрднреБрдЬ рд╡рд░реНрдЧ, рдЬреЛ рдХрд┐ рдСрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ :: StateAttributeред рдпрд╣ рд╡рд░реНрдЧ glPolygonMode () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рджреГрд╢реНрдп рдиреЛрдб рдХреЗ рд▓рд┐рдП рдмрд╣реБрднреБрдЬ рдкреНрд░рджрд░реНрд╢рди рдореЛрдб рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдмрд╣реБрднреБрдЬ рдЙрджрд╛рд╣рд░рдг
main.h
 #ifndef MAIN_H #define MAIN_H #include <osg/PolygonMode> #include <osg/MatrixTransform> #include <osgDB/ReadFile> #include <osgViewer/Viewer> #endif 

main.cpp
 #include "main.h" int main(int argc, char *argv[]) { (void) argc; (void) argv; osg::ref_ptr<osg::Node> model = osgDB::readNodeFile("../data/cessna.osg"); osg::ref_ptr<osg::MatrixTransform> transform1 = new osg::MatrixTransform; transform1->setMatrix(osg::Matrix::translate(-25.0f, 0.0f, 0.0f)); transform1->addChild(model.get()); osg::ref_ptr<osg::MatrixTransform> transform2 = new osg::MatrixTransform; transform2->setMatrix(osg::Matrix::translate(25.0f, 0.0f, 0.0f)); transform2->addChild(model.get()); osg::ref_ptr<osg::PolygonMode> pm = new osg::PolygonMode; pm->setMode(osg::PolygonMode::FRONT_AND_BACK, osg::PolygonMode::LINE); transform1->getOrCreateStateSet()->setAttribute(pm.get()); osg::ref_ptr<osg::Group> root = new osg::Group; root->addChild(transform1.get()); root->addChild(transform2.get()); osgViewer::Viewer viewer; viewer.setSceneData(root.get()); return viewer.run(); } 


рдпрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреЗ рдкреНрд░рд┐рдп рд╕реЗрд╕рдирд╛ рдХреЗ рдореЙрдбрд▓ рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдореЙрдбрд▓ рдХреЗ рджреЛ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓рддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ, рдмрд╛рдИрдВ рдУрд░, рд╣рдо рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкреЙрд▓реАрдЧреЛрди рдХреЗ рд╡рд╛рдпрд░рдлреНрд░реЗрдо рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рдореЛрдб рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ

 osg::ref_ptr<osg::PolygonMode> pm = new osg::PolygonMode; pm->setMode(osg::PolygonMode::FRONT_AND_BACK, osg::PolygonMode::LINE); transform1->getOrCreateStateSet()->setAttribute(pm.get()); 



рдпрджрд┐ рд╣рдо рдУрдкрдирдЬреАрдПрд▓ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реЗрдЯрдореЛрдб () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдмрд╣реБрднреБрдЬ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рдХрд▓реНрдк рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВрдЧреЗред рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдУрд╢рдЧ :: рдкреЙрд▓реАрдЧреЙрдирдореЛрдб :: FRONT, рдмреИрдХ рдФрд░ FRONT_AND_BACK рдорд╛рдиреЛрдВ рдХреЛ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ OpenGL рдХреЗ рдПрдиреНрдпреВрдорд░реЗрдЯрд░ GL_FRONT, GL_BACK, GL_FRONT_AND_BACK рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ osg :: PolygonMode :: POINT, LINE and FILL, рдЬреЛ GL_POINT, GL_LINE рдФрд░ GL_FILL рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рдХреЛрдИ рдЕрдиреНрдп рдЪрд╛рд▓ рдирд╣реАрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдХреНрд╕рд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдПрдХ рд╢реБрджреНрдз рдУрдкрдирдЧреИрд▓ рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ - рдУрдПрд╕рдЬреА рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рдо рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрддрд╛ рд╣реИред рдмрд╣реБрднреБрдЬ рдкреНрд░рджрд░реНрд╢рди рдореЛрдб рдореЗрдВ рдХреЛрдИ рд╕рдВрдмрджреНрдз рдореЛрдб рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ glEnable () / glDisable () рдЬреЛрдбрд╝реА рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред SetAttributeAndModes () рд╡рд┐рдзрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧреА, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рддреАрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдореВрд▓реНрдп рдмреЗрдХрд╛рд░ рд╣реЛрдЧрд╛ред

3. рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕реНрдЯреЗрдЯреНрд╕ рдХрд╛ рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ред рдЧреБрдг рдФрд░ рд╕рд╛рдзрди рд▓рд╛рдЧреВ рдХрд░рдирд╛


рдиреЛрдб рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рд╕реЗрдЯ рд╡рд░реНрддрдорд╛рди рдиреЛрдб рдФрд░ рдЙрд╕рдХреЗ рд╕рднреА рдмрдЪреНрдЪреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо 1 рдХреЗ рд▓рд┐рдП рдУрдПрд╕рдЬреА :: рдкреЙрд▓реАрдЧреЙрдирдореЛрдб рд╕реЗрдЯ рдХреЛ рдЗрд╕ рдиреЛрдб рдХреЗ рд╕рднреА рдмрдЪреНрдЪреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЪрд╛рдЗрд▓реНрдб рдиреЛрдб рдЕрднрд┐рднрд╛рд╡рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдпрджрд┐ рдмрдЪреНрдЪреЗ рдХреЗ рдиреЛрдб рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреЗрд░реЗрдВрдЯ рдиреЛрдб рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реЛрдЧрд╛ред

рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдиреЛрдб рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдзрд┐рдХрд╛рдВрд╢ 3D рд╕рдВрдкрд╛рджрдХреЛрдВ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдИ рдореЙрдбрд▓реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рднреА рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдореЛрдб рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╡реЗ рдкрд╣рд▓реЗ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЧрдП рд╣реЛрдВред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╕рдВрдкрд╛рджрдХ рдХреЗ рд╕рднреА рдореЙрдбрд▓реЛрдВ рдХреЛ рдПрдХ рд╣реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдЪрд╛рд╣реЗ рд╡реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реЛрдВред OSG рдореЗрдВ, рдЗрд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдСрдЧ :: StateAttribute :: OVERRIDE рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

 stateset->StateAttribute(attr, osg::StateAttribute::OVERRIDE); 

рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдореЛрдб рдФрд░ рдореЛрдб рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп, рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдпрд╛ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

 stateset->StateAttributeAndModes(attr, osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE); 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рд╕реЗ рднреА рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдСрдЧ :: рд╕реНрдЯреЗрдЯрдЕрдЯреНрд░реАрдмреНрдпреВрдЯ :: рдкреНрд░реЛрдХреНрдЯреЗрдб рдлреНрд▓реИрдЧ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрдХ рддреАрд╕рд░рд╛ рдЭрдВрдбрд╛ рд╣реИ, рдСрд╕рдЧ :: рд╕реНрдЯреЗрдЯрдЕрдЯреНрд░реАрдмреНрдпреВрдЯ :: INHERIT, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореВрд▓ рдиреЛрдб рдХреЗ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕реЗрдЯ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИред

рдпрд╣рд╛рдБ OVERRIDE рдФрд░ PROTECTED рдЭрдВрдбреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рднреА рдиреЛрдбреНрд╕ рдХреЛ рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдореЛрдб рдХреЛ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реВрдЯ рдиреЛрдб OVERRIDE рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдмрдЪреНрдЪрд╛ рдиреЛрдб PROTECTED рдзреНрд╡рдЬ рдХреА рд╕рд╣рд╛рдпрддрд╛ рд╕реЗ рдпрд╛ рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рдЕрдкрдиреЗ рд░рд╛рдЬреНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗред

рдЗрдирд╣реЗрд░рд┐рдЯ рдЙрджрд╛рд╣рд░рдг рдкрд╛рда
main.h
 #ifndef MAIN_H #define MAIN_H #include <osg/PolygonMode> #include <osg/MatrixTransform> #include <osgDB/ReadFile> #include <osgViewer/Viewer> #endif 

main.cpp
 #include "main.h" int main(int argc, char *argv[]) { (void) argc; (void) argv; osg::ref_ptr<osg::Node> model = osgDB::readNodeFile("../data/glider.osg"); osg::ref_ptr<osg::MatrixTransform> transform1 = new osg::MatrixTransform; transform1->setMatrix(osg::Matrix::translate(-0.5f, 0.0f, 0.0f)); transform1->addChild(model.get()); osg::ref_ptr<osg::MatrixTransform> transform2 = new osg::MatrixTransform; transform2->setMatrix(osg::Matrix::translate(0.5f, 0.0f, 0.0f)); transform2->addChild(model.get()); osg::ref_ptr<osg::Group> root = new osg::Group; root->addChild(transform1.get()); root->addChild(transform2.get()); transform1->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF); transform2->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF | osg::StateAttribute::PROTECTED); root->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE); osgViewer::Viewer viewer; viewer.setSceneData(root.get()); return viewer.run(); } 




рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЬрд▓рд╛рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИрдВрдЧ рдЧреНрд▓рд╛рдЗрдбрд░ рдЕрдкрдиреЗ рдкреВрд░реНрдгрдХрд╛рд▓рд┐рдХ OSG рдСрд╕реНрдХрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ

 $ osgviewer glider.osg 

рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдХрд╛рд╢ рдХреЛ рдмрдВрдж рдХрд░рдХреЗ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо 1 рдФрд░ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо 2 рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

 transform1->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF); transform2->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF | osg::StateAttribute::PROTECTED); 

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рд░реВрдЯ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдкрдиреЗ рд╕рднреА рдмрдЪреНрдЪреЗ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд░рд╛рдЗрдб рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд╡реЗ рд░реВрдЯ рдиреЛрдб рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд╛рд░рд┐рд╕ рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, trnsform2 рд░реВрдЯ рдиреЛрдб рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП PROTECTED рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

 transform2->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF | osg::StateAttribute::PROTECTED); 

рдирддреАрдЬрддрди, рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╣рдо рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо 1 рдиреЛрдб рдкрд░ рдкреНрд░рдХрд╛рд╢ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдмрд╛рдПрдВ рд╣реИрдВрдЧ рдЧреНрд▓рд╛рдЗрдбрд░ рдЕрднреА рднреА рдЬрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреГрд╢реНрдп рд░реВрдЯ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд╣рдорд╛рд░реЗ рдкреНрд░рдпрд╛рд╕ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░ рджрд┐рдпрд╛ред рд╕рд╣реА рд╣реИрдВрдЧ рдЧреНрд▓рд╛рдЗрдбрд░ рдХреЛ рдкреНрд░рдХрд╛рд╢ рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рдХреЗрд╡рд▓ рдЙрдЬреНрдЬреНрд╡рд▓ рджрд┐рдЦрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░реЛрд╢рдиреА рдкреНрд░рджрд╛рди рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд╕рд░рд▓ рд░рдВрдЧ рд╕реЗ рднрд░ рдЬрд╛рддрд╛ рд╣реИ), рдЪреВрдВрдХрд┐ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо 2 рдХреЛ рд░реВрдЯ рдиреЛрдб рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдиреЗ рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

4. OpenSceneGraph рдореЗрдВ рд╕рдорд░реНрдерд┐рдд OpenGL рдХреА рд╕реВрдЪреА рдХреА рд╕реВрдЪреА


OSG рдСрд╕ :: StateAttribute рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╡рд░реНрдЧреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ OpenGL рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд▓рдЧрднрдЧ рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рддрд╛рд▓рд┐рдХрд╛ рдЗрдВрдЬрди рд╕реЗ рдЙрдкрд▓рдмреНрдз OpenGL рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЗ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рджрд┐рдЦрд╛рддреА рд╣реИред
рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдХрд╛рд░ рдЖрдИрдбреАрд╡рд░реНрдЧ рдХрд╛ рдирд╛рдордПрд╕реЛрд╕рд┐рдПрдЯреЗрдб рдореЛрдбрд╕рдорддреБрд▓реНрдп OpenGL рдлрд╝рдВрдХреНрд╢рди
ALPHEFUNCрдСрд╕рдЧ :: рдЕрд▓реНрдлреБрдиреНрдХGL_ALPHA_TESTglAlphaFunc ()
BLENDFUNCрдСрдЧ :: рдмреНрд▓реЗрдВрдбрдлрдВрдХGL_BLENDglBlendFunc () рдФрд░ glBlendFuncSeparate ()
CLIPPLANEрдСрдЧ :: рдХреНрд▓рд┐рдкрдкреНрд▓реЗрдиGL_CLIP_PLANEi (рдореИрдВ 1 рд╕реЗ 5 рддрдХ)glClipPlane ()
COLORMASKрдУрд╕ :: рд░рдВрдЧрдорд╕реНрдХ-glColorMask ()
CULLFACEрдУрд╕рдЧ :: рдХрд▓рдлреЗрд╕GL_CULLFACEglCullFace ()
DEPTHрдУрд╕ :: рдЧрд╣рд░рд╛рдИGL_DEPTH_TESTglDepthFunc (), glDepthRange () рдФрд░ glDepthMask ()
FOGрдУрд╕рдЧ :: рдХреЛрд╣рд░рд╛GL_FOGGlFog ()
FRONTFACEosg :: рдлреНрд░рдВрдЯрдлреИрд╕-glFrontFace ()
рдкреНрд░рдХрд╛рд╢рдУрд╕рдЧ :: рдкреНрд░рдХрд╛рд╢GL_LIGHTi (рдореИрдВ 1 рд╕реЗ 7 рддрдХ)рдЪрдордХ ()
LIGHTMODELosg :: рд▓рд╛рдЗрдЯрдореЙрдбрд▓-glLightModel ()
LINESTRIPPLEosg :: LineStrippleGL_LINE_STRIPPLEglLineStripple ()
linewidthрдСрдЧ :: рд▓рд╛рдЗрдирд╡рд┐рдж-glLineWidht ()
LOGICOPрдСрд╕рдЧ :: рд▓реЙрдЬрд┐рдХрдСрдкGL_COLOR_LOGIC_OPglLogicOp ()
рд╕рд╛рдордЧреНрд░реАрдЕрд╕рдЧ :: рд╕рд╛рдордЧреНрд░реА-glMaterial () рдФрд░ glColorMaterial ()
рд╕реВрддреНрд░реАрдУрд╕рдЧ :: рдмрд┐рдВрджреБGL_POINT_SMOOTHglPointParameter ()
POINTSPRITEosg :: рдкреЙрдЗрдВрдЯрд╕реНрдкреНрд░рд╛рдЗрдЯGL_POINT_SPRITE_ARBрдУрдкрдирдЬреАрдПрд▓ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп
POLYGONMODEosg :: рдмрд╣реБрднреБрдЬ-glPolygonMode ()
POLYGONOFFSETosg :: рдмрд╣реБрднреБрдЬGL_POLYGON_OFFSET_POINTglPolygonOffset ()
POLYGONSTRIPPLEosg :: рдмрд╣реБрднреБрдЬGL_POLYGON_STRIPPLEglPolygonStripple ()
рдХреИрдВрдЪреАрдУрд╕рдЧ :: рдХреИрдВрдЪреАGL_SCISSOR_TESTglScissor ()
SHADEMODELрдСрд╕рдЧ :: рд╢реЗрдбрдореЙрдбрд▓-glShadeModel ()
рд╕реНрдЯреИрдВрд╕рд┐рд▓рдУрд╕ :: рд╕реНрдЯреЗрдВрд╕рд┐рд▓GL_STENCIL_TESTglStbonFunc (), glStbonOp () рдФрд░ glStbonMask ()
TEXENVрдУрд╕ :: :: рдЯреЗрдХреНрд╕рд╡реИрди-glTexEnv ()
TEXGENрдУрд╕рдЧ :: рдЯреЗрдХреНрд╕рдЬреЗрдиGL_TEXTURE_GEN_SglTexGen ()

рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреНрд░рдХрд╛рд░ рдЖрдИрдбреА рдХреЙрд▓рдо рд╡рд┐рд╢рд┐рд╖реНрдЯ OSG рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдкрд╣рдЪрд╛рди osg :: StateArtribute рд╢реНрд░реЗрдгреА рдХреЗ рдкреНрд░рдЧрдгрдХреЛрдВ рдореЗрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП getAttribute рд╡рд┐рдзрд┐ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 osg::PolygonMode *pm = dynamic_cast<osg::PolygonMode *>(stateset->getAttribute(osg::StateAttribute::POLYGONMODE)); 

рдПрдХ рдорд╛рдиреНрдп рд╕реВрдЪрдХ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд╣рд▓реЗ рд╕реЗрдЯ рдХреА рдЧрдИ рд╣реИред рдЕрдиреНрдпрдерд╛, рд╡рд┐рдзрд┐ NULL рдЭреВрда рд╣реЛрдЧреАред рдЖрдк рдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрддрдорд╛рди рдореЛрдб рдХрд╛ рдорд╛рди рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

 osg::StateAttribute::GLModeValue value = stateset->getMode(GL_LIGHTING); 

рдпрд╣рд╛рдБ GL_LIGHTING рдкреНрд░рдЧрдгрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреВрд░реЗ рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рдХреЛ рд╕рдХреНрд░рд┐рдп / рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

5. рджреГрд╢реНрдп рдореЗрдВ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдХреЛрд╣рд░реЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛


рдЖрдЗрдП рдХреЛрд╣рд░реЗ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдореЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрджрд░реНрд╢ рддрд░реАрдХрд╛ рдмрддрд╛рддреЗ рд╣реИрдВред OpenGL рдХрд╛ рдПрдХ рдлреЙрдЧ рдореЙрдбрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд░реЗрдЦреАрдп рдФрд░ рджреЛ рдШрд╛рддреАрдп рд╕рдореАрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ osg :: Fog рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдкрд╛рда рдХреЛрд╣рд░рд╛
main.h
 #ifndef MAIN_H #define MAIN_H #include <osg/Fog> #include <osgDB/ReadFile> #include <osgViewer/Viewer> #endif 


main.cpp

 #include "main.h" int main(int argc, char *argv[]) { (void) argc; (void) argv; osg::ref_ptr<osg::Fog> fog = new osg::Fog; fog->setMode(osg::Fog::LINEAR); fog->setStart(500.0f); fog->setEnd(2500.0f); fog->setColor(osg::Vec4(1.0f, 1.0f, 0.0f, 1.0f)); osg::ref_ptr<osg::Node> model = osgDB::readNodeFile("../data/lz.osg"); model->getOrCreateStateSet()->setAttributeAndModes(fog.get()); osgViewer::Viewer viewer; viewer.setSceneData(model.get()); return viewer.run(); } 


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреЛрд╣рд░реЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрдирд╛рдПрдВред рд╣рдо рдПрдХ рд░реИрдЦрд┐рдХ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдореЙрдбрд▓ рд╕реЗ рджреВрд░реА рджреНрд╡рд╛рд░рд╛ рдХреЛрд╣рд░реЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рд╕реАрдорд╛ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ

 osg::ref_ptr<osg::Fog> fog = new osg::Fog; fog->setMode(osg::Fog::LINEAR); fog->setStart(500.0f); fog->setEnd(2500.0f); fog->setColor(osg::Vec4(1.0f, 1.0f, 0.0f, 1.0f)); 

рд╣рдо рдкрд░рд┐рджреГрд╢реНрдп рдирдореВрдирд╛ lz.osg рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЙрд╕ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ

 osg::ref_ptr<osg::Node> model = osgDB::readNodeFile("../data/lz.osg"); model->getOrCreateStateSet()->setAttributeAndModes(fog.get()); 

рджрд░реНрд╢рдХ рд╡рд┐рдВрдбреЛ рдореЗрдВ, рд╣рдо рдПрдХ рдзреБрдВрдзрд▓рд╛ рдкрд░рд┐рджреГрд╢реНрдп рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореЙрдбрд▓ рдХреА рджреВрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЛрд╣рд░реЗ рдХрд╛ рдШрдирддреНрд╡ рдХреИрд╕реЗ рдмрджрд▓рддрд╛ рд╣реИ







6. рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдФрд░ рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ


OpenGL рдХреЗ рд╕рд╛рде, OSG рд╕реАрдзреЗ рджреГрд╢реНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрда рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдУрдкрдирдЬреАрдПрд▓ рдХреА рддрд░рд╣, рдУрдПрд╕рдЬреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЫрд╛рдпрд╛ рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рдХрд╛рд╢ рдХрд┐рд░рдгреЗрдВ рд╕реАрдзреА рд░реЗрдЦрд╛рдУрдВ рдореЗрдВ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдЖрддреА рд╣реИрдВ, рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдкрд░рд╛рд╡рд░реНрддрд┐рдд рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЫрд┐рддрд░реА рдЬрд╛рддреА рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЙрдиреНрд╣реЗрдВ рджрд░реНрд╢рдХ рдХреА рдЖрдВрдЦреЛрдВ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рдХрд╛рд╢ рдХреА рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рднреМрддрд┐рдХ рдЧреБрдгреЛрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдпрд╛рдорд┐рддрд┐ рдЖрджрд┐ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

Osg :: рд▓рд╛рдЗрдЯ рд╡рд░реНрдЧ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: setLightNum () рдФрд░ getLightNum () - рд╕реНрд░реЛрддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП; setAmbient () рдФрд░ getAmbient () рдЖрд╕рдкрд╛рд╕ рдХреЗ рдШрдЯрдХ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП; setDiffuse () рдФрд░ getDiffuse () - рдПрдХ рдмрд┐рдЦрд░реЗ рд╣реБрдП рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрджрд┐ред

OSG рдиреЗ рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП osg :: LightSource рд╡рд░реНрдЧ рдХрд╛ рднреА рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рд╕реЗрдЯрд▓рд╛рдЗрдЯ () рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рджреГрд╢реНрдп рдЧреНрд░рд╛рдл рдХрд╛ рдкрддреНрддрд╛ рдиреЛрдб рд╣реИред рдпрджрд┐ GL_LIGHTi рдХреЗ рд▓рд┐рдП рд╕рдВрдЧрдд рдореЛрдб рд╕реЗрдЯ рд╣реИ, рддреЛ рджреГрд╢реНрдп рдЧреНрд░рд╛рдл рдХреЗ рдЕрдиреНрдп рд╕рднреА рдиреЛрдбреНрд╕ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 //   1 osg::ref_ptr<osg::Light> light = new osg::Light; light->setLightNum( 1 ); ... //       osg::ref_ptr<osg::LightSource> lightSource = new osg::LightSource; lightSource->setLight( light.get() ); ... //             root->addChild( lightSource.get() ); root->getOrCreateStateSet()->setMode( GL_LIGHT1, osg::StateAttribute::ON ); 

рдПрдХ рдФрд░, рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдорд╛рдзрд╛рди рд╕реЗрдЯрд╕реНрдЯреИрдЯрд╕реЗрдЯрдореЛрдбреНрд╕ () рд╡рд┐рдзрд┐ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░реВрдЯ рдиреЛрдб рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ

 root->addChild( lightSource.get() ); lightSource->setStateSetModes( root->getOrCreateStateSet(), osg::StateAttribute::ON ); 

рдЖрдк рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдореЗрдВ рдмрдЪреНрдЪреЗ рдХреЗ рдиреЛрдбреНрд╕ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рд╣реИ, рдЖрдк рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рдмрдЧреНрд░рд╛рдл рдХреЛ рд░реЛрд╢рди рдХрд░реЗрдВрдЧреЗред рдЗрд╕реЗ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рднреМрддрд┐рдХ рд░реВрдк рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

Osg :: LightSource рдиреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдиреЛрдб рд╕реЗ рдЬреБрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд┐рдВрджреБ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЛ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 lightSource->setReferenceFrame( osg::LightSource::ABSOLUTE_RF ); 

7. рджреГрд╢реНрдп рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдмрдирд╛рдирд╛


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдУрдПрд╕рдЬреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЛ рдирдВрдмрд░ 0 рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рджрд┐рд╢рд╛рддреНрдордХ рдкреНрд░рдХрд╛рд╢ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд┐рд╕реА рднреА рд╕рдордп рдЖрдк рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдордиреНрд╡рдп рдкрд░рд┐рд╡рд░реНрддрди рдиреЛрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рд╕реНрдерд┐рддрд┐ рд╕реНрд░реЛрддреЛрдВ (рдмрд┐рдВрджреБ рд╕реНрд░реЛрддреЛрдВ) рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджрд┐рд╢рд╛рддреНрдордХ рдкреНрд░рдХрд╛рд╢ рдореЗрдВ рдХреЗрд╡рд▓ рджрд┐рд╢рд╛ рд╣реЛрддреА рд╣реИ (рдЕрдирдВрдд рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд┐рд░рдгреЛрдВ рдХреА рдПрдХ рдзрд╛рд░рд╛) рдФрд░ рдордВрдЪ рдкрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрдВрдзреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред OpenGL рдФрд░ OSG рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЪреМрдереЗ рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ 0 рд╣реИ, рддреЛ рдкреНрд░рдХрд╛рд╢ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ; 1 - рд╕реНрдерд┐рддрд┐ рдХреЗ рдорд╛рди рдХреЗ рд╕рд╛рдеред

рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рд╕реНрдкрд╛рдпрд▓рд░ рд╣реЗрдбрд┐рдВрдЧ
main.h
 #ifndef MAIN_H #define MAIN_H #include <osg/MatrixTransform> #include <osg/LightSource> #include <osgDB/ReadFile> #include <osgViewer/Viewer> #endif 

main.cpp

 #include "main.h" //------------------------------------------------------------------------------ // //------------------------------------------------------------------------------ osg::Node *createLightSource(int num, const osg::Vec3 &trans, const osg::Vec4 &color) { osg::ref_ptr<osg::Light> light = new osg::Light; light->setLightNum(num); light->setDiffuse(color); light->setPosition(osg::Vec4(0.0f, 0.0f, 0.0f, 1.0f)); osg::ref_ptr<osg::LightSource> lightSource = new osg::LightSource; lightSource->setLight(light); osg::ref_ptr<osg::MatrixTransform> sourceTrans = new osg::MatrixTransform; sourceTrans->setMatrix(osg::Matrix::translate(trans)); sourceTrans->addChild(lightSource.get()); return sourceTrans.release(); } //------------------------------------------------------------------------------ // //------------------------------------------------------------------------------ int main(int argc, char *argv[]) { (void) argc; (void) argv; osg::ref_ptr<osg::Node> model = osgDB::readNodeFile("../data/cessna.osg"); osg::ref_ptr<osg::Group> root = new osg::Group; root->addChild(model.get()); osg::Node *light0 = createLightSource(0, osg::Vec3(-20.0f, 0.0f, 0.0f), osg::Vec4(1.0f, 1.0f, 0.0f, 1.0f)); osg::Node *light1 = createLightSource(1, osg::Vec3(0.0f, -20.0f, 0.0f), osg::Vec4(0.0f, 1.0f, 1.0f, 1.0f)); root->getOrCreateStateSet()->setMode(GL_LIGHT0, osg::StateAttribute::ON); root->getOrCreateStateSet()->setMode(GL_LIGHT1, osg::StateAttribute::ON); root->addChild(light0); root->addChild(light1); osgViewer::Viewer viewer; viewer.setSceneData(root.get()); return viewer.run(); } 


рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдп рд╣реИ

 osg::Node *createLightSource(int num, const osg::Vec3 &trans, const osg::Vec4 &color) { osg::ref_ptr<osg::Light> light = new osg::Light; light->setLightNum(num); light->setDiffuse(color); light->setPosition(osg::Vec4(0.0f, 0.0f, 0.0f, 1.0f)); osg::ref_ptr<osg::LightSource> lightSource = new osg::LightSource; lightSource->setLight(light); osg::ref_ptr<osg::MatrixTransform> sourceTrans = new osg::MatrixTransform; sourceTrans->setMatrix(osg::Matrix::translate(trans)); sourceTrans->addChild(lightSource.get()); return sourceTrans.release(); } 

рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рд╕реНрд░реЛрдд рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд╢ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ GL_LIGHTi рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИ

 osg::ref_ptr<osg::Light> light = new osg::Light; //    light->setLightNum(num); //   light->setDiffuse(color); //  .     ,    light->setPosition(osg::Vec4(0.0f, 0.0f, 0.0f, 1.0f)); 

рдЙрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реМрдВрдкреА рдЬрд╛рддреА рд╣реИред

 osg::ref_ptr<osg::LightSource> lightSource = new osg::LightSource; lightSource->setLight(light); 

рд╣рдо рд░реВрдкрд╛рдВрддрд░рдг рдиреЛрдб рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЛ рдмрд╛рд▓ рдиреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ

 osg::ref_ptr<osg::MatrixTransform> sourceTrans = new osg::MatrixTransform; sourceTrans->setMatrix(osg::Matrix::translate(trans)); sourceTrans->addChild(lightSource.get()); 

рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рдиреЛрдб рдореЗрдВ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рдПрдВ

 return sourceTrans.release(); 

рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╢рд░реАрд░ рдореЗрдВ, рд╣рдо рдПрдХ рддреНрд░рд┐-рдЖрдпрд╛рдореА рдореЙрдбрд▓ (рдлрд┐рд░ рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╕рдВрджреАрджрд╛ рд╕реЗрд╕рдирд╛) рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ

 osg::ref_ptr<osg::Node> model = osgDB::readNodeFile("../data/cessna.osg"); osg::ref_ptr<osg::Group> root = new osg::Group; root->addChild(model.get()); 

рд╣рдо рд╕рдВрдЦреНрдпрд╛ 0 рдФрд░ 1. рдХреЗ рд╕рд╛рде рджреЛ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдмрдирд╛рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛, рдкреАрд▓реЗ рд░рдВрдЧ рдХрд╛ рдЪрдордХрддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ - рдиреАрд▓рд╛-рд╣рд░рд╛

 osg::Node *light0 = createLightSource(0, osg::Vec3(-20.0f, 0.0f, 0.0f), osg::Vec4(1.0f, 1.0f, 0.0f, 1.0f)); osg::Node *light1 = createLightSource(1, osg::Vec3(0.0f, -20.0f, 0.0f), osg::Vec4(0.0f, 1.0f, 1.0f, 1.0f)); 

рд╣рдо рдУрдкрдирдЬреАрдПрд▓ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ 0 рдФрд░ 1 рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ

 root->getOrCreateStateSet()->setMode(GL_LIGHT0, osg::StateAttribute::ON); root->getOrCreateStateSet()->setMode(GL_LIGHT1, osg::StateAttribute::ON); root->addChild(light0); root->addChild(light1); 

рджрд░реНрд╢рдХ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдПрдХ рддрд╕реНрд╡реАрд░ рдорд┐рд▓рддреА рд╣реИ



рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рдЪрдХреНрд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдзреНрдпрд╛рди рд╕реЗ рдмрд╣реБрдд рдЖрдЧреЗ рдмрдврд╝ рдЧрдПред рдпрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдмрд╣реБрдд рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдИ рдереА, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдореБрджрд╛рдп рдХреЛ рд▓реЗрдЦреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдЖрдЬ рдореИрдВрдиреЗ рдУрдПрд╕рдЬреА рдЗрдВрдЬрди рдХреА рдмрд▓реНрдХрд┐ рдмреБрдирд┐рдпрд╛рджреА рдЪреАрдЬреЛрдВ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдХреНрдпрд╛ рдХреВрд▓ рдирд┐рдХрд▓реЗред рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдореИрдВ рдареАрдХ-рдареАрдХ рдЖрджрд┐рдо рдЪреАрдЬреЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЙрд╕ рдирд╕ рдореЗрдВ рдЬрд┐рд╕рдореЗрдВ рдореИрдВрдиреЗ рдЦреБрдж рдЙрдиреНрд╣реЗрдВ рд╕рдордЭрд╛ рдерд╛ред рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреА, рдореЗрд░рд╛ рднрдВрдбрд╛рд░ рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИ ред рдзрдиреНрдпрд╡рд╛рдж, рдкреНрд░рд┐рдп рд╕рд╛рдерд┐рдпреЛрдВ, рдореИрдВ рдЗрд╕ рдХрд╣рд╛рдиреА рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ ...

Source: https://habr.com/ru/post/hi430348/


All Articles