关于矢量,顶点,边缘,光线,线条和线条的实现的一般性问题。线段

时间:2010-02-14 00:16:53

标签: vector line raytracing edges line-segment

这只是一个关于光线(和/或线段或边缘等)的 LARGE 广义问题,以及它们在软件渲染的3d引擎中的位置,该引擎是/不执行光线跟踪操作。我正在学习基础知识,我是第一个承认我对这些东西知之甚少的人,所以请善待。 :)

好的,我想知道为什么不使用参数化线而不是光线(或者它们是??)。我查看了互联网上的几个cpp文件,看到有几个资源定义了一个Ray.cpp对象,一个有顶点和一个向量,另一个用点和向量。我也是线条和线段背后的数学新手,所以请光临我。我非常确定您可以定义仅包含法线或矢量的无限线,然后沿该线定义交叉点以创建线段作为该无限线的子集。有没有当前的引擎以这种方式实现线路,还是有更好的方法来解决这个问题?

为了增加进一步的复杂性(或简单性?),维基百科说在向量空间中,线段的端点通常是向量,尤其是u - >。 u + v,如果用空间中的向量定义一条线而不是与已经定义的无限线相交,那么会产生很多因素,但是我找不到任何这样的暗示,这让我想知道我在应用这个时的思想的有效性。在查看Flash 3D引擎Papervision时,我会创建一个3D引擎,甚至更复杂,我查看了Ray类,它将6个单独的数值作为参数,然后将它们作为2个不同的Number3D返回,(Papervision相当于一个Vector),数据类型?!?

无论如何,我非常有兴趣看到实际上使用 CORRECT 方法实现这些低级别部分的实现。关于这类事情的任何帮助,来源或一些好的对话都会很棒。 :d

1 个答案:

答案 0 :(得分:1)

  

我很确定你可以定义一个只有法线或矢量的无限行

不,你不能。向量将定义线的方向,但所有平行线共享相同的方向,因此要选择一个,您需要使用线穿过的特定点将其固定。

线通常以Origin + Direction * K形式定义,其中K将采用任何实际值,因为该形式对于其他数学来说很容易。你也可以在线上使用两个点。