++



         

- 3


else

if ( RiSpotLight *pslite =

dynamic_cast<RiSpotLight*>( plight ))

pslite->scls.cast_shadow_map();

//

( dynamic_cast  (RTTI). , . RTTI 19.)

, SCLS, (. . 18.1).

SoNode SCLS

SoLight

SoPointLight SoSpotLight SoDirectionalLight

RPointLight RSpotLight RDirectionalLight

. 18.1.

class RiDirectionalLight :

public SoDirectionalLight, public SCLS { ... };

class RiSpotLight :

public SoSpotLight, public SCLS { ... };

// ...

SoLight *plight = next_scene_light();

if ( SCLS *pscls = dynamic_cast<SCLS*>(plight))

pscls->cast_shadow_map();

. Open Inventor, , SoLight - SCLS cast_shadow_map():

class SoLight : public SoNode {

public:

void cast_shadow_map()

{ if ( _scls ) _scls->cast_shadow_map(); }

// ...

protected:

SCLS *_scls;

};

// ...

SdSoLight *plight = next_scene_light();

plight-> cast_shadow_map();

, ( ) ,  / C++.   istream ( ) ostream ( ). :

  • ( , ,   ..);



  •