Game Dev/WarSimulation

Landscape에 맞닿는 Line 만들기 (1/N)

AKer 2017. 4. 5. 08:41
반응형

Landscape에만 그려지는 Decal에 대해 포럼에 질문을 올렸는데 한달 정도 답이 없다. 앞에서 얘기했듯이 Mesh마다 Receive Decal을 끄는 것은 원하는 바가 아니다. 그렇다면 대안은...


  1. Landscape를 따라다니는 Line Segment를 만든다.
  2. Landscape의 Material에 Grid 격자를 포함한다.
    • 이 경우 Grid 크기가 변경될 때 Material에 그려진 Grid 크기도 변경되어야 함
    • 그렇다면 Material의 Texture를 프로그램으로 만들어주는 것이 가장 편할듯
  3. Landscape를 그릴 때 Stencil을 써주고 Landscape Stencil 위에만 그려지는 Decal을 만든다.

우선은 1번을 구현해봤다. 구현 목적을 간단히 그림으로 설명하면 아래 그림에서 시작점~목표점까지 Landscape의 요철이 있는 Vertex를 모두 계산하는 것이다.




  1. TopView에서 봤을 때 선의 시작점과 목표점을 각각 s, e라고 한다.
  2. Landscape의 전체 크기를 얻어온다. (ex: 1km * 1km)
  3. Landscape의 Vertex 개수를 얻어온다. (ex: 505개 * 505개)
  4. '크기 / 개수'를 계산하여 단위 크기를 얻어낸다.
  5. s에서 e까지의 벡터를 만들고, 이 경로상에 단위 크기로 떨어지는 부분을 좌표 v로 만든다.
  6. [s, v1~vn, e]를 이어서 선분을 만든다.

짜잔!


그런데 뭔가 이상한데?


노란색으로 표시한 부분처럼 파뭍히는 부분이 있다. 계산은 잘 한 것 같은데 왜 그럴까 하고 와이어프레임으로 보니 이유를 알았다. 월드는 삼각형 폴리곤으로 이뤄지기 때문에 사각형이 아닌 삼각형과 만나는 모든 점을 만들어야 한다. 


<파란색 : s, e, 그리고 계산된 정점 v>


<노란색으로 표시한 부분에 점들이 추가되어야 함>


일단 계산이 많아서 이 구현은 쓰지 않더라도 Landscape와 만나는 모든 점의 리스트를 구하는 함수 자체는 구현해놔야겠다. 그치만 오늘은 항마력이 다해서 그만!


반응형