Stage3D,AGAL - 顶点'和纹理'坐标系

时间:2014-03-18 21:33:23

标签: actionscript-3 pixel-shader stage3d agal

我一直在尝试使用更复杂的着色器,并且遇到了顶点着色器和纹理采样器使用的坐标系的问题。简而言之:它们似乎没有任何意义,当试图测试它们时,我最终会得到不一致的结果。更糟糕的是,互联网几乎没有文档记录,我发现的大部分信息似乎都希望我知道它是如何工作的。我希望有人能澄清以下内容:

  • 顶点着色器传递表示渲染目标上某个位置的(x,y,z)。 x,y和z的可接受值是什么?
  • x和y如何对应后缓冲区的宽度和高度(假设它是渲染目标)?
  • x和y如何对应输出纹理的宽度和高度(假设它是渲染目标)?
  • 当x = 0且y = 0时,顶点位于何处?按位置?
  • 纹理采样器在(u,v)坐标处采样纹理。 u和v的可接受值是什么?
  • u和v如何与正在采样的纹理的宽度和高度相对应?
  • AGAL的包装,钳制和重复标记如何改变采样,当没有给出时,默认行为是什么?
  • 在u = 0和v = 0处采样时,哪个像素按位置返回?

修改 从我的测试中,我相信答案是:

  • 不确定
  • -1是左/下,1是右/上
  • 不确定
  • 位于输出的中心
  • 不确定
  • 0左/下,1是右/上
  • 不确定
  • 纹理的最左下角

1 个答案:

答案 0 :(得分:1)

  • 您通常使用自己的坐标系,然后将每个顶点的位置乘以MVP(模型 - 视图 - 投影)矩阵,以获得可作为顶点着色器输出提供给GPU的NDC坐标。有一个nice article解释了Stage3D的所有内容。
  • 正确。并且z在[0,1]
  • 范围内
  • 渲染到渲染目标与渲染到后台缓冲区相同 - 您从顶点着色器输出NDC,因此纹理的实际大小无关紧要。
  • Yup,屏幕中心。
  • 通常,它是[0,1]但你可以使用超出该范围的值,然后输出取决于纹理包装模式(如重复 clamp )在采样器上设置。
  • (0,0)左/上,(1,1)右/下。
  • 默认值为重复。这些模式决定了使用超出[0,1]范围的坐标进行采样时将获得的结果。如果模式设置为 clamp 重复 [1.5,1.5]将导致[0.5,0.5],而[1.0,1.0]将导致结果。
  • 纹理的左上角像素。