本文整理汇总了C++中Vector4::PerspectiveProject方法的典型用法代码示例。如果您正苦于以下问题:C++ Vector4::PerspectiveProject方法的具体用法?C++ Vector4::PerspectiveProject怎么用?C++ Vector4::PerspectiveProject使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Vector4
的用法示例。
在下文中一共展示了Vector4::PerspectiveProject方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: From
SBezier SBezier::From(Vector4 p0, Vector4 p1) {
SBezier ret;
//**walter steffe--begin
Vector pp0=p0.PerspectiveProject();
Vector pp1=p1.PerspectiveProject();
TColgp_Array1OfPnt AP(0,1);
TColStd_Array1OfReal AW(0,1);
AW.SetValue(0,p0.w);
AW.SetValue(1,p1.w);
AP.SetValue(0,gp_Pnt(pp0.x,pp0.y,pp0.z));
AP.SetValue(1,gp_Pnt(pp1.x,pp1.y,pp1.z));
gp_Pnt P0=AP.Value(0);
gp_Pnt P1=AP.Value(1);
double W0=AW.Value(0);
double W1=AW.Value(1);
Vector dpp=pp0.Minus(pp1);
if(dpp.Magnitude() > 1.e-10)
ret.hCurve=new Geom_BezierCurve(AP, AW);
// ret.hCurve=new Geom_BezierCurve(AP);
//**walter steffe--end
ZERO(&ret);
ret.deg = 1;
ret.weight[0] = p0.w;
ret.ctrl [0] = p0.PerspectiveProject();
ret.weight[1] = p1.w;
ret.ctrl [1] = p1.PerspectiveProject();
return ret;
}
示例2: From
SBezier SBezier::From(Vector4 p0, Vector4 p1) {
SBezier ret;
ZERO(&ret);
ret.deg = 1;
ret.weight[0] = p0.w;
ret.ctrl [0] = p0.PerspectiveProject();
ret.weight[1] = p1.w;
ret.ctrl [1] = p1.PerspectiveProject();
return ret;
}
示例3: InPerspective
//-----------------------------------------------------------------------------
// Apply a perspective transformation to a rational Bezier curve, calculating
// the new weights as required.
//-----------------------------------------------------------------------------
SBezier SBezier::InPerspective(Vector u, Vector v, Vector n,
Vector origin, double cameraTan)
{
Quaternion q = Quaternion::From(u, v);
q = q.Inverse();
// we want Q*(p - o) = Q*p - Q*o
SBezier ret = this->TransformedBy(q.Rotate(origin).ScaledBy(-1), q, 1.0);
int i;
for(i = 0; i <= deg; i++) {
Vector4 ct = Vector4::From(ret.weight[i], ret.ctrl[i]);
// so the desired curve, before perspective, is
// (x/w, y/w, z/w)
// and after perspective is
// ((x/w)/(1 - (z/w)*cameraTan, ...
// = (x/(w - z*cameraTan), ...
// so we want to let w' = w - z*cameraTan
ct.w = ct.w - ct.z*cameraTan;
ret.ctrl[i] = ct.PerspectiveProject();
ret.weight[i] = ct.w;
}
return ret;
}