C++ 如何在DirectX 11中使用细分绘制虚线图案3D线?

C++ 如何在DirectX 11中使用细分绘制虚线图案3D线?,c++,directx-11,tessellation,C++,Directx 11,Tessellation,我需要在directx 11中绘制线条,它将显示类似GDI中虚线笔绘制的颜色。我知道细分将在每条线之间放置更多顶点。有人告诉我如何在directx 11中绘制虚线图案吗?您可以在屏幕空间的像素着色器中平铺一个小纹理。以下是像素着色器的外观: Texture2D<float4> patternTexture : register(t0); static const uint2 patternSize = uint2( 8, 8 ); float4 main( float4 scree

我需要在directx 11中绘制线条,它将显示类似GDI中虚线笔绘制的颜色。我知道细分将在每条线之间放置更多顶点。有人告诉我如何在directx 11中绘制虚线图案吗?

您可以在屏幕空间的像素着色器中平铺一个小纹理。以下是像素着色器的外观:

Texture2D<float4> patternTexture : register(t0);
static const uint2 patternSize = uint2( 8, 8 );

float4 main( float4 screenSpace : SV_Position ) : SV_Target
{
    // Convert position to pixels
    const uint2 px = (uint2)screenSpace.xy;

    // Tile the pattern texture.
    // patternSize is constexpr;
    // if it's power of 2, the `%` will compile into bitwise and, much faster.
    const uint2 readPosition = px % patternSize;

    // Read from the pattern texture
    return patternTexture.Load( uint3( readposition, 0 ) );
}

不要使用更多的竖线;你可以用像素着色器来做。@Stefan是的,我没有使用更多的顶点,我想知道细分是否能带来我期望的结果-一组连接线,每条线都会显示交替颜色的点条纹,如GDI图案penYEs,我是说;如果你的目标是我需要在directx 11中画线,这将显示像GDI中的虚线笔绘制的颜色;那么你就不应该使用tesselation。如果要使用Tesselation;这是可行的,但我想很难。如何在像素着色器中如此轻松地绘制虚线图案?我能用简单的算法实现吗。我需要建议。我认为最好是提出一个新的问题,解释你到底想要什么。你想要一条二维线吗?还是表面上的一条线?还是一些斧头?
float4 main( float4 color: COLOR0, float4 screenSpace : SV_Position ) : SV_Target
{
    // Discard every second pixel
    const uint2 px = ((uint2)screenSpace.xy) & uint2( 1, 1 );
    if( 0 != ( px.x ^ px.y ) )
        return color;
    discard;
    return float4( 0 );
}