OpenSceneGraph: рджреГрд╢реНрдп рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ

рдЫрд╡рд┐

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


OpenGL, рдЬреЛ OpenSceneGraph рдХрд╛ рдмреИрдХрдПрдВрдб рд╣реИ, рддреАрди-рдЖрдпрд╛рдореА рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЬреНрдпрд╛рдорд┐рддреАрдп рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рдХреНрд╕ (рдЬреИрд╕реЗ рдЕрдВрдХ, рд░реЗрдЦрд╛рдПрдВ, рддреНрд░рд┐рдХреЛрдг рдФрд░ рдмрд╣реБрднреБрдЬ рдЪреЗрд╣рд░реЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

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

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

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

1. рдХрдХреНрд╖рд╛рдПрдВ рдЬрд┐рдпреЛрдб рдФрд░ рдбреНрд░реЙрдПрдмрд▓


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

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

рдУрдПрд╕рдЬреА :: рдЬрд┐рдпреЛрдб рдХреНрд▓рд╛рд╕ рдбреНрд░реЙрдЗрдВрдЧ рдЕрдЯреИрдЪ рдФрд░ рдбрд┐рдЯреИрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

  • рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐ addDrawable () - рдУрд╕ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рдбреНрд░реЙрдмрд▓ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ :: рдЬрд┐рдУрдб рдХреНрд▓рд╛рд╕ред рдпреЗ рд╕рднреА рддрддреНрд╡ osg :: ref_ptr <> рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
  • рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐ рд╣рдЯрд╛рдиреЗ рдпреЛрдЧреНрдп () рдФрд░ рд╣рдЯрд╛рдиреЗ рдпреЛрдЧреНрдп () osg :: Geode рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдЧрдгрдирд╛ рдХреЛ рдШрдЯрд╛рддрд╛ рд╣реИред рд╣рдЯрд╛рдиреЗ рдпреЛрдЧреНрдп () рд╡рд┐рдзрд┐ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдмреНрдпрд╛рдЬ рдХреЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреА рд╣реИ, рдФрд░ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рдпреЛрдЧреНрдп () рд╡рд┐рдзрд┐ рдореЗрдВ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВ: рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реВрдЪрдХрд╛рдВрдХ рдФрд░ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдСрдЧ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ :: рдЬрд┐рдУрдб рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд░рдгреАред
  • GetDrawable () рд╡рд┐рдзрд┐ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рд╕реВрдЪрдХрд╛рдВрдХ рдкрд░ рдПрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд▓реМрдЯрд╛рддреА рд╣реИред
  • GetNumDrawables () рд╡рд┐рдзрд┐ osg :: Geode рд╕реЗ рдЬреБрдбрд╝реЗ рддрддреНрд╡реЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдУрд╕реНрдЧ :: рдЬрд┐рдпреЛрдб рд╕реЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдРрд╕реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

geode->removeDrawables(0, geode->getNumDrawables()); 

2. рд╕рд░рд▓ рдЖрдХреГрддрд┐рдпрд╛рдБ рдмрдирд╛рдирд╛


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

 shapeDrawable->setShape(new osg::Box(osg::Vec3(1.0f, 0.0f, 0.0f), 10.0f, 10.0f, 5.0f)); 

рдПрдХ рдЬреНрдпрд╛рдорд┐рддреАрдп рдХреЗрдВрджреНрд░ рдХреЗ рд╕рд╛рде рдмрд┐рдВрджреБ (1.0, 0.0, 0.0) рдХреА рдЪреМрдбрд╝рд╛рдИ рдФрд░ 10 рдХреА рдКрдВрдЪрд╛рдИ рдФрд░ 5 рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА рдЧрд╣рд░рд╛рдИ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдпрддрд╛рдХрд╛рд░ рдмреЙрдХреНрд╕ рдмрдирд╛рддрд╛ рд╣реИред Osg :: Vec3 рд╡рд░реНрдЧ рддреНрд░рд┐-рдЖрдпрд╛рдореА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, osg :: Vec2 рдФрд░ osg :: Vec4 рдЗрд╕реА рдЖрдпрд╛рдо рдХреЗ рд╡реИрдХреНрдЯрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рднреА рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рд╣реИрдВ)ред

OSG :: Box, osg :: Capsule, osg :: Cone, osg :: Cylinder and osg :: рдХреНрд╖реЗрддреНрд░ред

рдЗрд╕ рддрдВрддреНрд░ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

main.h
 #ifndef MAIN_H #define MAIN_H #include <osg/ShapeDrawable> #include <osg/Geode> #include <osgViewer/Viewer> #endif // MAIN_H 

