2017-10-25 4 views
0

기본적으로 3D 육각형 타일 맵 (Civ 5 맵과 같은 것으로 생각하십시오)이 있습니다. 그것은 그리기 호출을 줄이기 위해 하나의 큰 메쉬를 사용하고 Civ 5의 멋진 기능 (지형 연속성 및 UV 텍스처 출혈)을 쉽게 허용하도록 최적화되어 있습니다.두 카메라 뷰 매트릭스를 올바르게 결합하는 방법은 무엇입니까?

내 게임에서 랩 어라운드 맵을 지원하고자하는데, 최선의 방법에 대한 브레인 스토밍 아이디어가 필요했습니다. 기본 카메라는지도의 극동에 접근하는 경우

예를 들어, 단순히 수행하여 멀리 서쪽으로 번역을 수행 할 수 있습니다

if(camera.x >= MAP_WIDTH) 
    camera.translate(0, 0, y); 

을 그러나 이렇게있을 것 플레이어가 번역 전에 보드의 "끝"을 볼 수있는 짧은 시간대. 나는 이것을 제거하고 싶다.

if((camera.x + camera.viewportWidth >= MAP_WIDTH) 
    camera.translate(0, 0, y); 

그러나,이 부 자연스러운 느낌이 번역 중에 "점프"의 부작용이 다음과 같이

나는이 문제를 해결했다 첫 번째 아이디어는 기본적으로 그냥 위의 코드를 수정하는 것이 었습니다.

내 최종 솔루션과 질문의 주제 :

나는 세 개의 카메라가, 내 기본 카메라, 멀리 서쪽으로 멀리 동쪽으로, 다른 하나. 기본적으로이 카메라의 행렬을 "결합하여"실제 범위를 벗어난 맵을 렌더링하고자합니다.

기본적으로 카메라가 월드 경계선에서 일정 거리 떨어져있는 경우 다음 위치에서 전 세계의 다른 쪽 장면을 그려야합니다. 따라서, 예를 들어,이 내가하고 싶은 일의 의사 코드 :

int MAP_WIDTH = 25; 
float viewportSize = 10f; 
float mainCamX = 24f; 
float mainCamY = 15f; 
Matrix4 cbnd = camera.combined; 
if(camX >= MAP_WIDTH) 
    camX = 0; 
else if(camX < 0) 
    camX = MAP_WIDTH - camX; 
if(camX + viewportSize >= MAP_WIDTH) 
    cbnd = combineMatrices(mainCam.combined, westCam.combined); 
modelBatch.setProjectionMatrix(cbnd); 
modelBatch.begin(); 
//Draw map model 
//Draw unit models. 
modelBatch.end(); 
modelBatch.setProjectionMatrix(mainCam.combined); 

는하지만 적절하게 행렬을 결합하는 방법이 확실하고, 일반적으로 행렬의 개념에 새로운 오전.

누군가이 매트릭스를 결합하는 데 도움이 될 수 있습니까?

+0

매트릭스를 결합하여 무슨 뜻인지 잘 모르겠습니다. 여러분이 묘사하는 것은 저에게 소리가납니다. 때때로 카메라가 세계의 가장자리로 이동하여 다른 쪽에서 셀의 행을 가져 와서 맵이 오버플로되기를 원할 때처럼 말입니다. –

+0

@M.Prokhorov 당신은 문제를 이해하고 있지만 렌더링 호출을 줄이기 위해 모든 개별 타일을 하나의 큰 메쉬로 결합했습니다. 예를 들어 가장자리에 도달하면 맵의 다른면에서 타일을 가져 와서지도를 단일 엔티티로 사용하기 때문에 간단한 수학 연산을 수행 할 수 없습니다. –

답변

0

소리가 너무 복잡합니다. 여기 내 아이디어가 있습니다 :

  • 즉. 당신은 당신이
  • 그냥 110x110에지도를 증가하고 여분의 공간에

당신이 할 수있는 그런 식으로 첫 번째 (제로 동부 표준시 행과 열을) 반복 100 × 100 필드지도가

  • 화면에 10 × 10 필드를 표시 할 수 있습니다 부드럽게 스크롤하고 카메라가 가장 오른쪽 위치에 도달하면지도에서 0 점 위치로 되돌립니다. 수직 운동에도 똑같이 적용됩니다.

    그래서지도의 두 번째 가장 왼쪽 부분은 화면 너비의 너비이고지도의 가장 위쪽 부분은지도의 rigth/bottom의 화면 높이 크기입니다.

  • +0

    나는 이것을 원래했다. 문제는 플레이어가 축소되었을 때 장치가 그리기 호출 (예 : 타일 당 최소 하나의 호출, 각각 타일이 3D 메쉬를 가짐)에 의해 압도당하는 것입니다. 맵의 각 타일의 기하학을 하나의 큰 메쉬로 결합하여 렌더링했습니다. 그러나이 접근법은지도의 다른면에서 오프셋을 사용하여 타일을 렌더링하는 것을 불가능하지는 않더라도 복잡하게 만들었습니다. –