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

时间:2013-01-22 23:59:08

标签: hlsl directx-9 pixel-shader

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

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

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

1 个答案:

答案 0 :(得分:2)

您应该使用纹理坐标作为输入来渲染参数圆。

Here is a question我询问了在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],你必须在着色器中包含一些缩放和偏移坐标的代码,否则你将得到一个四分之一圆。

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