有没有办法用我自己的代码替换光栅器?

Is there a way to replace the rasterizer with my own code?

我了解到图形管道 运行 是这样的:

但我希望它 运行 像这样:

有什么建议吗?这可能吗?

简答:否

长答案:有点。

您无法使用自定义代码控制光栅化过程,但可以控制要光栅化的最终像素。控制光栅化过程相当于剔除您不想通过各种模式出现的像素。

以下是您可以控制的内容,转述自here(DirectX 和OpenGL/Vulkan 的原理相同)

  • 填充模式:应光栅化三角形内部的多少。
    • 实心:显示整个三角形用颜色填充。
    • 线框:仅显示三角形的线框。
  • 剔除模式:应该从光栅化中移除三角形的哪个面。
    • None:显示两边;不要剔除任何东西。
    • 背部:不要露出背部。
    • 正面:不显示正面。
    • 两者:根本不显示三角形。 (这种情况很少见,通常通过其他方式完成)
  • 缠绕顺序:给定顶点顺序方向确定三角形的正面。
    • Clockwise:正面由顺时针的绕线顺序决定。
    • Counterclockwise: 前面由逆时针顺序决定。
  • 剪刀:允许一次剪掉整个区域。
    • Enable/Disable:实际剪刀区域是通过视口定义的。
  • DepthBias:将重叠的顶点移动多少以防止 Z 冲突。
    • Enable/Disable
    • 钳制:改变深度值的最大值。
  • SlopeScaledDepthBias:主要用于阴影缓冲区。
  • DepthClip:裁剪太远的像素。