Directx 置换着色器渲染问题(在前面的顶部绘制背面)

Directx 置换着色器渲染问题(在前面的顶部绘制背面),directx,shader,hlsl,directx-11,sharpdx,Directx,Shader,Hlsl,Directx 11,Sharpdx,我正在使用sharpdx访问directX 11,并在一个平面上运行我编写的这个非常简单的置换着色器 没有多个位置,场景中没有其他对象,只有一个在单个绘制调用中具有置换着色器的高多边形平面 虽然一开始它渲染得很好,但随着时间的推移,我会将其旋转到“非常奇怪”的角度(这不是背面问题,我只是在向上轴上旋转它,并且以角度的方式旋转,当问题出现时,背面不可见) 有些区域似乎被画上了(后面的多边形被画上了前面的多边形),您可以在这里看到这是什么样子: 另一件完全无法描述的事情发生了,不确定我是否能用文字

我正在使用sharpdx访问directX 11,并在一个平面上运行我编写的这个非常简单的置换着色器

没有多个位置,场景中没有其他对象,只有一个在单个绘制调用中具有置换着色器的高多边形平面

虽然一开始它渲染得很好,但随着时间的推移,我会将其旋转到“非常奇怪”的角度(这不是背面问题,我只是在向上轴上旋转它,并且以角度的方式旋转,当问题出现时,背面不可见)

  • 有些区域似乎被画上了(后面的多边形被画上了前面的多边形),您可以在这里看到这是什么样子:
  • 另一件完全无法描述的事情发生了,不确定我是否能用文字表达出来,但如果不清楚,请让我知道,我将尝试拍摄视频:通过某个旋转点,就好像一条光线从屏幕上“渐进”过来从左到右重新建模曲面,在光线中留下奇怪的瑕疵,并降低了经过光线的几何体
我正在使用的着色器:

struct VS_IN
{
    float4 pos : POSITION;
    float2 tex : TEXCOORD;
};

struct PS_IN
{
    float4 pos : SV_POSITION;
    float2 tex : TEXCOORD;
};

float4x4 worldViewProj;

Texture2D<float4> diffuse: register(t0);
Texture2D<float4> height: register(t1);
Texture2D<float4> lightmap: register(t2);
SamplerState pictureSampler;

PS_IN VS( VS_IN input )
{
    PS_IN output = (PS_IN) 0;   
    input.pos.z += height.SampleLevel(pictureSampler, input.tex, 0).r /2;
    output.pos = mul(input.pos, worldViewProj);
    output.tex = input.tex;
    return output;
}

float4 PS( PS_IN input ) : SV_Target
{
    return diffuse.Sample(pictureSampler, input.tex) * lightmap.Sample(pictureSampler, input.tex);
}
struct VS\u IN
{
浮动4位:位置;
浮动2 tex:TEXCOORD;
};
结构PS_IN
{
浮动4位置:SV_位置;
浮动2 tex:TEXCOORD;
};
浮动4x4 worldViewProj;
纹理2d漫反射:寄存器(t0);
纹理2d高度:寄存器(t1);
纹理2d光照贴图:寄存器(t2);
采样器状态图采样器;
VS中的PS_(输入中的VS_)
{
输出中的PS_=(PS_IN)0;
input.pos.z+=高度.SampleLevel(pictureSampler,input.tex,0).r/2;
output.pos=mul(input.pos,worldViewProj);
output.tex=input.tex;
返回输出;
}
浮动4 PS(输入中的PS_):SV_目标
{
返回diffuse.Sample(pictureSampler,input.tex)*lightmap.Sample(pictureSampler,input.tex);
}

看起来您没有正确设置深度测试。这就解释了为什么从某些角度看它是正确的,而从其他角度看它是不正确的,因为它取决于三角形在顶部出现的顺序


您是否创建了深度缓冲区、设置了深度缓冲区、清除了深度缓冲区并设置了与之匹配的DepthStencilState?

我实际上没有这样做,但我很高兴看到这听起来不像是着色器问题,而是一些定义得很好的问题,我可以用谷歌搜索,感谢您为我指明了正确的方向:)