2012-06-30 2 views
2


현재 XNA 게임에 대한 효과 파일의 언어 "HLSL"을 배우고 있습니다. 하나; SpriteBatch에 효과를 적용하는 문제에 직면 해 있습니다.

내 효과 파일은 다음과 같이 렌더링 된 텍스처를 흰색으로 만듭니다. :]2D Passes.apply() XNA 4.0

float4 PSFunction(float2 coord : TEXCOORD0) : COLOR0 
{ 
    return float4(0, 0, 0, 1); // Return a white pixel 
} 

technique Sample 
{ 
    pass pass0 
    { 
     PixelShader = compile ps_2_0 PSFunction(); 
    } 
} 

나는 다음 인수 내의 SpriteBatch을 시작할 때, 그것은 정상적으로 작동하고 그러나

SpriteBatch.Begin(0, null, null, null, null, SampleEffect); 

; SpriteBatch.Begin 메서드는 여러 효과를 허용하지 않습니다. 그러므로 나는 그러므로 내가 diffrend 방법 몇 가지를 시도,

SpriteBatch.Begin(); 

그러나 아무것도 앞으로 일어날를 호출하기 전에

SampleEffect.CurrentTechnique.Passes[0].Apply(); 

을하려고 노력했다. 예 :

SampleEffect.CurrentTechnique.Passes["pass0"].Apply(); 

그러나 여전히 작동하지 않았습니다. 그래서 효과가 object.ReferenceEquals 함수를 사용하여 올바른 GraphicsDevice에 첨부되었는지 확인했지만 올바른 graphicsDevice와 같았습니다. 내가 뭘 잘못하고 있니? SpriteBatch에 여러 효과를 첨부하려면 어떻게해야합니까? 사전, 라스무스에서

감사합니다 :] 여러 효과를 그릴 수 없습니다

답변

3

동시에 전달합니다. 대신, 같은 결과를 여러 번 결합하여 여러 번 그려야합니다.

예를 들어, 주변 조명, 확산 조명 및 반사 조명과 같은 3 가지 효과로 조명을 시뮬레이션하는 것을 상상해보십시오. 이들 각각은 효과 패스로 표시됩니다. 결과를 함께 결합하여 을 덧붙여 순서대로 렌더링합니다 (빛이 함께 추가되는 것처럼).

여러 효과를 결합하려면 수동으로 결합 할 방법을 지정해야합니다. 일반적으로 사용하려는 효과 패스를 반복하고 각 반복마다 장면을 그리면서 한 번에 하나씩 적용하면됩니다.

+0

이 기술을 [다중 번개]라고 부릅니다. (https://www.google.com/search?q=multipass%20vs%20deferred%20lighting). – AgentFire