지형 높이 조절( terrain height control )
카테고리 없음 2024. 7. 26. 10:30 |1. terrain의 indexbuffer를 순회하여 픽킹테스트를 한다.
2. 픽킹된 좌표를 얻어내 정점을 순회 할 인덱스 범위를 구한다.
화면 중앙을 원점(0,0)으로 배치된 지형을 좌상단이 원점이 되도록 기준을 잡으면 각 정점은 행렬의 형태로 정렬된다.
vLeftTop.x = pickPos.x - radius
vLeftTop.z = pickPos.z + radius
StartX = vLeftTop.x + terrain width / 2;
iStartX = max( iStartX, 0 );
iEndX = iStartX + radius* 2;
iEndX = min( iEndX, terrain width - 1 );
iStartY = terrain height / 2 - vLeftTop.z;
iStartY = max( iStartY, 0 );
iEndY = iStartY + radius* 2;
iEndY = min( iEndY, terrain height - 1 );
3.만들어낸 범위안의 정점들을 순회하여 픽킹지점부터 정점간의 거리와 반지름의 크기 비교하며
정점의 높이를 수정한다.
반지름보다 거리가 작은 정점에 한해 연산을 한다.
vertex.y = sin( 90.f - ( 90.f * dist / radius ) )
dist / radius 은 0 ~ 1값을 가진다.
헌재 픽킹 지점부터 반지름 한도내까지 거리가 가장 멀면 1, 픽킹지점이면 0
이를 sin의 치역값으로 보간하면 픽킹지점부터 반지름끝까지 부드럽게 조절 할 수 있다.