main.cpp
 #include "main.h" int main(int argc, char *argv[]) { (void) argc; (void) argv; osg::ref_ptr<osg::ShapeDrawable> shape1 = new osg::ShapeDrawable; shape1->setShape(new osg::Box(osg::Vec3(-3.0f, 0.0f, 0.0f), 2.0f, 2.0f, 1.0f)); osg::ref_ptr<osg::ShapeDrawable> shape2 = new osg::ShapeDrawable; shape2->setShape(new osg::Cone(osg::Vec3(0.0f, 0.0f, 0.0f), 1.0f, 1.0f)); shape2->setColor(osg::Vec4(0.0f, 1.0f, 0.0f, 1.0f)); osg::ref_ptr<osg::ShapeDrawable> shape3 = new osg::ShapeDrawable; shape3->setShape(new osg::Sphere(osg::Vec3(3.0f, 0.0f, 0.0f), 1.0f)); shape3->setColor(osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f)); osg::ref_ptr<osg::Geode> root = new osg::Geode; root->addDrawable(shape1.get()); root->addDrawable(shape2.get()); root->addDrawable(shape3.get()); osgViewer::Viewer viewer; viewer.setSceneData(root.get()); return viewer.run(); } 

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



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

3. рдЬреНрдпреЛрдореЗрдЯреНрд░реА рдбреЗрдЯрд╛ рдХрд╛ рд╕рдВрдЧреНрд░рд╣рдг: рдСрд░реНрдЧреНрд╕ :: рдПрд░реЗ рдФрд░ рдСрд╕рдЧ :: рдЬреНрдпреЛрдореЗрдЯреНрд░реА


Osg :: рд╕рд░рдгреА рд╡рд░реНрдЧ рдПрдХ рдореВрд▓ рд╕рд╛рд░ рд╡рд░реНрдЧ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдХрдИ рд╡рдВрд╢рдЬреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЬреЛ OpenGL рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╕реАрдбреА рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ std :: рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкреБрд╢_рдмреИрдХ () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рджрд┐рд╢ рдХреЛ рдПрдХ рд╕рджрд┐рд╢ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ

 vertices->push_back(osg::Vec3(1.0f, 0.0f, 0.0f)); 

OSG рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдвреЗрд░ рдкрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рд░рдгреА рддрддреНрд╡реЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдУрдПрд╕рдЬреА :: рд╡реАрдИрд╕реА 3 рдпрд╛ рдУрдПрд╕рдЬреА :: рд╡реАрдИрд╕реА 2, рдЬреЛ рд╕реНрдЯреИрдХ рдкрд░ рднреА рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдУрдПрд╕рдЬреА :: рдЬреНрдпрд╛рдорд┐рддрд┐ рд╡рд░реНрдЧ рдУрдкрдирдкреНрд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдПрдХ рдЖрд╡рд░рдг рд╣реИ рдЬреЛ рд╢реАрд░реНрд╖ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ osg :: Drawable class рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ osg :: Geode рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдУрдкрдирдЬреАрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреНрдпрд╛рдорд┐рддрд┐ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

4. рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░ рдФрд░ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ


рдПрдХ рд╢реАрд░реНрд╖ рд░реЗрдЦрд╛ рдЬреНрдпрд╛рдорд┐рддрд┐ рдЖрджрд┐рдореЛрдВ рдХреА рдПрдХ рдкрд░рдорд╛рдгреБ рдЗрдХрд╛рдИ рд╣реИред рдЗрд╕рдореЗрдВ рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рджреЛ рдпрд╛ рддреАрди рдЖрдпрд╛рдореА рд╕реНрдерд╛рди рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИрдВред рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рд╕реНрдерд┐рддрд┐, рд░рдВрдЧ, рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдХреНрдЯрд░, рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ, рдХреЛрд╣рд░реЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рд╢реАрд░реНрд╖ рдореЗрдВ рд╣рдореЗрд╢рд╛ рд╕реНрдерд╛рди рдХреА рд╕реНрдерд┐рддрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╡реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред OpenGL 16 рдореВрд▓ рд╢реАрд░реНрд╖ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдСрдЧ :: рдЬреНрдпреЛрдореЗрдЯреНрд░реА рдХреНрд▓рд╛рд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реЗрдЯ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ * рдПрд░реЗ ()ред

OpenSceneGraph рдореЗрдВ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ
рдЧреБрдгрдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░Osg :: рдЬреНрдпрд╛рдорд┐рддрд┐ рд╡рд┐рдзрд┐рд╕рдорддреБрд▓реНрдп OpenGL рдХреЙрд▓
рд╕реНрдерд┐рддрд┐3-рд╡реЗрдХреНрдЯрд░setVertexArray ()glVertexPointer ()
рд╕рд╛рдзрд╛рд░рдг3-рд╡реЗрдХреНрдЯрд░setNormalArray ()glNormalPointer ()
рд░рдВрдЧ4-рд╡реЗрдХреНрдЯрд░setColorArray ()glColorPointer ()
рджреНрд╡рд┐рддреАрдпрдХ рд░рдВрдЧ4-рд╡реЗрдХреНрдЯрд░рд╕реЗрдЯрд╕реЙрдиреНрдбреНрд░реАрдХрд╛рд░реЗрд▓рдЕрд░реЗ ()glSecondaryColorPointerEXT ()
рдХреЛрд╣рд░рд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрдирд╛рд╡setFogCoordArray ()glFogCoordPointerEXT ()
рдмрдирд╛рд╡рдЯ рд╕рдордиреНрд╡рдп рдХрд░рддреА рд╣реИ2- рдпрд╛ 3-рд╡реЗрдХреНрдЯрд░рд╕реЗрдЯрдЯреЗрдХреНрд╕реЛрдХрд╛рд░реНрдбрдЕрд░реЗ ()glTexCoordPointer ()
рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБрдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рддsetVertexArribArray ()glVertexAttribPointerARB ()

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

 geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX); 

рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдФрд░ рд╢реАрд░реНрд╖ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд░рдВрдЧ рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рд╕рд╣рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдЧрд░ рдЖрдк рдРрд╕реЗ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ

 geom->setColorBinding(osg::Geometry::BIND_OVERALL); 

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

5. рдЬреНрдпрд╛рдорд┐рддрд┐ рдЖрджрд┐рдореЛрдВ рдХреЗ рд╕рдореВрд╣


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

  • addPrimitiveSet () - рдПрдХ рдСрдЧреНрдореЗрдВрдЯ рдореЗрдВ рд╕реЗрдЯрд┐рдорд┐рдЯреА рдХреЗ рдПрдХ рд╕реЗрдЯ рдореЗрдВ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ :: рдЬреНрдпрд╛рдорд┐рддрд┐ рдСрдмреНрдЬреЗрдХреНрдЯред
  • removePrimitiveSet () - рдЖрджрд┐рдо рдХрд╛ рдПрдХ рд╕реЗрдЯ рдирд┐рдХрд╛рд▓реЗрдВред рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рд╕реЗрдЯ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реВрдЪрдХрд╛рдВрдХ рдФрд░ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реЗрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реЗрддрд╛ рд╣реИред
  • getPrimitiveSet () - рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдЗрдВрдбреЗрдХреНрд╕ рдкрд░ рдкреНрд░рд╛рдЗрдореЗрдЯ рдХрд╛ рдПрдХ рд╕реЗрдЯ рджреЗрддрд╛ рд╣реИред
  • getNumPrimitiveSets () - рдЗрд╕ рдЬреНрдпрд╛рдорд┐рддрд┐ рд╕реЗ рдЬреБрдбрд╝реЗ рдЖрджрд┐рдо рдХреЗ рд╕реЗрдЯ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

Osg :: PrimitiveSet рд╡рд░реНрдЧ рд╕рд╛рд░ рд╣реИ рдФрд░ рдЗрд╕реЗ рддрддреНрдХрд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рд╡реНрдпреБрддреНрдкрдиреНрди рд╡рд░реНрдЧ рдЬреЛ рдХрд┐ OpenGL рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЖрджрд┐рдорддрд╛ рдХреЗ рд╕реЗрдЯ рдХреЛ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ osg :: DrawArrays рдФрд░ osg :: DrawElementsUInt, рдЗрд╕рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВред

Osg :: DrawArrays рд╡рд░реНрдЧ рдПрдХ рдЬреНрдпрд╛рдорд┐рддреАрдп рдЖрджрд┐рдо рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╕рд░рдгреА рдХреЗ рдХрдИ рд▓рдЧрд╛рддрд╛рд░ рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╣рдХрд░ рдЬреНрдпрд╛рдорд┐рддрд┐ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдФрд░ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 geom->addPrimitiveSet(new osg::DrawArrays(mode, first, count)); 

рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдореЛрдб рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд OpenGL рдХреЗ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ: GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLES, GL_QUAD_STRIP, GL_QUADS рдФрд░ GLAADADSред

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

6. рдЙрджрд╛рд╣рд░рдг - рдПрдХ рдЪрд┐рддреНрд░рд┐рдд рд╡рд░реНрдЧ рдЦреАрдВрдЪрдирд╛


рд╣рдо рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХреЛ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ

рдХреНрд╡рд╛рдб рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб
main.h

 #ifndef MAIN_H #define MAIN_H #include <osg/Geometry> #include <osg/Geode> #include <osgViewer/Viewer> #endif // MAIN_H 

main.cpp

 #include "main.h" int main(int argc, char *argv[]) { osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array; vertices->push_back(osg::Vec3(0.0f, 0.0f, 0.0f)); vertices->push_back(osg::Vec3(1.0f, 0.0f, 0.0f)); vertices->push_back(osg::Vec3(1.0f, 0.0f, 1.0f)); vertices->push_back(osg::Vec3(0.0f, 0.0f, 1.0f)); osg::ref_ptr<osg::Vec3Array> normals = new osg::Vec3Array; normals->push_back(osg::Vec3(0.0f, -1.0f, 0.0f)); osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array; colors->push_back(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f)); colors->push_back(osg::Vec4(0.0f, 1.0f, 0.0f, 1.0f)); colors->push_back(osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f)); colors->push_back(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f)); osg::ref_ptr<osg::Geometry> quad = new osg::Geometry; quad->setVertexArray(vertices.get()); quad->setNormalArray(normals.get()); quad->setNormalBinding(osg::Geometry::BIND_OVERALL); quad->setColorArray(colors.get()); quad->setColorBinding(osg::Geometry::BIND_PER_VERTEX); quad->addPrimitiveSet(new osg::DrawArrays(GL_QUADS, 0, 4)); osg::ref_ptr<osg::Geode> root = new osg::Geode; root->addDrawable(quad.get()); osgViewer::Viewer viewer; viewer.setSceneData(root.get()); return viewer.run(); } 


