在DirectX中使用像素着色器渲染圆形

3
我希望使用HLSL编写像素着色器,在三角形对上渲染一个圆。这里link有一些伪代码,但是在实现时遇到了一个又一个的问题。由于我要在Windows RT上运行,因此我只能使用Direct3D v11 API的DirectX 9.3成员。
着色器的一般形状是什么?例如,应该向主方法传递哪些参数?
非常感谢任何建议或可用的代码!
1个回答

3
你应该使用纹理坐标作为参数来渲染参数圆。这里是我关于在HLSL中反走样渲染圆的问题提出的问题。以下是那个问题中的代码,稍微做了一点修改以更清晰地使用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],则必须在着色器中包含一些代码来缩放和偏移坐标,否则您将得到一个四分之一圆。
一旦您将其设置好并运行,您可以尝试添加其他功能(例如:根据我链接的问题进行抗锯齿处理)。

1
此外,这里有一个关于在HLSL中绘制圆的他人问题,值得一读。他们讨论了如何绘制轮廓 - 我的代码绘制的是实心圆。 - Andrew Russell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接