2012-11-12 4 views
1

2D 타일 기반 게임이 있고 플레이어가 축소 할 수있게하려면 (그리고 더 많은 세계를 볼 수있게하려는 경우) 어떻게 구현할 것입니까?OpenGL, 타일 기반 게임에서 축소

일반적으로 게임의 glOrtho보기에서 볼 수있는 타일 만 렌더링 하겠지만, 확대/축소를 허용하는 경우 부동 소수점 정밀도는 모든 것을 정렬하려고 할 때 혼란을 야기합니다 (소리가 나는 것보다 훨씬 힘듭니다)). 전 세계를 렌더링하는 올바른 솔루션이며, OpenGL에서 보이지 않는 것을 렌더링하지 않도록 걱정할 필요가 없습니까?

+0

왜 정렬해야합니까? –

+0

내 말은, 물건을 줌 인/아웃하는 동안 물체의 위치가 떨리지 않도록 정렬하는 것입니다. –

답변

0

약간 큰 영역을 렌더링하기 위해 보낼 수는 있지만보기에 꼭 맞을 것입니다. 그러나 전체 세계만큼 크지는 않습니다.

2D에서 카메라를 회전시킬 수 있는지 여부에 대해서는 언급하지 않았습니다. 가시 영역은 타일 공간의 경계 RECT로 표현 될 수있다 :

Width_In_Tiles := RoundUp(View_Width_In_Px/Single_Tile_Width_In_Px * Zoom); 
Left_Margin := Center_Of_View - RoundUp(Width_In_Tiles/2); 
Right_Margin := Center_Of_View + RoundUp(Width_In_Tiles/2); 

//same for vertical axis 

//Naive example 
for K := Top_Margin to Bottom_Margin do 
    for I := Left_Margin to Right_Margin do 
    RenderTilesAndObjects(I, K); 
0

내가 텍스처에 타일을 렌더링 한 다음 화면보다 한 타일 큰 폭의 하나의 쿼드로 전체 장면을 렌더링합니다. 1 쿼드를 타일 위치를 기준으로 글로벌 위치로 변환하십시오. 그런 다음 텍스처 필터링에 내장 된 OpenGL이 지터를 처리합니다. 이것은 잠재적 인 속도 이득도 가지고 있습니다. 각 프레임의 모든 타일을 화면에 렌더링하는 대신 새롭게 표시되는 텍스처 둘레를 따라 타일을 렌더링하면되고 가끔씩 (화면의 가장자리가 타일 경계를 넘을 때)해야합니다. 텍스처의 내용을 blit합니다.

확대/축소의 경우 밉 매핑과 유사한 개념을 사용할 수 있습니다.

관련 문제