本文整理汇总了C++中Point3::Length方法的典型用法代码示例。如果您正苦于以下问题:C++ Point3::Length方法的具体用法?C++ Point3::Length怎么用?C++ Point3::Length使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Point3
的用法示例。
在下文中一共展示了Point3::Length方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getRefractionVector
Point3 getRefractionVector(Point3 view, Point3 normal, float n1, float n2)
{
Point3 Vnormal = normal;
float cosThetaOne = view.Dot(normal) / view.Length();
float sinThetaTwo = (n1 / n2) * sqrt(1 - pow(cosThetaOne, 2));
float cosThetaTwo = sqrt(1 - pow(sinThetaTwo, 2));
Point3 Vt = (view - (view.Dot(normal)*normal)).GetNormalized();
/******************Total Internal Reflection **************************/
//if (sinThetaTwo > 1 || sinThetaTwo < -1) //Checking total interanl reflection
// return(getReflectionVector(-view, normal)); //If happened returning a reflection vector
/*************************End Total Internal Reflection***************/
return ((cosThetaTwo * -1 * Vnormal) + (sinThetaTwo * -1 * Vt));
}
示例2: CalcBoundingSphere
void Exporter::CalcBoundingSphere(INode *node, Point3 center, float& radius, int all)
{
if (nullptr == node)
return;
Matrix3 tm = node->GetObjTMAfterWSM(0);
Point3 pt = (tm.GetTrans() - center);
float len = pt.Length();
if (node->IsBoneShowing()) {
radius = max(len, radius);
}
else {
if (Object *o = node->GetObjectRef()) {
if (o->SuperClassID() == GEOMOBJECT_CLASS_ID) {
if (o->ClassID() == BONE_OBJ_CLASSID
|| o->ClassID() == Class_ID(BONE_CLASS_ID, 0)
|| o->ClassID() == Class_ID(0x00009125, 0) /* Biped Twist Helpers */
)
{
radius = max(len, radius);
}
else
{
radius = max(len, radius);
}
}
else if (mExportCameras && o->SuperClassID() == CAMERA_CLASS_ID)
{
radius = max(len, radius);
}
}
}
if (all < 0)
return;
all = (all>0 ? all : -1);
for (int i = 0; i < node->NumberOfChildren(); i++) {
CalcBoundingSphere(node->GetChildNode(i), center, radius, all);
}
}
示例3: Shade
Color MtlBlinn::Shade(const Cone &ray, const HitInfo &hInfo, const LightList &lights, int bounceCount) const{
float bias = BIAS_SHADING;
Color shade;
Color rShade = Color(0,0,0);
Color tShade = Color(0,0,0);
const Material *mat;
mat = hInfo.node->GetMaterial();
const MtlBlinn* mb =static_cast<const MtlBlinn*>(mat);
// cout<<"HInfo front: "<<hInfo.front<<endl;
/* local copy */
Point3 P;
P.Set(hInfo.p.x,hInfo.p.y,hInfo.p.z);
Cone iRay = ray;
Color ambInt = mb->diffuse.Sample(hInfo.uvw, hInfo.duvw);
Color allOther = Color(0,0,0);
Color diffuse = mb->diffuse.Sample(hInfo.uvw, hInfo.duvw);
Color ambComponent = Color(0,0,0);
Point3 newN = hInfo.N;
for ( unsigned int i=0; i<lights.size(); i++ ) {
if(lights[i]->IsAmbient()){
// cout<<"ambient "<<endl;
Color intensity = lights[i]->Illuminate(hInfo.p);
ambComponent += (ambInt * intensity);
continue;
}
else{
// cout<<"other lighting "<<endl;
Point3 L = -lights[i]->Direction(P);
L.Normalize();
Point3 V = ray.p - P;
V.Normalize();
Point3 LplusV = L + V;
Point3 H = (L+V)/LplusV.Length();
H.Normalize();
float alpha = mb->glossiness;
// Point3 N = hInfo.N;
Point3 N = newN;
float S = H.Dot(N);
S = pow(S,alpha);
float costheta = L.Dot(N)/(L.Length() * N.Length());
Color intensity = lights[i]->Illuminate(P);
// cout<<"costheta "<<endl;
allOther += intensity * (costheta>0?costheta:0) * (diffuse + S * (mb->specular.Sample(hInfo.uvw, hInfo.duvw))) ;
}
/* finally add inta*cola + intall*costheta*(cold + s* colS)*/
shade = ambComponent + allOther;
}
/* Calculate refraction */
if(refraction.GetColor().r>0 && bounceCount>0){
//compute new jittered normal
float gloss = refractionGlossiness;
if(gloss){
float random = rand()/(float)RAND_MAX;
float rRadius = sqrtf(random) * gloss;
random = rand()/(float)RAND_MAX;
float rAngle = random * 2.0 * M_PI;
float x = rRadius * cos(rAngle);
float y = rRadius * sin(rAngle);
Point3 xAxis(1,0,0), yAxis(0,1,0), v1, v2, normalDir;
normalDir = hInfo.N;
// normalDir.Normalize();
if(normalDir.Dot(xAxis) > 0.7) v1 = normalDir.Cross(yAxis);
else v1 = normalDir.Cross(xAxis);
v2 = v1.Cross(normalDir);
v1.Normalize(); v2.Normalize();
v1 *= x;
v2 *= y;
newN = hInfo.N + v1.Length() + v2.Length();
newN.Normalize();
}
else{
newN = hInfo.N;
}
//-------------------------------------
Color reflShade = Color(0,0,0);
float R0, Refl = 0.0f, Trans = 0.0f;
HitInfo temp;
temp.Init();
// Point3 N = hInfo.N;
Point3 N = newN;
// Point3 V = Point3(iRay.p.x - hInfo.p.x, iRay.p.y - hInfo.p.y, iRay.p.z - hInfo.p.z);
Point3 V = Point3(hInfo.p.x - iRay.p.x, hInfo.p.y - iRay.p.y, hInfo.p.z - iRay.p.z);
V.Normalize();
float n1 = 1, n2 = 1;
if(hInfo.front){ /* Hitting from outside */
// temp.front = false;
n2 = ior;
// cout<<"outside "<<endl;
}
else if(!hInfo.front){ /* Transmission from the inside */
//.........这里部分代码省略.........
示例4: Shade
Color MtlBlinn::Shade(const Ray &ray, const HitInfo &hInfo, const LightList &lights, int bounceCount) const{
float bias = BIAS_SHADING;
Color shade;
Color rShade = Color(0,0,0);
Color tShade = Color(0,0,0);
const Material *mat;
mat = hInfo.node->GetMaterial();
const MtlBlinn* mb =static_cast<const MtlBlinn*>(mat);
// cout<<"HInfo front: "<<hInfo.front<<endl;
/* local copy */
Point3 P;
P.Set(hInfo.p.x,hInfo.p.y,hInfo.p.z);
Ray iRay = ray;
Color ambInt = mb->diffuse;
Color allOther = Color(0,0,0);
Color diffuse = mb->diffuse;;
Color ambComponent = Color(0,0,0);
for ( unsigned int i=0; i<lights.size(); i++ ) {
if(lights[i]->IsAmbient()){
// cout<<"ambient "<<endl;
Color intensity = lights[i]->Illuminate(hInfo.p);
ambComponent += (ambInt * intensity);
continue;
}
else{
// cout<<"other lighting "<<endl;
Point3 L = -lights[i]->Direction(P);
L.Normalize();
Point3 V = ray.p - P;
V.Normalize();
Point3 LplusV = L + V;
Point3 H = (L+V)/LplusV.Length();
H.Normalize();
float alpha = mb->glossiness;
Point3 N = hInfo.N;
float S = H.Dot(N);
S = pow(S,alpha);
float costheta = L.Dot(N)/(L.Length() * N.Length());
Color intensity = lights[i]->Illuminate(P);
// cout<<"costheta "<<endl;
allOther += intensity * (costheta>0?costheta:0) * (diffuse + S * (mb->specular)) ;
}
/* finally add inta*cola + intall*costheta*(cold + s* colS)*/
shade = ambComponent + allOther;
}
/* Calculate refraction */
if(refraction.Grey()>0 && bounceCount>0){
Color reflShade = Color(0,0,0);
float R0, Refl = 0.0f, Trans = 0.0f;
HitInfo temp;
temp.Init();
Point3 N = hInfo.N;
// Point3 V = Point3(iRay.p.x - hInfo.p.x, iRay.p.y - hInfo.p.y, iRay.p.z - hInfo.p.z);
Point3 V = Point3(hInfo.p.x - iRay.p.x, hInfo.p.y - iRay.p.y, hInfo.p.z - iRay.p.z);
V.Normalize();
float n1 = 1, n2 = 1;
if(hInfo.front){ /* Hitting from outside */
// temp.front = false;
n2 = ior;
// cout<<"outside "<<endl;
}
else if(!hInfo.front){ /* Transmission from the inside */
// temp.front = true;
n1 = ior;
// cout<<"intside... "<<endl;
N = -hInfo.N;
}
float ratio_n = n1 / n2;
float costheta_v = -V.Dot(N); /* refer: http://graphics.stanford.edu/courses/cs148-10-summer/docs/2006--degreve--reflection_refraction.pdf */
float sin2theta_t = ratio_n * ratio_n * (1 - costheta_v * costheta_v);
Point3 T = ratio_n * V + (ratio_n * costheta_v - sqrtf(1 - sin2theta_t)) * N ;
// cout<<ratio_n<<" "<<"cos_v "<<costheta_v<<" sin2theta_t "<<sin2theta_t<<endl;
Ray tRay = Ray(hInfo.p,T);
//tRay.dir.Normalize();
tRay.p.x = tRay.p.x + bias *tRay.dir.x; /* add bias */
tRay.p.y = tRay.p.y + bias *tRay.dir.y;
tRay.p.z = tRay.p.z + bias *tRay.dir.z;
// cout<<"B temp front: "<< temp.front<<endl;
if(sin2theta_t <= 1){
if(RayTrace_2(tRay, temp)){
// bounceCount--;
// cout<<"A temp front: "<< temp.front<<endl;
tShade = temp.node->GetMaterial()->Shade(tRay,temp,lights,bounceCount);
tShade.r *= exp(-absorption.r * temp.z);
tShade.g *= exp(-absorption.g * temp.z);
tShade.b *= exp(-absorption.b * temp.z);
// shade = tShade; /* remove later */
// return shade;
//.........这里部分代码省略.........
示例5: proc
int EggShapeCreateCallBack::proc(ViewExp *vpt,int msg, int point, int flags, IPoint2 m, Matrix3& mat )
{
UNUSED_PARAM(flags);
if (msg==MOUSE_POINT||msg==MOUSE_MOVE)
{
switch(point)
{
case 0:
{
ob->suspendSnap = TRUE;
sp0 = m;
p0 = vpt->SnapPoint(m,m,NULL,SNAP_IN_PLANE);
mat.SetTrans(p0);
ob->GetParamBlock(egg_shape_params)->SetValue(egg_shape_length, ob->ip->GetTime(), 0.0f);
ob->GetParamBlock(egg_shape_params)->SetValue(egg_shape_width, ob->ip->GetTime(), 0.0f);
ob->GetParamBlock(egg_shape_params)->SetValue(egg_shape_thickness, ob->ip->GetTime(), 0.0f);
ob->GetParamBlock(egg_shape_params)->SetValue(egg_shape_rotation, ob->ip->GetTime(), 0.0f);
break;
}
case 1:
{
p1 = vpt->SnapPoint(m,m,NULL,SNAP_IN_PLANE);
// Assumption here is that p1 is on the X-Y plane.
Point3 a = p1 - p0;
Point3 b;
float com_factor = 6/(4-CENTER_OF_MASS_OFFSET);
size1 = Length(a) * com_factor;
b = Point3((float)0.0, size1, (float)0.0);
float angle = acos((a%b)/(a.Length()*b.Length())) * TO_DEG * ((a.x>0) ? -1:1);
//Set the overall size in parameter block
ob->GetParamBlock(egg_shape_params)->SetValue(egg_shape_length, ob->ip->GetTime(), size1);
ob->GetParamBlock(egg_shape_params)->SetValue(egg_shape_width, ob->ip->GetTime(), size1*TO_WIDTH);
ob->GetParamBlock(egg_shape_params)->SetValue(egg_shape_rotation, ob->ip->GetTime(), angle);
theEggShapeParmBlock.InvalidateUI();
if((size1-EPSILON)<0.0 && msg==MOUSE_POINT)
{
ob->suspendSnap = FALSE;
return CREATE_ABORT;
}
break;
}
case 2:
{
BOOL should_make_donut = TRUE;
ob->GetParamBlock(egg_shape_params)->GetValue(egg_shape_make_donut, ob->ip->GetTime(), should_make_donut, ob->ivalid);
if(should_make_donut)
{
p2 = vpt->SnapPoint(m,m,NULL,SNAP_IN_PLANE);
size2 = Length(p2-p0) - Length(p1-p0);
//Set the overall size in parameter block
ob->GetParamBlock(egg_shape_params)->SetValue(egg_shape_thickness, ob->ip->GetTime(), size2);
theEggShapeParmBlock.InvalidateUI();
if(msg == MOUSE_POINT)
{
ob->suspendSnap = FALSE;
return CREATE_STOP;
}
break;
}
}
case 3:
{
return (size1 < EPSILON) ? CREATE_ABORT : CREATE_STOP;
}
}
}
else if (msg == MOUSE_ABORT)
{
return CREATE_ABORT;
}
return TRUE;
}