2012-06-20 3 views
1

2D, 3D 및 투영법을 설정하는 방법은 무엇입니까? [XNA 3.1, C#을]2D, 3D 및 전망을 설정하는 방법은 무엇입니까?

나는

float4x4 World; 
float4x4 View; 
float4x4 Projection; 

을 필요로하는 쉐이더를 사용하기 위해 노력하고있어하지만 나도 몰라 어떻게 2D 엔진 설정을. 2D로 계산할 올바른 Vertex Shader를 위해 어떤 값을 전달해야하는지 실제로 알지 못합니다.

코드 :

efs[ObjShaders[i].ShaderID].effect.Parameters["World"].SetValue(Matrix.Identity); 

efs[ObjShaders[i].ShaderID].effect.Parameters["View"].SetValue(Matrix.CreateLookAt(new Vector3(0, 0, 0), new Vector3(0, 0, 0), new Vector3(0, 0, 0))); 

efs[ObjShaders[i].ShaderID].effect.Parameters["Projection"].SetValue(Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f),aspectRatio,1.0f, 10.0f)); 

efs[ObjShaders[i].ShaderID].effect.Parameters["EyePos"].SetValue(new Vector3(0,0,0)); 

쉐이더 부분 :

VertexShaderOutput VertexShaderFunction(VertexShaderInput input) 
{ 
VertexShaderOutput output; 

float4 worldPosition = mul(float4(input.Position), World); 
float4 viewPosition = mul(worldPosition, View); 
output.Position = mul(viewPosition, Projection); 

output.texCoord = input.texCoord*100; 
output.worldPos = worldPosition.xyz; 

return output; 
} 

문제 : VertexShader 이것을 사용하려고하면 = (VertexShaderFunction을 vs_2_0 컴파일); 아무 것도 표시되지 않습니다. 하지만 PixelShader를 사용하면 텍스처가 그려지지만 약간 버그가 있거나 잘못된 것처럼 느껴집니다.

+0

이 조금 애매합니다. 당신은 아직 아무것도 시도? 어떤 자습서를 따르고 있습니까? – Allov

+0

네, 시도했습니다. 코드로 내 질문을 업데이트했는데 성공하지 못했습니다. 그와 함께 VertexShaderFunction을 사용하면 아무 것도 그려지지 않습니다. – Beardminator

답변

1

우선, 세계관 - 투영 행렬에 관한 문서를 찾아 읽고 읽으십시오. 이 행렬에 대해 이해하고 당신이 그런 식으로 코드 수정 : 최대 위치, 대상 및 :

  1. Matrix.CreateLookAt 3 벡터에 의해 뷰 행렬을 생성한다. 모든 벡터를 0 벡터로 전달하면 행렬도 0이됩니다. 위치는 (0, 0, 0), 목표는 (0, 0, 1), 위로는 (0, 1, 0)을 사용하십시오.

  2. 2D의 경우 투시 투영을 사용하면 안됩니다. Matrix.CreateOrthographic 또는 Matrix.CreatePerspectiveOffCenter를 사용하십시오 (문서의 차이점 참조). 당신은 다음 픽셀 당신의 월드 스페이스 (Matrix.CreateOrthographic에서 하나 개의 단위에 해당 될 것입니다 매개 변수에 해상도를 전달할 수 있습니다 (800, 600, -1, 1).

+0

글쎄요, 여전히 나에게 아무것도주지 않고 있습니다. VertexShaderFunction을 호출하려고하면 내게 준 정보가 맞다고 생각합니다 오류가 내 셰이더/로직에 있습니다. 감사합니다! – Beardminator

관련 문제