当前位置: 首页>>代码示例>>C#>>正文


C# Ray.GetID方法代码示例

本文整理汇总了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);
	}
开发者ID:lewurm,项目名称:benchmarker,代码行数:41,代码来源:PolyTypeObj.cs

示例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
		{
//.........这里部分代码省略.........
开发者ID:lewurm,项目名称:benchmarker,代码行数:101,代码来源:IntersectPt.cs

示例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);
	}
开发者ID:lewurm,项目名称:benchmarker,代码行数:49,代码来源:SphereObj.cs

示例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);
	}
开发者ID:lewurm,项目名称:benchmarker,代码行数:49,代码来源:Scene.cs


注:本文中的Ray.GetID方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。