렌더 타겟에서 CPU로 데이터를 전송하는 것에 관한 질문 (Q)을 통해 충돌을 테스트 할 수있었습니다. 내가 거기에 도착한 응답에서 렌더 타겟의 섹션을 더 작은 렌더 타겟에 드로잉 한 다음 그 데이터를 검색하는 것이 유효한 솔루션이 될 것이며 구현하려고했습니다.데이터를 잃지 않고 한 렌더 타겟에서 다른 렌더 타겟으로 직사각형을 그리는 방법은 무엇입니까?
전체 크기의 렌더 타겟 (1280x1024)을 그린 후에는 활성 렌더 타겟을 더 작은 (59X47 - 플레이어의 충돌 크기) 것으로 전환하고 큰 렌더 타겟의 섹션을 그려 봅니다. 플레이어를 작은 대상 위에 놓습니다. 처음에 나는 이것이 효과가 있다고 생각했지만, 충돌이 때때로 아주 부정확하다는 것을 알았습니다.
작은 대상을 화면에 그려 내용을 조사한 결과, 한 번에 소수의 픽셀 만 사용하고 항상 왼쪽 위 모서리에 있다는 것을 알았습니다. (분명히 축소 있지만) 그래서 내가 잘못 무슨 일이 일어나고 있는지 잘 모르겠어요 성공적를 통해 전달하는 데이터의 작은 대상 결과에 대한 전체 대형 렌더 타겟을 그리기
// Render rectangle under player from foreground to collision layer
Rectangle sourceRectangle = new Rectangle(sourceX, sourceY,
(int)sizeX, (int)sizeY);
gd.SetRenderTarget(collisionLayer[i]);
gd.Clear(Color.Transparent);
spriteBatch.Draw(foregroundLayer, collisionLayer[i].Bounds,
sourceRectangle, Color.White);
gd.SetRenderTarget(null);
.
는 // Render full target onto collision layer
gd.SetRenderTarget(collisionLayer[i]);
gd.Clear(Color.Transparent);
spriteBatch.Draw(foregroundLayer,new Vector2(0.0f),Color.White);
gd.SetRenderTarget(null);
다음 이미지는 왼쪽 상단에 중첩 작은 타겟 큰 목표를 나타낸다. 큰 대상의 전체 데이터가 올바르게 그려진 것 같습니다.
그림이 작동하지 않는 것을 보여주는가? 그것은 나에게 공정하게 보입니다 - 작은 이미지는 큰 이미지를 꽤 잘 표현한 것 같습니다. 1280x1024에서 59x47로 내려갑니다. 규모 변경이 큰 경우 완벽한 이미지를 기대할 수 없습니다. –
질문에 명확하지 않은 경우 미안합니다. 문제는 전체 이미지를 복사하는 동안 플레이어 아래 사각형을 잡을 수 없다는 것입니다. 첫 번째 코드 스 니펫을 사용하는 경우 플레이어가 검은 색 잉크 (종이 텍스처가 충돌하지 않음)에 앉아서 1 : 1로 매핑하는 검은 픽셀을 포함하지 않으므로 왼쪽 상단의 그림이 비어 있어야합니다. 1이 잉크 얼룩 위에있을 경우 플레이어 밑의 이미지와 함께 표시됩니다. 내가 실제로 얻는 것은 단지 (0,0) 주위에 검은 색의 픽셀을 몇 개 가지고있어 거기에있는 데이터와 관련이없는 것처럼 보입니다. – LlamaCloud
내가 보여주는 코드에 명백하게 잘못된 것이 보이지 않습니다. 내 첫 번째 직감은 sourceRectangle이 당신이 기대하는 바가 아닐 것입니다. 직사각형을 하드 코딩하여 잉크가 넘어가는 것을 알고 어딘가로 보았습니까? –