我不认为我的着色器在工作,寻求帮助

在UWP上使用sharpdx(directx 11)。

这是一个不能编译着色器文件(用hlsl编写)的问题的一个链接如何在UWP中编译着色器文件后来我发现了一些避免原始exception(无法打开或查找着色器文件)的方法,但是仍然着色器似乎没有工作。

“避免原始exception”的方法是将文件path更改为

System.IO.Path.Combine(Windows.ApplicationModel.Package.Current.InstalledLocation.Path, "ProjectName") 

如果方法有效,我肯定会把它作为上一个问题的答案

目前的问题是屏幕上没有显示(全黑),而我可以使用Visual Studio中内置的graphics诊断工具检查顶点缓冲区中存储的数据。 顶点缓冲区似乎工作正常

这里是我的着色器代码,问题可能会从这里开始,因为这是我写的第一个着色器文件。 请看看,讨论可能会出现问题。

像素着色器文件Pixel_PS.fx

 struct VertexOut { float4 PosH : SV_POSITION; float4 Color : COLOR; }; float4 PS(VertexOut pin) : SV_Target { return pin.Color; } 

顶点着色器文件Transf_VS.fx

 cbuffer dataBuffer : register(b0) { matrix ViewProjection; }; struct VertexIn { float3 PosL : POSITION; float4 Color : COLOR; }; struct VertexOut { float4 PosH : SV_POSITION; float4 Color : COLOR; }; VertexOut VS(VertexIn vin) { VertexOut vout; // Transform to homogeneous clip space. vout.PosH = mul(float4(vin.PosL, 1.0f), ViewProjection); // Just pass vertex color into the pixel shader. vout.Color = vin.Color; return vout; } 

我在哪里编译它们

 byte[] vertexShaderByteCode = ShaderBytecode.CompileFromFile(this.path + "\\Transf_VS.fx", "VS", "vs_5_0"); this.vertexShader = new D3D11.VertexShader( device, vertexShaderByteCode ); this.inputSignature = new ShaderSignature(vertexShaderByteCode); this.pixelShader = new D3D11.PixelShader( device, ShaderBytecode.CompileFromFile(this.path + "\\Pixel_PS.fx", "PS", "ps_5_0") ); 

数据结构定义

 public struct ScatterVertex { SharpDX.Vector3 Position; SharpDX.Color4 Color; } 

inputlayout初始化

 this.inputLayout = new D3D11.InputLayout( this.device, inputSignature, new SharpDX.Direct3D11.InputElement[] { new D3D11.InputElement( "Position", 0, SharpDX.DXGI.Format.R32G32B32_Float, 0 ), new D3D11.InputElement( "Color", 0, SharpDX.DXGI.Format.R32G32B32A32_Float,//I'm not very sure whether or why I should use this option 0 ) } ); 

以下是相机类中的投影matrix,稍后将发送到常量缓冲区

 private Matrix View { get { return Matrix.LookAtLH(this.Eye, this.Target, this.Up); } } private Matrix Proj { get { return Matrix.PerspectiveFovLH(this.Fov, this.Aspect, this.Near, this.Far); } } public Matrix WorldViewProject { get { Matrix wvp = (this.View * this.Proj); wvp.Transpose(); return wvp; } } 

如果你需要其他任何东西来解决这个问题,只要让我知道,我会设法得到它。 谢谢!

我做到了!

事实certificate,问题不在于着色器,而在于Draw方法。 我错过了在我的代码中设置绘制的第一个参数,这应该是我打算绘制的基元。

感谢大家在这个讨论和上一个问题的讨论中,我会在很短的时间内更新上一个问题的答案。