//----------------------------------------------------------------------------- void mglCanvasGL::AddLight(int n,mglPoint r,mglPoint d,char cc, mreal br,mreal /*ap*/) { mglColor c(cc); mglColor AmbLight = mglColor(AmbBr,AmbBr,AmbBr); mglColor DifLight = mglColor(br,br,br); GLenum lght[8] = {GL_LIGHT0,GL_LIGHT1,GL_LIGHT2,GL_LIGHT3,GL_LIGHT4, GL_LIGHT5,GL_LIGHT6,GL_LIGHT7}; float amb[4], pos[4],dif[4],dir[4]; bool inf = mgl_isnan(r.x); if(n<0 || n>7) { SetWarn(mglWarnLId,"AddLight"); return; } if(c.Valid()) { DifLight = c*br; AmbLight = c*AmbBr; } dif[0] = DifLight.r; dif[1] = DifLight.g; dif[2] = DifLight.b; dif[3] = 1.; amb[0] = AmbLight.r; amb[1] = AmbLight.g; amb[2] = AmbLight.b; amb[3] = 1.; if(inf) { pos[0] = d.x; pos[1] = d.y; pos[2] = d.z; pos[3] = 0; } else { pos[0] = r.x; pos[1] = r.y; pos[2] = r.z; pos[3] = 1; } dir[0] = d.x; dir[1] = d.y; dir[2] = d.z; glShadeModel(GL_SMOOTH); //glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 5.0); //glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, pos); glLightfv(lght[n], GL_AMBIENT, amb); glLightfv(lght[n], GL_DIFFUSE, dif); //glLightfv(lght[n], GL_SPECULAR, spc); glLightfv(lght[n], GL_POSITION, pos); if(!inf) glLightfv(lght[n], GL_SPOT_DIRECTION, dir); glEnable(lght[n]); }
//----------------------------------------------------------------------------- void mglCanvasGL::Clf(mglColor Back) { mglCanvas::Clf(Back); if(Back==NC) Back = mglColor(BDef[0]/255.,BDef[1]/255.,BDef[2]/255.); gl_clf(Back); }
//----------------------------------------------------------------------------- void mglCanvasGL::Clf(const char *col) { mglCanvas::Clf(col); gl_clf(mglColor(BDef[0]/255.,BDef[1]/255.,BDef[2]/255.)); }
void MGL_EXPORT mgl_clf_rgb_(uintptr_t *gr, mreal *r, mreal *g, mreal *b) { _GR_->Clf(mglColor(*r,*g,*b)); }
void MGL_EXPORT mgl_clf_chr_(uintptr_t *gr, const char *ch, int) { _GR_->Clf(mglColor(*ch)); }
void MGL_EXPORT mgl_clf_rgb(HMGL gr, double r, double g, double b) { mglCanvas *gg = dynamic_cast<mglCanvas *>(gr); if(gg) gg->Clf(mglColor(r,g,b)); }
void MGL_EXPORT mgl_clf_chr(HMGL gr, char ch) { mglCanvas *g = dynamic_cast<mglCanvas *>(gr); if(g) g->Clf(mglColor(ch)); }
//----------------------------------------------------------------------------- void MGL_EXPORT mgl_set_color(char id, double r, double g, double b) { for(long i=0;mglColorIds[i].id;i++) if(mglColorIds[i].id==id) mglColorIds[i].col = mglColor(r,g,b); }