如何设置着色器以在dx11中使用颜色渲染一个具有纹理的对象?

时间:2018-01-14 07:53:11

标签: c++ shader directx-11

在线教程几乎告诉我们使用<TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" /> color渲染对象,但没有人告诉我们是否需要一个对象渲染颜色和另一个渲染纹理。如下代码

texture

    struct VertexIn
{
    float4 Pos  : POSITION;
    float4 Color : COLOR;
};

struct VertexOut
{
    float4 Pos  : SV_POSITION;
    float4 Color : COLOR;
};

那么如何设置struct或struct VS_INPUT { float4 Pos : POSITION; float2 Tex : TEXCOORD0; }; struct PS_INPUT { float4 Pos : SV_POSITION; float2 Tex : TEXCOORD0; }; VS函数来渲染一个带有颜色的对象,另一个带有纹理?还有什么,我的项目是用windows10 sdk。

1 个答案:

答案 0 :(得分:1)

最好的方法是使用“Instance Buffers”。它们沿侧面顶点和索引缓冲区工作。每个对象不仅可以传递矩阵,还可以传递其他数据,例如浮点数,您可以使用这些数据来检查对象是应该使用颜色还是纹理。您需要将标志传递到像素着色器,以及颜色和纹理坐标。该标志可以像附加到实例的附加浮点一样简单。

struct PS_INPUT
{
    float4 Pos : SV_POSITION;
    float2 Tex : TEXCOORD0;
    float4 colour : COLOR;
    float4 flags : POSITION1;
};

我现在使用了position1,我记不起格式,但你应该使用int而不是float并将其设置为[nointerpolation],查找文档。

在您的像素着色器中,您可以执行以下操作。

colourout.rgb = texturesample.rgb * flags.x + colour.rgb * (1 - flags.x);

然后,只需将顶点缓冲区中的flags.x设置为0或1或2的组合。