⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 finish.cxx

📁 [Game.Programming].Academic - Graphics Gems (6 books source code)
💻 CXX
字号:
#include <iostream.h>#include <math.h>#include "global.h"ostream& operator<<(ostream& o, finish& f) {        o<<"finish {\n";        o<<"diffuse "<<f.kd<<"  "<<"brilliance "<<f.kb<<"\n";        o<<"crand "<<f.kc<<"  "<<"ambient "<<f.ka<<"\n";        o<<"reflection "<<f.kr<<"\n";        o<<"phong "<<f.ks<<"  "<<"phong_size "<<f.kp<<"\n";        o<<"specular "<<f.kh<<"  "<<"roughness "<<f.kg<<"\n";        if(f.km) o<<"metallic\n";        o<<"refraction "<<f.kt<<"  "<<"ior "<<f.ki<<"\n";        o<<"}\n";        return o;}extern vector norm(vector& v);intensity finish::surfoptics(color& c, vector& n, ray& r, intersect& i){        intensity I(this->ka, this->ka, this->ka);        for(lightsource *ls=lightsources.first(); ls; ls=lightsources.next()) {                list<light*>* L=ls->illum(i);                for(light *l=L->first(); l; l=L->next()) {                        double f=n%l->v;                        vector h=norm(l->v+(-r.d));                        double j=n%h;                        double g=pow(j,this->kp);                        if(f>0.)                                I+=c*l->i*(this->kd*f+ this->ks*g);                        delete l;                }                delete L;        }        if(this->kr) {                vector d=norm(r.d-n*((n%r.d)*2));                ray rr(i.p,d,r.l+1,2*r.c+1);                I+=trace(rr)*this->kr ;        }        if(this->kt) {                vector l=-r.d;                double ci=l%n;                double ct=1+(this->ki*this->ki)*(ci*ci-1);                if(ct>=0.) {                        vector d=norm(r.d*this->ki+n*(this->ki*ci-sqrt(ct)));                        ray rt(i.p,d,r.l+1,2*r.c+2);                        I+=trace(rt)*this->kt;                }        }        return I;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -