我想使用以HLSL编写的像素着色器将圆渲染到三角形对上。这个here有一些伪代码,但是在实现它时我遇到了另一个问题。这将在Windows RT上运行,因此我仅限于Direct3D v11 API的DirectX 9.3成员。

着色器的一般形状是什么?例如,应将哪些参数传递给main方法?

任何建议或工作代码将不胜感激!

最佳答案

您应该将纹理坐标用作输入以渲染参数圆。

我询问有关对HLSL中渲染的圆进行抗锯齿的Here is a question。这是该问题的代码,仅作了微小的更改,以使TEXCOORD0的使用更加清晰:

float4 PixelShaderFunction(float2 texCoord : TEXCOORD0) : COLOR0
{
    float dist = texCoord.x * texCoord.x
               + texCoord.y * texCoord.y;
    if(dist < 1)
        return float4(0, 0, 0, 1);
    else
        return float4(1, 1, 1, 1);
}

它使用公式计算出一个r²=x²+y²的圆。它使用常数1表示半径平方(即,以纹理坐标为单位的半径为1的圆)。圆内的所有点都被涂成黑色,外面的所有点都被涂成白色。

要使用它,请提供三角形的纹理坐标范围为[-1,1]。如果要使用更传统的[0,1],则必须在着色器中包含一些代码以缩放和偏移坐标,否则将获得四分之一圆。

一旦启动并运行,就可以尝试添加其他功能(例如:根据我的链接问题进行抗锯齿)。

10-06 04:10