2014-09-11 4 views
0

heightmap을 사용하여 libgdx 기반의 2D 게임에서 shader를 사용하여 멋진 물 왜곡 효과를 만들려고합니다. 처음에는shader heightmap 번역 다음 카메라를 tiledmap의 libgdx에 넣습니다.

, 나는 그때 렌더링 FBO에 왜곡 효과를 적용하고 폭포의 위치를 ​​결정하기 위해 마스크를 사용하십시오 FBO

first rendering with no effects

에 전체 장면을 렌더링합니다. 마스크를 적용하기 전에

before the mask

enter image description here

이 효과를 달성하기 위해, I는 Y 그것이 fract(heighmapCoord)을 사용하여 시간 및 I 루프에 기초 쉐이더 하이트 좌표 변환.

카메라가 플레이어를 따라 움직일 때, heighmap은 X 축에 정적으로 머무르는 것이 문제입니다. camera.positionfract() 기능을 기반으로 heightmapCoord을 번역하기로 결정했습니다. heighmap은 카메라를 따라가는 것처럼 보이지만 속도가 느려서 효과가 폭포 마스크 안쪽으로 미끄러 져 움직입니다.

투영 문제가있는 것으로 보입니다. 또한, 이것이 이런 종류의 효과를 창출하는 좋은 방법인지 확신 할 수 없습니다.

정확하게 카메라 움직임에 따라 하이트 맵을 만들려면 어떻게해야합니까?

EDIT :

I에서만 프래그먼트 쉐이더를 사용하여 하나의 정점 셰이더 passthrought이다

void main() { 
    v_color = a_color; 
    v_texCoord0 = a_texCoord0; 
    gl_Position = u_projTrans * vec4(a_position, 1.); 
} 

답변

0

나는 해결책을 발견 하였다.

(폭 * 높이) 15 개 * 10 타일의 뷰포트로 화면을 가정, 당신은

texCoord.x += camera.x/viewPortTileWidth; // 15 
texCoord.y += camera.y/viewPortTileHeight; // 10 
로 heighmap 텍스처 COORD을 번역해야합니다 : 당신은 다음과 같은 셰이더 화면에서 좌표 변환해야

그러면 플레이어가 움직일 때 heighmap이 더 이상 움직이지 않습니다.