Esempio n. 1
0
int DirLight::Update(TimeValue t, const RendContext &rc, 
        RenderGlobalContext *rgc, BOOL shadows, BOOL shadowGeomChanged)
{
    int res = 1;
    BaseObjLight::Update(t,rc,rgc,shadows,shadowGeomChanged);
    hotsz = ls.hotsize;
    fallsz = ls.fallsize;
    fallsq = fallsz*fallsz;
    hotpct = ls.hotsize/ls.fallsize;
    ihotpct = 1.0f - hotpct;

    ObjectState os = inode->EvalWorldState(t);
    LightObject* lob = (LightObject *)os.obj;       
    assert(os.obj->SuperClassID()==LIGHT_CLASS_ID);
    plRTDirLight* gl = (lob->GetInterface(I_MAXSCRIPTPLUGIN) != NULL) ? (plRTDirLight*)lob->GetReference(0) : (plRTDirLight*)lob;  // JBW 4/7/99

    //projector =  gl->GetProjector();

    aspect = 1.0f;

    //if (projector){
    //      projMap = gl->GetProjMap();
    //      if( projMap ) projMap->Update(t,FOREVER);
    //  }
    return res;
};
Esempio n. 2
0
int OmniLight::Update(TimeValue t, const RendContext & rc,
        RenderGlobalContext *rgc, BOOL shadows, BOOL shadowGeomChanged)
{
    BaseObjLight::Update(t,rc,rgc,shadows,shadowGeomChanged);   

    ObjectState os = inode->EvalWorldState(t);
    LightObject* lob = (LightObject *)os.obj;       
    assert(os.obj->SuperClassID()==LIGHT_CLASS_ID);
    plRTOmniLight* gl = (lob->GetInterface(I_MAXSCRIPTPLUGIN) != NULL) ? (plRTOmniLight*)lob->GetReference(0) : (plRTOmniLight*)lob;  // JBW 4/7/99

    decayType = gl->GetDecayType(); 
    decayRadius = gl->GetDecayRadius(t);

    fov = HALFPI; // 90 degree fov
    int res=1;
    if(gl->GetTex())
        gl->GetTex()->Update(t, FOREVER);
    //projector =  gl->GetProjector();
    //if (projector){
    //  projMap = gl->GetProjMap();
    //  if( projMap ) projMap->Update(t,FOREVER);
    //}

    return res;
}
Esempio n. 3
0
int SpotLight::Update(TimeValue t, const RendContext &rc, RenderGlobalContext *rgc, BOOL shadows, BOOL shadowGeomChanged)
{
    int res = 1;
    BaseObjLight::Update(t,rc,rgc,shadows, shadowGeomChanged);

    float hs = DegToRad(ls.hotsize);
    float fs = DegToRad(ls.fallsize);
    fall_tan = (float)tan(fs/2.0f);
    hot_cos = (float)cos(hs/2.0f);
    fall_cos =(float)cos(fs/2.0f);
    fall_sin = (float)sin(fs/2.0f);
    hotpct = ls.hotsize/ls.fallsize;
    ihotpct = 1.0f - hotpct;        

    ObjectState os = inode->EvalWorldState(t);
    LightObject* lob = (LightObject *)os.obj;       
    assert(os.obj->SuperClassID()==LIGHT_CLASS_ID);
    plRTLightBase* gl = (lob->GetInterface(I_MAXSCRIPTPLUGIN) != NULL) ? (plRTLightBase*)lob->GetReference(0) : (plRTLightBase*)lob;  // JBW 4/7/99

    decayType = gl->GetDecayType(); 
    decayRadius = gl->GetDecayRadius(t);

    projector =  gl->GetProjector();
    fov = std::max(fs, hs);

    float aspect = 1.0f;
     
    fov = 2.0f* (float)atan(tan(fov*0.5f)*sqrt(aspect));
    zfac = -sz2 /(float)tan(0.5*(double)fov);
    xscale = zfac;                              
    yscale = -zfac*aspect;
    curve =(float)fabs(1.0f/xscale); 

    rectv0.y = fall_sin * (float)sqrt(aspect);
    rectv1.y = fall_sin / (float)sqrt(aspect);

    rectv0.x = rectv1.x = fall_cos;
    rectv0 = Normalize(rectv0);
    rectv1 = Normalize(rectv1);

    Interval v;
    if (projector){
        projMap = gl->GetProjMap();
        if( projMap ) projMap->Update(t,v);
    }

    return res;
}