繁体   English   中英

如何设置着色器以在dx11中渲染一个带有颜色的对象以及另一个带有纹理的对象?

[英]how to set shader to render one object with color and another with texture in dx11?

在线教程几乎告诉我们使用colortexture渲染对象,但是没有人告诉我们是否要一个对象使用colortexture渲染,而另一个对象使用纹理进行渲染。

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

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

要么

struct VS_INPUT
{
    float4 Pos : POSITION;
    float2 Tex : TEXCOORD0;
};

struct PS_INPUT
{
    float4 Pos : SV_POSITION;
    float2 Tex : TEXCOORD0;
};

所以我该如何设置struct或VSPS函数来用颜色渲染一个对象,而使用纹理渲染另一个对象?还有,我的项目是Windows10 SDK。

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

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的组合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM