是否可以在顶点着色器中访问多边形中的所有顶点?

时间:2012-01-18 18:24:30

标签: shader unity3d fragment-shader cg vertex-shader

我正在尝试在Unity中创建线框顶点/片段着色器。根据{{​​3}},似乎有可能。一般的想法似乎是你将顶点着色器中计算的距离向量传递给片段着色器中的每个片段,它可以用来根据多边形内的位置确定绘制线框线的亮度。

从我读过的其他内容来看,您似乎只能访问顶点着色器中的单个顶点。我需要访问多边形中的所有相邻顶点以获得ecah顶点。该论文似乎暗示几何着色器不是必需的,这很好,因为Unity还不支持它们。

我错过了什么?是否永远不可能访问顶点着色器中的相邻顶点?如果没有几何着色器,我正在尝试做什么?

1 个答案:

答案 0 :(得分:2)

您似乎确实已经过度阅读了2.1中的段落

  

步骤G1通常总是在顶点着色器中执行。步骤G2   应该在几何着色器中执行几何着色器   可以访问多边形的所有顶点(前提是它是一个三角形)。   因此,如果未使用几何着色器,则使用顶点着色器   需要接收其他顶点作为属性才能进行计算   距离。这需要应用程序代码不是不变的   是否使用线框方法,需要额外的数据   传输,最后,使用索引基元   排除因为顶点的属性取决于哪个三角形   绘制。

因此,当不使用几何着色器时,您确实不知道三角形的其他顶点,因此必须将它们作为附加顶点属性进行传输。因此,对于三角形的每个顶点,您有两个额外的vec3属性,包含此三角形的另外两个顶点的位置。当然,就像文本所说,你不能使用索引绘图,因为这两个属性不仅取决于顶点位置,还取决于这个顶点所属的三角形。