DirectX를 사용하여 MS3D 모델을 표시하는 프로그램을 작성 중이지만 불행히도 화면에 아무것도 표시되지 않습니다. 난 비주얼 스튜디오 13에서 그래픽 디버거를 사용하면 픽셀 쉐이더 파이프 라인에서 누락되는이 아래 그림에 도시 된 바와 같이 , 나는 알파이프 라인의 DirectX11 픽셀 쉐이더가 누락되었습니다.
이 내 픽셀 쉐이더 소스 코드 :
cbuffer SkinningTransforms
{
matrix WorldMatrix;
matrix ViewProjMatrix;
};
//--------------------------------------------------------------------------------
// Inter-stage structures
//--------------------------------------------------------------------------------
struct VS_INPUT
{
float3 position : POSITION;
int4 bone : BONEID;
float4 weights : BONEWEIGHT;
float3 normal : NORMAL;
float3 tangent : TANGENT;
float2 tex : TEXCOORD;
};
//--------------------------------------------------------------------------------
struct VS_OUTPUT
{
float4 position : SV_Position;
float3 normal : NORMAL;
float3 light : LIGHT;
float2 tex : TEXCOORDS;
};
Texture2D ColorTexture : register(t0);
SamplerState LinearSampler : register(s0);
//--------------------------------------------------------------------------------
VS_OUTPUT VSMAIN(in VS_INPUT input)
{
VS_OUTPUT output;
//Transform vertex and pass them to the pixel shader
return output;
}
//--------------------------------------------------------------------------------
float4 PSMAIN(in VS_OUTPUT input) : SV_Target
{
// Calculate the lighting
float3 n = normalize(input.normal);
float3 l = normalize(input.light);
float4 texColor = ColorTexture.Sample(LinearSampler, input.tex);
float4 color = texColor * (max(dot(n,l),0) + 0.05f);
return(color);
}
Graphics Debugger에서 알 수 있듯이 모든 그래픽 이벤트가 올바르다. 나는 픽셀 쉐이더에 관한 될 수 중요한 이벤트, 아래에 나와 :
106:(obj:4) ID3D11Device::CreateDepthStencilView(obj:24,NULL,obj:25)*
108:(obj:5) ID3D11DeviceContext::OMSetRenderTargets(8,{obj:1,NULL,NULL,NULL,NULL,NULL,NULL,NULL},obj:25)*
109:(obj:5) ID3D11DeviceContext::ClearRenderTargetView(obj:1,addr:21)*
111:(obj:5) ID3D11DeviceContext::ClearDepthStencilView(obj:25,1,1.000f,0)*
119:(obj:4) ID3D11Device::CreateSamplerState(addr:24,obj:27)*
134:(obj:4) ID3D11Device::CreatePixelShader(addr:27,21056,NULL,obj:30)*
135:CreateObject(D3D11 Pixel Shader,obj:30)
136:(obj:5) ID3D11DeviceContext::PSSetShader(obj:30,NULL,0)*
137:(obj:5) ID3D11DeviceContext::PSSetSamplers(0,1,{obj:27})*
139:(obj:4) ID3D11Device::CreateTexture2D(addr:28,addr:5,obj:31)*
140:CreateObject(D3D11 Texture2D,obj:31)
142:(obj:4) ID3D11Device::CreateShaderResourceView(obj:31,NULL,obj:32)*
143:CreateObject(D3D11 Shader Resource View,obj:32)
144:(obj:5) ID3D11DeviceContext::PSSetShaderResources(0,1,{obj:32})*
146:(obj:4) ID3D11Device::CreateRasterizerState(addr:29,obj:33)*
147:CreateObject(D3D11 Rasterizer State,obj:33)
152:(obj:5) ID3D11DeviceContext::RSSetState(obj:33)*
154:(obj:5) ID3D11DeviceContext::RSSetViewports(1,addr:30)*
156:(obj:4) ID3D11Device::CreateBlendState(addr:11,obj:34)*
157:CreateObject(D3D11 Blend State,obj:34)
159:(obj:5) ID3D11DeviceContext::OMSetBlendState(obj:34,addr:31,-1)*
162:(obj:4) ID3D11Device::CreateDepthStencilState(addr:32,obj:35)*
163:CreateObject(D3D11 Depth-Stencil State,obj:35)
165:(obj:5) ID3D11DeviceContext::OMSetDepthStencilState(obj:35,0)*
내가 위의 목록에서 함수의 모든 디버깅, 그리고 그들 모두 OK 돌아갑니다. 아무 잘못 없음. 제 질문은 픽스 털 셰이더가 pipleline에서 누락 된 이유이며, 다시 빈 화면이 될 수 있습니다.
결국 문제를 파악 했습니까? 나는 같은 문제가있다. (PS는 파이프 라인 단계에서는 빠졌지 만 즉각적인 컨텍스트의 객체보기에서 활성화되어 있으므로 http://msdn.microsoft.com/en-us/library/jj191650에서 설명하는 문제는 아니다. .aspx). 물론, 이미지는 검은 색입니다 ... – Christoph
똑같은 문제, VS에서 RS 상태 및 출력을 확인했습니다. RSSetViewports가 호출되었지만 그리기 호출의 뷰포트가 '설정되지 않음'이지만 이벤트를 확인했습니다. 나는 아직도 이것을 조사하고있다. –
좋아, 내가 낙관적으로 1.0f가되어야 할 때 뷰포트에 최대 깊이 100.0f를 주었기 때문에 나에게 일어났다. 래스터 라이저에서 깊이 클리핑을 비활성화 했는데도 RSSetViewport가 뷰포트를 설정하지 못하게하고 오류가 발생하지 않습니다. 장치 컨텍스트의 뷰포트가 실제로 설정되어 있는지 그래픽 디버거에서 확인하십시오. –