рд╕рдВрдХрд▓рди рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ



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

 osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array; vertices->push_back(osg::Vec3(0.0f, 0.0f, 0.0f)); vertices->push_back(osg::Vec3(1.0f, 0.0f, 0.0f)); vertices->push_back(osg::Vec3(1.0f, 0.0f, 1.0f)); vertices->push_back(osg::Vec3(0.0f, 0.0f, 1.0f)); 

рдЕрдЧрд▓рд╛ рд╣рдо рдорд╛рдирджрдВрдб рдХреА рд╕рд░рдгреА рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдмрд╕ рд╡рд░реНрдЧ рдХреЗ рд╡рд┐рдорд╛рди рдХреЗ рд▓рдВрдмрд╡рдд рдирд┐рд░реНрджреЗрд╢рд┐рдд рдПрдХ рдЗрдХрд╛рдИ рд╡реЗрдХреНрдЯрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ

 osg::ref_ptr<osg::Vec3Array> normals = new osg::Vec3Array; normals->push_back(osg::Vec3(0.0f, -1.0f, 0.0f)); 

рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рдВрдЧ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ

 osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array; colors->push_back(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f)); colors->push_back(osg::Vec4(0.0f, 1.0f, 0.0f, 1.0f)); colors->push_back(osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f)); colors->push_back(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f)); 

рдЕрдм рдПрдХ рдЬреНрдпрд╛рдорд┐рддрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рд░реЗрдВрдбрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рдЗрд╕ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ рд▓рдВрдмрд╡рдд рд╕рд░рдгреА рджреЗрддреЗ рд╣реИрдВ

 osg::ref_ptr<osg::Geometry> quad = new osg::Geometry; quad->setVertexArray(vertices.get()); 

рдорд╛рдирджрдВрдбреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЗрдВрдЬрди рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рдПрдХрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╡рд┐рдзрд┐ ("рдмрд╛рдЗрдВрдбрд┐рдВрдЧ") рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдХреЗ BIND_OVAERALL

 quad->setNormalArray(normals.get()); quad->setNormalBinding(osg::Geometry::BIND_OVERALL); 

рд╢реАрд░реНрд╖реЛрдВ рдХреЗ рд░рдВрдЧреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реБрдП, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдо рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХрд╛ рдЕрдкрдирд╛ рд░рдВрдЧ рд╣реЛрдЧрд╛

 quad->setColorArray(colors.get()); quad->setColorBinding(osg::Geometry::BIND_PER_VERTEX); 

рдЕрдм рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЖрджрд┐рдо рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛рдПрдВред рд╣рдо рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрдЧрд╛рдХрд╛рд░ (GL_QUADS) рдЪреЗрд╣рд░реЛрдВ рдХреЛ рд╡рд░реНрдЯреЗрдХреНрд╕ рдРрд░реЗ рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдкрд╣рд▓реЗ рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдбреЗрдХреНрд╕ 0 рдХреЗ рд╕рд╛рде рд╡рд░реНрдЯреЗрдХреНрд╕ рд▓реЗрдирд╛ рдФрд░ рд╡рд░реНрдЯрд┐рдХрд▓ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ 4 рд╣реЛрдЧреА

 quad->addPrimitiveSet(new osg::DrawArrays(GL_QUADS, 0, 4)); 

рдЦреИрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдФрд░ рд░реЗрдВрдбрд░ рдХреЗ рд▓реЙрдиреНрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ

 osg::ref_ptr<osg::Geode> root = new osg::Geode; root->addDrawable(quad.get()); osgViewer::Viewer viewer; viewer.setSceneData(root.get()); return viewer.run(); 

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рд╢реБрджреНрдз OpenGL рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ

 static const GLfloat vertices[][3] = { тАж }; glEnableClientState( GL_VERTEX_ARRAY ); glVertexPointer( 4, GL_FLOAT, 0, vertices ); glDrawArrays( GL_QUADS, 0, 4 ); 

7. рдЖрджрд┐рдо рдореЗрдВ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдЕрдиреБрдХреНрд░рдордг


рдУрдПрд╕рдЬреА :: рдбреНрд░реЙрдЕрд░реНрд╕ рдХреНрд▓рд╛рд╕ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЕрдВрддрд░рд╛рд▓ рд╕реЗ рд╕реАрдзреЗ рдРрд░реЗрдЯреЗрдХреНрд╕ рдбреЗрдЯрд╛ рдкрдврд╝рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЗрддрдирд╛ рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рд╣реА рд╢реАрд░реНрд╖ рд╡рд╕реНрддреБ рдХреЗ рдХрдИ рдЪреЗрд╣рд░реЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛред рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред



