화면에 그래픽을 렌더링하는 응용 프로그램을 작성하고 있습니다. 응용 프로그램은 Direct3D9 및 Direct3D10 그래픽 모듈간에 전환 할 수 있습니다 (D3D9와 D3D10을 모두 감싸는 DLL을 작성했습니다). 테스트 메쉬 (D3DX9와 DirectX10 샘플에서 찾을 수있는 DXUT 라이브러리에있는 스톡 메쉬로 제공되는 토러스)를 렌더링하려고 할 때, Direct3D10 모듈은 다소 이상하게 동작합니다. 여기 내가 얻는 것이있다.Direct3D10을 사용한 이상한 렌더링
D3D9 :
D3D10 :
뷰, 프로젝션 세계 행렬은 두 경우 모두 동일합니다. 유일한 차이점은 장치 초기화 코드와 HLSL 효과 파일입니다 (단순하게 앰비언트 색상을 적용하고 고급 조명, 텍스처링 등은 사용하지 않습니다). 장치 초기화가 잘못되었거나 쉐이더가 좋지 않기 때문일 수 있습니까? 나는 어떤 힌트를 주셔서 감사하겠습니다. 요청으로 모든 코드 조각을 게시 할 수 있습니다.
Game Dev StackExchange에있는 사람은 아마도 전치 행렬이 바뀌었기 때문일 것이라고 제안했습니다. 나는 매트릭스가 쉐이더 파일에서 곱 해지는 순서를 바꾸려고 시도했다. 나는 거의 모든 순열을 시도했지만 화면에는 올바른 출력이 없다.
미리 감사드립니다. EDIT : .fx 파일은 다음과 같습니다. 추 신을 무시할 수 있습니다. 흥미로운 점은 없습니다.
//Basic ambient light shader with no textures
matrix World;
matrix View;
matrix Projection;
float4 AmbientColor : AMBIENT = float4(1.0, 1.0, 1.0, 1.0);
float AmbientIntensity = 1.0;
struct VS_OUTPUT
{
float4 Position : SV_POSITION; // vertex position
float4 Color : COLOR0; // vertex color
};
RasterizerState rsWireframe { FillMode = WireFrame; };
VS_OUTPUT RenderSceneVS(float4 vPos : POSITION)
{
VS_OUTPUT output;
matrix WorldProjView = mul(World, mul(View, Projection));
vPos = mul(vPos, WorldProjView);
output.Position = vPos;
output.Color.rgb = AmbientColor * AmbientIntensity;
output.Color.a = AmbientColor.a;
return output;
}
struct PS_OUTPUT
{
float4 RGBColor : SV_Target; // Pixel color
};
PS_OUTPUT RenderScenePS(VS_OUTPUT In)
{
PS_OUTPUT output;
output.RGBColor = In.Color;
return output;
}
technique10 Ambient
{
pass P0
{
SetRasterizerState(rsWireframe);
SetVertexShader(CompileShader(vs_4_0, RenderSceneVS()));
SetGeometryShader(NULL);
SetPixelShader(CompileShader(ps_4_0, RenderScenePS()));
}
}
셰이더 코드를 게시 할 수 있습니까? 이것은 크게 도움이 될 것입니다. 또한 "전치 된"은 곱셈의 순서를 의미하지 않습니다. 그것은 매트릭스가 형성되는 방법을 의미합니다 : http://en.wikipedia.org/wiki/Row-major_order – Stardidi
쉐이더 플래그 매개 변수를 사용하여 매트릭스 순서를 행 주요에서 행 메이저로 변경하려고했습니다. . –
이러한 매트릭스 문제는 다루기가 힘들며 세계 및보기 매트릭스를 신원으로 설정해보십시오.그래도 문제가 해결되지 않으면 투영 행렬을 만드는 방식에 문제가 있음을 분명히 알 수 있습니다. – Stardidi