렌더링 할 Surface와 X, Y 위치를 취하는 메서드로 서페이스를 렌더링하려고합니다. 문제는 표면이 하나의 작은 픽셀로 스크린 외부에있을 때 전혀 렌더링되지 않는다는 것입니다.뷰포트에 서페이스 클리핑
왜 그럴까요? DirectX 클리핑을 검색하려고하지만 아무 것도 찾을 수 없습니다.
void Draw(LPDIRECT3DSURFACE9 src, int x, int y)
{
D3DSURFACE_DESC desc;
src->GetDesc(&desc);
D3DVIEWPORT9 viewport;
Device->GetViewport(&viewport);
int vX = viewport.X;
int vY = viewport.Y;
int vWidth = viewport.X + viewport.Width;
int vHeight = viewport.Y + viewport.Height;
RECT source;
source.left = max(x, vX);
source.right = min(source.left + desc.Width, vWidth);
source.top = max(y, vY);
source.bottom = min(source.top + desc.Height, vHeight);
RECT destination;
destination.left = max(x, vX);
destination.right = min(destination.left + desc.Width + x, vWidth);
destination.top = max(y, vY);
destination.bottom = min(destination.top + desc.Height + y, vHeight);
Device->StretchRect(src, &source, BackBuffer, &destination, D3DTEXF_POINT);
};
... 및 X = 100, Y = 100은 작동하지 않지만 -100은 작동하지만 올바르게 늘리지는 않습니다. 원하는 효과의
예 이미지 :
나는 또한 클립 표면하지만 운이없이 무언가에 *의 pSourceRect와 * pDestRect을 설정하기 위해 노력했습니다.
저는 DirectX9를 사용하고 있습니다.
코드에서 x와 y는 어디에 사용합니까? 귀하의 예에서는 보여주지 않습니다. StrectRect의 [documentation] (http://msdn.microsoft.com/en-us/library/windows/desktop/bb174471%28v=vs.85%29.aspx)를 읽으셨습니까? 많은 제한이 있습니다, havent에서 간단한 것을 보았습니다. 뭔가 관련되어 보였습니다. 아마도 어쩌면 거기에 :) – Gnietschow
디버그 런타임 활성화를 시도 했습니까? (http://legalizeadulthood.wordpress.com/2009/06/28/direct3d-programming-tip-5-use-the-debug-runtime/ 참조) OutputDebugString을 통해 양호하고 명확한 메시지가 생성되며, 이 사건에 관해서. (비록 내가 두려워하지만 ... 나는 StretchRect를 사용한 적이 없다.) –
나는 해봤지만 포기했다. 왜냐하면 내가 말한 것처럼 소스 또는 대상 사각형에서 X 및 Y 좌표를 설정하면 전혀 렌더링되지 않기 때문입니다. 표면 크기를 클리핑하여 뷰포트 크기에 맞는 알고리즘을 찾으려고하지만 모든 솔루션을 찾을 수 없습니다. – Deukalion