рдХреНрдпреВрдм рдХреЗ рдЖрда рдХреЛрдиреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдВрдХрдбрд╝реЗ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рд╣рдо рд╡рд┐рдорд╛рди рдкрд░ рдХреНрдпреВрдм рдХреЗ рд╕рд╛рдордиреЗ рдХреА рдУрд░ рджреЗрдЦрддреЗ рд╣реИрдВ) рдХреБрдЫ рдХреЛрдиреЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЪреЗрд╣рд░реЗ рдХреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк 12 рддреНрд░рд┐рдХреЛрдгреАрдп рдЪреЗрд╣рд░реЛрдВ рдХрд╛ рдПрдХ рдШрди рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдпреЗ рдХреЛрдиреЗ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ 8 рдХреЛрдиреЗ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рдмрдЬрд╛рдп, рд╣рдореЗрдВ 36 рдХреЛрдиреЗ рдХреА рдПрдХ рд╕рд░рдгреА рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╣реА рд╢реАрд░реНрд╖ рд╣реИрдВ!

OSG рдХрдХреНрд╖рд╛рдПрдВ osg :: DrawElementsUInt, osg :: DrawElementsUByte рдФрд░ osg :: DrawElementsUShort, рдЬреЛ рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЯреЗрдХреНрд╕ рдЗрдВрдбреЗрдХреНрд╕ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЕрдиреБрдХреНрд░рдорд┐рдд рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рдПрдБ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рдПрдБ рдЕрдиреБрджреИрд░реНрдзреНрдп рдХреЗ рд╡рд░реНрдЯрд┐рдХрд▓ рдХрд╛ рдЕрдиреБрдХреНрд░рдордг рдХрд░рддреА рд╣реИрдВ рдЬреЛ рдЪреЗрд╣рд░реЗ рдФрд░ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рдЕрдиреНрдп рддрддреНрд╡реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпреВрдм рдХреЗ рд▓рд┐рдП рдЗрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдЖрда рдЦрд╛рдВрдЪреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЬреЛ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪреЗрд╣рд░реЗ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред

рдкреНрд░рдХрд╛рд░ рдСрдЧ рдХреА рдХрдХреНрд╖рд╛рдПрдВ :: рдбреНрд░реЙрдЗрд▓рд┐рд╢ * рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдорд╛рдирдХ рд╡рд░реНрдЧ рдПрд╕рдЯреАрдбреА :: рд╡реЗрдХреНрдЯрд░ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

 osg::ref_ptr<osg::DrawElementsUInt> de = new osg::DrawElementsUInt(GL_TRIANGLES); de->push_back(0); de->push_back(1); de->push_back(2); de->push_back(3); de->push_back(0); de->push_back(2); 

рдпрд╣ рдХреЛрдб рдЖрдХреГрддрд┐ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдХреНрдпреВрдм рдХреЗ рд╕рд╛рдордиреЗ рдХреЗ рднрд╛рдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЖрдЗрдП рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдгрд╛рддреНрдордХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ - рдПрдХ рдСрдХреНрдЯрд╛рд╣реЗрдбреНрд░реЙрди



рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдЫрд╣ рдХреЛрдиреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдЪрд╛рд░ рддреНрд░рд┐рдХреЛрдгреАрдп рдЪреЗрд╣рд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ! рд╣рдо osg :: DrawArrays рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдЖрда рдЪреЗрд╣рд░реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 24 рдХреЛрдиреЗ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдЕрдиреНрдпрдерд╛ рдХрд░реЗрдВрдЧреЗ - рд╣рдо рдЫрд╣ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдХреЛрдиреЗ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╣рдо рдСрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪреЗрд╣рд░реЗ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ :: DrawElementsUInt рд╡рд░реНрдЧред

рдСрдХреНрдЯрд╛рд╣реЗрдбреНрд░реЛрди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕реНрд░реЛрдд
main.h
 #ifndef MAIN_H #define MAIN_H #include <osg/Geometry> #include <osg/Geode> #include <osgUtil/SmoothingVisitor> #include <osgViewer/Viewer> #endif 

main.cpp
 #include "main.h" int main(int argc, char *argv[]) { osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array(6); (*vertices)[0].set( 0.0f, 0.0f, 1.0f); (*vertices)[1].set(-0.5f, -0.5f, 0.0f); (*vertices)[2].set( 0.5f, -0.5f, 0.0f); (*vertices)[3].set( 0.5f, 0.5f, 0.0f); (*vertices)[4].set(-0.5f, 0.5f, 0.0f); (*vertices)[5].set( 0.0f, 0.0f, -1.0f); osg::ref_ptr<osg::DrawElementsUInt> indices = new osg::DrawElementsUInt(GL_TRIANGLES, 24); (*indices)[ 0] = 0; (*indices)[ 1] = 1; (*indices)[ 2] = 2; (*indices)[ 3] = 0; (*indices)[ 4] = 4; (*indices)[ 5] = 1; (*indices)[ 6] = 4; (*indices)[ 7] = 5; (*indices)[ 8] = 1; (*indices)[ 9] = 4; (*indices)[10] = 3; (*indices)[11] = 5; (*indices)[12] = 3; (*indices)[13] = 2; (*indices)[14] = 5; (*indices)[15] = 1; (*indices)[16] = 5; (*indices)[17] = 2; (*indices)[18] = 3; (*indices)[19] = 0; (*indices)[20] = 2; (*indices)[21] = 0; (*indices)[22] = 3; (*indices)[23] = 4; osg::ref_ptr<osg::Geometry> geom = new osg::Geometry; geom->setVertexArray(vertices.get()); geom->addPrimitiveSet(indices.get()); osgUtil::SmoothingVisitor::smooth(*geom); osg::ref_ptr<osg::Geode> root = new osg::Geode; root->addDrawable(geom.get()); osgViewer::Viewer viewer; viewer.setSceneData(root.get()); return viewer.run(); } 


