本文整理汇总了C++中UVGen::GetBumpDP方法的典型用法代码示例。如果您正苦于以下问题:C++ UVGen::GetBumpDP方法的具体用法?C++ UVGen::GetBumpDP怎么用?C++ UVGen::GetBumpDP使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类UVGen
的用法示例。
在下文中一共展示了UVGen::GetBumpDP方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: EvalNormalPerturb
Point3 Gradient::EvalNormalPerturb(ShadeContext& sc)
{
Point3 dPdu, dPdv;
if (!sc.doMaps) return Point3(0,0,0);
if (gbufID) sc.SetGBufferID(gbufID);
Point2 dM = uvGen->EvalDeriv(sc,&mysamp);
uvGen->GetBumpDP(sc,dPdu,dPdv);
#if 0
// Blinn's algorithm
Point3 N = sc.Normal();
Point3 uVec = CrossProd(N,dPdv);
Point3 vVec = CrossProd(N,dPdu);
Point3 np = -dM.x*uVec+dM.y*vVec;
#else
// Lazy algorithm
Point3 np = dM.x*dPdu+dM.y*dPdv;
// return texout->Filter(dM.x*dPdu+dM.y*dPdv);
#endif
Texmap* sub[3];
for (int i=0; i<3; i++)
sub[i] = mapOn[i]?subTex[i]:NULL;
if (sub[0]||sub[1]||sub[2]) {
// d((1-k)*a + k*b ) = dk*(b-a) + k*(db-da) + da
float a,b,k;
Point3 da,db;
Point2 UV, dUV;
uvGen->GetUV(sc, UV,dUV);
k = gradFunc(UV.x,UV.y);
if (k<=center) {
k = k/center;
EVALSUBPERTURB(a,da,2);
EVALSUBPERTURB(b,db,1);
}
else {
k = (k-center)/(1.0f-center);
EVALSUBPERTURB(a,da,1);
EVALSUBPERTURB(b,db,0);
}
np = (b-a)*np + k*(db-da) + da;
}
return texout->Filter(np);
}