//三维向量插值
staticEigen::Vector3finterpolate(floatalpha,floatbeta,floatgamma,constEigen::Vector3f&vert1,constEigen::Vector3f&vert2,constEigen::Vector3f&vert3,floatweight){return(alpha*vert1+beta*vert2+gamma*vert3)/weight;}// 二维向量插值
staticEigen::Vector2finterpolate(floatalpha,floatbeta,floatgamma,constEigen::Vector2f&vert1,constEigen::Vector2f&vert2,constEigen::Vector2f&vert3,floatweight){autou=(alpha*vert1[0]+beta*vert2[0]+gamma*vert3[0]);autov=(alpha*vert1[1]+beta*vert2[1]+gamma*vert3[1]);u/=weight;v/=weight;returnEigen::Vector2f(u,v);}//计算重心
staticstd::tuple<float,float,float>computeBarycentric2D(floatx,floaty,constVector4f*v){floatc1=(x*(v[1].y()-v[2].y())+(v[2].x()-v[1].x())*y+v[1].x()*v[2].y()-v[2].x()*v[1].y())/(v[0].x()*(v[1].y()-v[2].y())+(v[2].x()-v[1].x())*v[0].y()+v[1].x()*v[2].y()-v[2].x()*v[1].y());floatc2=(x*(v[2].y()-v[0].y())+(v[0].x()-v[2].x())*y+v[2].x()*v[0].y()-v[0].x()*v[2].y())/(v[1].x()*(v[2].y()-v[0].y())+(v[0].x()-v[2].x())*v[1].y()+v[2].x()*v[0].y()-v[0].x()*v[2].y());floatc3=(x*(v[0].y()-v[1].y())+(v[1].x()-v[0].x())*y+v[0].x()*v[1].y()-v[1].x()*v[0].y())/(v[2].x()*(v[0].y()-v[1].y())+(v[1].x()-v[0].x())*v[2].y()+v[0].x()*v[1].y()-v[1].x()*v[0].y());return{c1,c2,c3};}//光栅化时,判断深度之后进行插值计算得出对应的数值
// auto interpolated_color(颜色)
autointerpolated_color=interpolate(alpha,beta,gamma,t.color[0],t.color[1],t.color[2],1);// auto interpolated_normal(法线)
autointerpolated_normal=interpolate(alpha,beta,gamma,t.normal[0],t.normal[1],t.normal[2],1).normalized();// auto interpolated_texcoords(纹理坐标)
autointerpolated_texcoords=interpolate(alpha,beta,gamma,t.tex_coords[0],t.tex_coords[1],t.tex_coords[2],1);// auto interpolated_shadingcoords(着色坐标)
autointerpolated_shadingcoords=interpolate(alpha,beta,gamma,view_pos[0],view_pos[1],view_pos[2],1);