рдЖрдЗрдП рдЗрд╕ рдХреЛрдб рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред рдмреЗрд╢рдХ, рд╣рдо рдЬреЛ рдкрд╣рд▓реА рдЪреАрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдЫрд╣ рд╕рд┐рд░реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддрд╛ рд╣реИ

 osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array(6); (*vertices)[0].set( 0.0f, 0.0f, 1.0f); (*vertices)[1].set(-0.5f, -0.5f, 0.0f); (*vertices)[2].set( 0.5f, -0.5f, 0.0f); (*vertices)[3].set( 0.5f, 0.5f, 0.0f); (*vertices)[4].set(-0.5f, 0.5f, 0.0f); (*vertices)[5].set( 0.0f, 0.0f, -1.0f); 

рд╣рдо рдкреЙрдЗрдВрдЯрд░ рдФрд░ рдСрдкрд░реЗрдЯрд░ [] рдСрдкрд░реЗрдЯрд░ (рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ osg :: Array рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ std :: рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рдорд╛рди рд╣реИ) рдХреЗ dereferencing рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реАрдзреЗ рдЕрдкрдиреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╡реЗрдХреНрдЯрд░ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЛ рдЖрд░рдВрдн рдХрд░рддреЗ рд╣реИрдВред

рдЕрдм рд╡рд░реНрдЯреЗрдХреНрд╕ рдЗрдВрдбреЗрдХреНрд╕ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдЪреЗрд╣рд░реЗ рдмрдирд╛рдПрдВ

 osg::ref_ptr<osg::DrawElementsUInt> indices = new osg::DrawElementsUInt(GL_TRIANGLES, 24); (*indices)[ 0] = 0; (*indices)[ 1] = 1; (*indices)[ 2] = 2; //  0 (*indices)[ 3] = 0; (*indices)[ 4] = 4; (*indices)[ 5] = 1; //  1 (*indices)[ 6] = 4; (*indices)[ 7] = 5; (*indices)[ 8] = 1; //  2 (*indices)[ 9] = 4; (*indices)[10] = 3; (*indices)[11] = 5; //  3 (*indices)[12] = 3; (*indices)[13] = 2; (*indices)[14] = 5; //  4 (*indices)[15] = 1; (*indices)[16] = 5; (*indices)[17] = 2; //  5 (*indices)[18] = 3; (*indices)[19] = 0; (*indices)[20] = 2; //  6 (*indices)[21] = 0; (*indices)[22] = 3; (*indices)[23] = 4; //  7 

рдЪреЗрд╣рд░реЗ рддреНрд░рд┐рдХреЛрдгреАрдп рд╣реЛрдВрдЧреЗ, 8 рд╣реЛрдВрдЧреЗ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ 24 рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╕рд░рдгреА рдореЗрдВ рдЪреЗрд╣рд░реЗ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪреЗрд╣рд░реЗ 0 рдХрд╛ рдЧрдарди рд╡рд░реНрдЯрд┐рдХрд▓ 0, 1, рдФрд░ 2 рд╕реЗ рд╣реЛрддрд╛ рд╣реИ; рдЪреЗрд╣рд░рд╛ 1 - рдХреЛрдиреЗ 0, 4 рдФрд░ 1; рдЪреЗрд╣рд░рд╛ 2 - рдХреЛрдиреЗ 4, 5 рдФрд░ 1 рдФрд░ рдЗрддрдиреЗ рдкрд░ред рдпрджрд┐ рдЖрдк рдЪреЗрд╣рд░реЗ рдХреЗ рдореБрдЦ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ (рддреЛ рдКрдкрд░ рджреА рдЧрдИ рдЖрдХреГрддрд┐ рджреЗрдЦреЗрдВ) рд╡рд░реНрдЯрд┐рдХрд▓ рдХреЛ рд╡рд╛рдорд╛рд╡рд░реНрдд рдХреНрд░рдо рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╣рдордиреЗ рдЬреЛ рдЬреНрдпрд╛рдорд┐рддрд┐ рдмрдирд╛рдИ рд╣реИ, рдЙрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХрджрдоред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рд╣рдордиреЗ рдирд╣реАрдВ рдХреА рд╡рд╣ рдереА рд╕реНрдореВрде (рдПрд╡рд░реЗрдЬреЗрдб) рдиреЙрд░реНрдореНрд╕ рдХреА рдСрдЯреЛрдореИрдЯрд┐рдХ рдЬрдирд░реЗрд╢рди, рдЬрд┐рд╕реЗ рд╣рдо рдХреЙрд▓ рдХрд░рдХреЗ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ

 osgUtil::SmoothingVisitor::smooth(*geom); 

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдХрд┐рд╕реА рдЪреЗрд╣рд░реЗ рдХреЗ рдХреЛрдиреЗ рджрд┐рдП рдЧрдП рд╣реИрдВ, рддреЛ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЬрд┐рди рдХреЛрдгреЛрдВ рдкрд░ рдХрдИ рдЪреЗрд╣рд░реЗ рдЕрднрд┐рд╕рд┐рдВрдЪрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдФрд╕рдд рд╕рд╛рдорд╛рдиреНрдп рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ - рдЕрднрд┐рд╕рд╛рд░реА рдЪреЗрд╣рд░реЛрдВ рдХреЗ рдорд╛рдирджрдВрдб рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рд░рд╛рд╢рд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ рдСрдкрд░реЗрд╢рди (рдФрд░ рд╕рд╛рде рд╣реА рдмрд╣реБрдд рдЕрдзрд┐рдХ!) рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рд╣реА рдСрд╕реНрдЧреБрд▓реЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ * .pro рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд╕рд╛рде рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХрд░ рдореЗрдВ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝реЗрдВрдЧреЗ

octahedron.pro

 CONFIG(debug, debug|release) { TARGET = $$join(TARGET,,,_d) . . . LIBS += -L$$OSG_LIB_DIRECTORY -losgUtild } else { . . . LIBS += -L$$OSG_LIB_DIRECTORY -losgUtil } 

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВ



рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдУрдкрдирдЬреАрдПрд▓ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ



рд╡рд░реНрдЯреЗрдХреНрд╕ рдРрд░реЗ рдореИрдХреЗрдирд┐рдЬрд╝реНрдо рдУрдкрдирдЬреАрдПрд▓ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдореЛрд░реА рдореЗрдВ рд╡рд░реНрдЯреЗрдХреНрд╕ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ OpenGL рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╢реАрд░реНрд╖ рд╕рд░рдгрд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдорд┐рд▓рддреА рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрд░реЗрдЦ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдУрдПрдирдЬреАрд╕реАрдПрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рд╡рд░реНрдЯреЗрдХреНрд╕ рдмрдлрд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░, рдПрдХ рдХреНрд░рдордмрджреНрдз рддрд░реАрдХреЗ рд╕реЗ, рдкреНрд░рд╛рдЗрдореЗрдЯрд░реАрдЬ рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ * Array () рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ osg :: рдЬреНрдпрд╛рдорд┐рддрд┐ рд╡рд░реНрдЧред Osg :: DrawArrays рд╡рд░реНрдЧ рдЗрди рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдзреЗ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред

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

8. рдмрд╣реБрднреБрдЬ рдЬрд╛рд▓ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддрдХрдиреАрдХ


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

рд╡рд░реНрдгрд┐рдд рддрдХрдиреАрдХреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  1. рдСрд╕рдЧреБрддрд┐рд▓ :: рд╕рд░рд▓реАрдХреГрдд - рдЬреНрдпрд╛рдорд┐рддрд┐ рдореЗрдВ рддреНрд░рд┐рдХреЛрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ред рдореЙрдбрд▓ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ () рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  2. osgUtil :: SmootingVisitor - рдорд╛рдирджрдВрдбреЛрдВ рдХреА рдЧрдгрдирд╛ред рдЪрд┐рдХрдиреА () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЪрд┐рдХрдиреА рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрдЬрд╛рдп рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдФрд░ рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
  3. osgUtil :: TangentSpaceGenerator - рдореЙрдбрд▓ рдХреЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд░реНрд╢рд░реЗрдЦрд╛ рдЖрдзрд╛рд░ рд╡реИрдХреНрдЯрд░ рдХреА рдкреАрдврд╝реАред рдпрд╣ рдЬрдирд░реЗрдЯ () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ getTangentArray (), getNormalArray (), рдФрд░ getBinormalArray () рд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рд╣реЗрдЬрддрд╛ рд╣реИред GLSL рдореЗрдВ рд╢реЗрдбреНрд╕ рд▓рд┐рдЦрддреЗ рд╕рдордп рдЗрди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рд╢реАрд░реНрд╖ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  4. osgUtil :: Tesselator - рдПрдХ рдмрд╣реБрднреБрдЬ рдЬрд╛рд▓ рдХреЗ tessellation рдХрд░рддрд╛ рд╣реИ - рд╕рд░рд▓ (retesselatePolygons () рд╡рд┐рдзрд┐) рдХреЗ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдЬрдЯрд┐рд▓ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╕ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ
  5. osgUtil :: TriStripVisitor - рдПрдХ рдЬреНрдпрд╛рдорд┐рддреАрдп рд╕рддрд╣ рдХреЛ рддреНрд░рд┐рдХреЛрдгреАрдп рдЪреЗрд╣рд░реЛрдВ рдХреЗ рд╕реНрдЯреНрд░рд┐рдкреНрд╕ рдХреЗ рдПрдХ рд╕реЗрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХреБрд╢рд▓ рдореЗрдореЛрд░реА рдЦрдкрдд рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдкрд╛рджрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕реНрдЯреНрд░рд┐рдкрд┐рдлрд╛рдИ () рд╡рд┐рдзрд┐ GL_TRIANGLE_STRIP рд╕реЗрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореЙрдбрд▓ рдкреНрд░рд╛рдЗрдореЗрдЯрд░реАрдЬ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЛ рдЬреНрдпрд╛рдорд┐рддрд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╡рд╕реНрддреБ рдХреЗ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓реЗрддреА рд╣реИрдВ, рдЬреИрд╕реЗ рдСрдЧреНрдореЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд: рдЬреНрдпрд╛рдорд┐рддрд┐ рдФрд░ рд▓рд┐рдВрдХ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

 osgUtil::TriStripVisitor tsv; tsv.stripify(*geom); 

