Procedural Planet Generate(1) - 지형 생성

2018. 5. 23. 19:26프로그래밍/OpenGL

절차적 행성 생성

  - 간단하게 행성을 만드는 것을 목표로 한다.


1. 우선 Level Of Detail 이 적용된 Square 6개를 생성하여 큐브로 조립합니다.

   - 큐브를 사용하는 이유는 Culling 하기 좋기 때문입니다.

   - Level Of Detail Square 바로가기


[결과물]



2. Cube To Sphere

  - Cube를 Sphere로 만들어 줍니다.

  - 변환코드는 GLSL Shader에 작성하여 시뮬레이션 하였습니다.


  (1) 만드는 방법

    1) 아래 링크의 공식을 이용한다.

        - Cube를 Sphere로 만드는 공식

        - 주의 할 점은 Size가 -1 ~ 1 이어야 합니다.


    2) 원의 특성을 이용하기

      - Sphere 변환은 원의 특성을 이용하면 됩니다.

      - 원은 모든 정점이 중심점에서 동일한 길이를 가집니다.

      - 큐브의 Vertex를 Normalize 한 후 원하는 Size를 곱해주면 Sphere 화  할 수 있습니다.

      - 저는 이 방법을 사용하였습니다.



[결과물]


4. 노이즈 함수를 이용해 적절하게 uv를 만들고 텍스쳐를 입혀 줍시다.

   - 사용한 Noise Function  :  noise.h

   - 저는 아래의 텍스쳐를 사용하였습니다.

   - UV의 U 값은 온도, V 값은 습도가 됩니다.

   - OpenGL의 UV 시작점은 좌하단 부터입니다.



  [결과물]



5. Noise Function 을 이용해 정점의 높이값 변경하기.

  - 노이즈 함수를 이용해 얻어낸 값을 정점에 더해줍니다. 


[결과물]

  - 1차 노이즈만 적용한 결과물입니다.



다음 내용으로 바로가기