기본적으로 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);
는하지만 적절하게 행렬을 결합하는 방법이 확실하고, 일반적으로 행렬의 개념에 새로운 오전.
누군가이 매트릭스를 결합하는 데 도움이 될 수 있습니까?
매트릭스를 결합하여 무슨 뜻인지 잘 모르겠습니다. 여러분이 묘사하는 것은 저에게 소리가납니다. 때때로 카메라가 세계의 가장자리로 이동하여 다른 쪽에서 셀의 행을 가져 와서 맵이 오버플로되기를 원할 때처럼 말입니다. –
@M.Prokhorov 당신은 문제를 이해하고 있지만 렌더링 호출을 줄이기 위해 모든 개별 타일을 하나의 큰 메쉬로 결합했습니다. 예를 들어 가장자리에 도달하면 맵의 다른면에서 타일을 가져 와서지도를 단일 엔티티로 사용하기 때문에 간단한 수학 연산을 수행 할 수 없습니다. –