本文整理汇总了C#中Ray.GetID方法的典型用法代码示例。如果您正苦于以下问题:C# Ray.GetID方法的具体用法?C# Ray.GetID怎么用?C# Ray.GetID使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Ray
的用法示例。
在下文中一共展示了Ray.GetID方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Intersect
/**
* Intersect
*
* @param ray
* @param pt
* @return boolean
*/
public override bool Intersect(Ray ray, IntersectPt pt)
{
double vd = Normal.Dot(ray.GetDirection());
double vo, t;
Vector origVec = new Vector(ray.GetOrigin().GetX(), ray.GetOrigin().GetY(), ray.GetOrigin().GetZ());
if(vd == 0.0f)
{
return (false);
}
vo = -Normal.Dot(origVec) - D;
t = vo / vd;
if(t < pt.GetThreshold())
{
return (false);
}
pt.GetIntersection().Combine(ray.GetOrigin(), ray.GetDirection(), 1.0f, t);
if(!Check(ray, pt))
{
return (false);
}
pt.SetT(t);
pt.SetIntersectObj(this);
if(GetObjID() == pt.GetOriginal())
{
pt.SetEnter(false);
}
else
{
pt.SetEnter(true);
}
GetCachePt().Set(ray.GetID(), pt);
return (true);
}
示例2: FindNearestIsect
/**
* FindNearestIsect
*
* @param octree
* @param ray
* @param originID
* @param level
* @param isectnode
* @return boolean
*/
public bool FindNearestIsect(OctNode octree, Ray ray, int originID, int level, OctNode isectnode)
{
Point testpt = new Point(ray.GetOrigin());
OctNode current;
ObjNode currentnode;
CacheIntersectPt isectptr;
IntersectPt test = new IntersectPt();
if(level == 0)
{
testpt.Combine(ray.GetOrigin(), ray.GetDirection(), 1.0f, Threshold);
}
current = octree.FindTreeNode(testpt);
IntersectObj = null;
while(current != null)
{
currentnode = current.GetList();
while(currentnode != null)
{
bool found = false;
if(currentnode.GetObj().GetCachePt().GetID() == ray.GetID())
{
isectptr = currentnode.GetObj().GetCachePt();
if(current == current.FindTreeNode(isectptr.GetIntersection()))
{
if(IntersectObj == null)
{
SetIsectPt(isectptr);
isectnode.Copy(current);
}
else
{
if(isectptr.GetT() < t)
{
SetIsectPt(isectptr);
isectnode.Copy(current);
}
}
found = true;
}
}
if(!found)
{
test.SetOrigID(originID);
if(currentnode.GetObj().Intersect(ray, test))
{
if(current == current.FindTreeNode(test.GetIntersection()))
{
if(IntersectObj == null)
{
SetIsectPt(test);
isectnode.Copy(current);
}
else
{
if(test.GetT() < t)
{
SetIsectPt(test);
isectnode.Copy(current);
}
}
}
}
}
currentnode = currentnode.Next();
}
if(IntersectObj == null)
{
OctNode adjacent = current.Intersect(ray, testpt, Threshold);
if(adjacent == null)
{
current = null;
}
else
{
current = adjacent.FindTreeNode(testpt);
}
}
else
{
current = null;
}
}
if(IntersectObj == null)
{
return (false);
}
else
{
//.........这里部分代码省略.........
示例3: Intersect
/**
* Intersect
*
* @param ray
* @param pt
* @return boolean
*/
public override bool Intersect(Ray ray, IntersectPt pt)
{
Vector OC = new Vector();
double l2OC, tCA, t2HC;
OC.Sub(Origin, ray.GetOrigin());
l2OC = OC.SquaredLength();
tCA = OC.Dot(ray.GetDirection());
if(l2OC >= RadiusSquare && tCA <= 0)
{
return (false);
}
t2HC = RadiusSquare - l2OC + tCA * tCA;
if(t2HC < 0)
{
return (false);
}
if(l2OC <= RadiusSquare)
{
pt.SetT(tCA + (double)System.Math.Sqrt(t2HC));
if(pt.GetT() < pt.GetThreshold())
{
return (false);
}
pt.SetEnter(false);
pt.GetIntersection().Combine(ray.GetOrigin(), ray.GetDirection(), 1.0f, pt.GetT());
}
else
{
pt.SetT(tCA - (double)System.Math.Sqrt(t2HC));
pt.SetEnter(true);
if(pt.GetT() < pt.GetThreshold())
{
pt.SetT(tCA + (double)System.Math.Sqrt(t2HC));
pt.SetEnter(false);
}
pt.GetIntersection().Combine(ray.GetOrigin(), ray.GetDirection(), 1.0f, pt.GetT());
}
pt.SetIntersectObj(this);
GetCachePt().Set(ray.GetID(), pt);
return (true);
}
示例4: FindLightBlock
/**
* FindLightBlock
*
* @param tree
* @param ray
* @param maxt
* @return boolean
*/
private bool FindLightBlock(OctNode tree, Ray ray, double maxt)
{
OctNode current = tree.FindTreeNode(ray.GetOrigin());
IntersectPt test = new IntersectPt();
Point testpt = new Point();
while(current != null)
{
ObjNode currentnode = current.GetList();
while(currentnode != null)
{
bool found = false;
if(currentnode.GetObj().GetCachePt().GetID() == ray.GetID())
{
found = true;
}
if(!found)
{
test.SetOrigID(0);
if(currentnode.GetObj().Intersect(ray, test))
{
if(test.GetT() < maxt)
{
return (true);
}
}
}
currentnode = currentnode.Next();
}
OctNode adjacent = current.Intersect(ray, testpt, test.GetThreshold());
if(adjacent == null)
{
current = null;
}
else
{
current = adjacent.FindTreeNode(testpt);
}
}
return (false);
}