2012-08-16 3 views
0

2D (안드로이드 '캔버스, GDI'그래픽)의 여러 다른 컨텍스트에서 드로잉 메서드를 호출하기 전에 드로잉을 클립으로 사용했습니다.DrawUserPrimitive 전에 클립하는 방법?

어떻게 이것을 XNA로 할 수 있습니까?

DrawUserPrimitive 덕분에 일부 프리미티브를 그리며 아직 이러한 프리미티브를 잘라내는 방법을 찾지 못했습니다. 가능한가? 방법?

뷰포트 또는 이와 유사한 것을 변경하면 허용됩니까? BasicEffect을 사용할 때 World, ViewProjection 행렬도 있습니다. 나는 아직 이것들을 파고 들지 않았다.

답변

1

a. 뷰포트를 변경할 수 있습니다.

GraphicsDevice.Viewport = yourCamera.Viewport; 
GraphicsDevice.Viewport = new Viewport(yourClippingArea); 

b. 가위 테스트를 사용하여 래스터 라이저 상태를 설정하는 가위 사각형을 사용할 수 있습니다 ...

GraphicsDevice.ScissorRectangle = yourClippingArea;  
GraphicsDevice.RasterizerState = 
    new RasterizerState() { ScissorTestEnabled = true }; 

c. 스텐실 버퍼 및 스텐실 작업을 사용할 수 있습니다. 기본적으로이 방법은 마스크를 만들고 적용하는 것입니다.

d. 그림을 그리기 전에 클립을 찍을 수 있습니다 ...

(2D) 
if (yourCamera.WorldBounds.Intersects(sprite.WorldBounds) 
{ 
    sprite.Draw(); 
} 

(3D) 
BoundingFrustum boundingFrustum = new BoundingFrustum(yourCamera.ViewProjection); 

if (boundingFrustum.Contains(model.BoundingSphere) 
{ 
    mode.Draw(); 
} 
+0

죄송합니다.이 단계 전에 약간의 작업이 필요하다고 생각했습니다. 나는 곧 다시 돌아올 것이다. 어쨌든 귀하의 답변을 주셔서 감사합니다, 그것이 좋은 길로 나를 이끌 것 같습니다. –

관련 문제