代码之家  ›  专栏  ›  技术社区  ›  Yippie-Ki-Yay

C++着色器优化问题

  •  0
  • Yippie-Ki-Yay  · 技术社区  · 14 年前

    有人能给我解释一下像素和顶点着色器交互的基础知识吗。

    显而易见的是 顶点渲染 接收基本顶点属性,然后 重铺 有些是真的 像素着色器 .

    但实际情况如何 vertex->pixel 过渡发生了? 我知道很明显,所有类型的管道都包括光栅化器更改,它可以插值顶点参数,并可以基于特定的纹理坐标应用纹理。

    据我所知,它们也是插值的(目前还不太确定,听说了一些关于复杂的紫外导数数学,但我假设我们 可以说 它们正在被插入)。


    所以,这里有一些“有针对性”的问题。

    像素着色器如何操作?我的意思是像素明暗器显然有一些动作 “每像素” ,但由于 不可见顶点->像素过渡 这就产生了一些问题。

    我能假设如果我评估 矩阵向量积 一旦 在我的像素着色器中,它将被计算 一旦 当图像被光栅化时?或者更好的方法是评估顶点着色器中可能的所有内容,然后将其传递给像素着色器?

    另外,如果有人能就这个话题提出文章/摘要,我将非常感激。

    谢谢您。


    更新

    我觉得其实没关系,因为每个地方的互动应该都是一样的。我在发展 可视化应用程序 游戏 对于台式机,使用HLSL/GLSL/NVIDIA CG作为着色器,主要是C++作为基础语言。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Stack Overflow is garbage    14 年前

    顶点着色器对每个顶点执行一次。它允许您将顶点从世界空间坐标(或其他坐标系)转换为屏幕空间坐标。

    也就是说,如果你有一个三角形,每个顶点都会被变换,所以它最终会在屏幕上有一个位置。

    给定这些位置,光栅化器确定哪些像素被这三个顶点跨越的三角形覆盖。

    然后,对于三角形内的每个像素,调用像素着色器。顶点着色器的输出通常为每个像素插值,因此接近顶点的像素 v0 将接收与顶点着色器计算的值非常接近的值 v0号 .

    这意味着你在像素着色器中所做的每件事都会执行一次 被光栅化的原语覆盖的每像素