рдЬрд╣рд╛рдВ рдЬрд┐рдпреЛрдо рдПрдХ рд╕реНрдорд╛рд░реНрдЯ рдкреЙрдЗрдВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреА рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдХрдХреНрд╖рд╛рдПрдВ osg :: рд╕рд░рд▓реАрдХреГрдд, osg :: SmoothingVisitor рдФрд░ osg :: TriStripVisitor рд╕реАрдзреЗ рджреГрд╢реНрдп рдЧреНрд░рд╛рдл рдореЗрдВ рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

 osgUtil::TriStripVisitor tsv; node->accept(tsv); 

рд╕реНрд╡реАрдХрд╛рд░ () рд╡рд┐рдзрд┐ рд╕рднреА рдмрдЪреНрдЪреЗ рдХреЗ рдиреЛрдбреНрд╕ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдСрдкрд░реЗрд╢рди рдСрд╕рдЧ рдХреЗ рдиреЛрдбреНрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рджреГрд╢реНрдп рдкреЗрдбрд╝ рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд╕рднреА рдЯрд░реНрдорд┐рдирд▓ рдиреЛрдбреНрд╕ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ: Geode рдкреНрд░рдХрд╛рд░ред

рдЖрдЗрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЯреЗрд╕реЗрд▓реЗрд╢рди рддрдХрдиреАрдХ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рдкреВрд░реНрдг рдЯрд╕реЗрд▓реЗрдЯрд░ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб
main.h
 #ifndef MAIN_H #define MAIN_H #include <osg/Geometry> #include <osg/Geode> #include <osgUtil/Tessellator> #include <osgViewer/Viewer> #endif 

main.cpp
 #include "main.h" int main(int argc, char *argv[]) { /*    ----- | _| | |_ | | ----- */ osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array; vertices->push_back( osg::Vec3(0.0f, 0.0f, 0.0f) ); // 0 vertices->push_back( osg::Vec3(2.0f, 0.0f, 0.0f) ); // 1 vertices->push_back( osg::Vec3(2.0f, 0.0f, 1.0f) ); // 2 vertices->push_back( osg::Vec3(1.0f, 0.0f, 1.0f) ); // 3 vertices->push_back( osg::Vec3(1.0f, 0.0f, 2.0f) ); // 4 vertices->push_back( osg::Vec3(2.0f, 0.0f, 2.0f) ); // 5 vertices->push_back( osg::Vec3(2.0f, 0.0f, 3.0f) ); // 6 vertices->push_back( osg::Vec3(0.0f, 0.0f, 3.0f) ); // 7 osg::ref_ptr<osg::Vec3Array> normals = new osg::Vec3Array; normals->push_back( osg::Vec3(0.0f, -1.0f, 0.0f) ); osg::ref_ptr<osg::Geometry> geom = new osg::Geometry; geom->setVertexArray(vertices.get()); geom->setNormalArray(normals.get()); geom->setNormalBinding(osg::Geometry::BIND_OVERALL); geom->addPrimitiveSet(new osg::DrawArrays(GL_POLYGON, 0, 8)); osg::ref_ptr<osg::Geode> root = new osg::Geode; root->addDrawable(geom.get()); osgViewer::Viewer viewer; viewer.setSceneData(root.get()); return viewer.run(); } 


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



рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрдорд┐рдд рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ рджрд░реНрд╢рдХ рдХреЗ рдкрд╛рд╕ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

 osgUtil::Tessellator ts; ts.retessellatePolygons(*geom); 

рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ



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

OsgUtil :: Tessellator рд╡рд░реНрдЧ рдПрдХ рдЙрддреНрддрд▓ рдмрд╣реБрднреБрдЬ рдХреЛ рдЧреИрд░-рдЙрддреНрддрд▓ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ GL_TRIANGLE_STRIP рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред



рдпрд╣ рд╡рд░реНрдЧ рдЫреЗрдж рдмрд╣реБрднреБрдЬ рдФрд░ рд╕реНрд╡-рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдмрд╣реБрднреБрдЬ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ setWindsType () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдореЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ GLU_TESS_WINDING_ODD рдпрд╛ GLU_TESS_WINDING_NONZERO, рдЬреЛ рдПрдХ рдЬрдЯрд┐рд▓ рдПрдВрдЯреЛрдирд┐рдпреЛ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдФрд░ рдмрд╛рд╣рд░реА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред

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


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

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

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


All Articles