블록을 만들어 보겠습니다


먼저 메쉬를 그리기 위해서는 점들의 좌표를 만들어줘야합니다


24b0d121e09c28a8699fe8b115ef046549aefb


육면체의 점들의 좌표를 이렇게 정하겠습니다

0, 0, 0은 블록의 기준점입니다


육면체를 생성하는 방법은 면을 6번 생성하는 것 입니다

처음에는 점을 8개만 생성하고 triangle로만 이어서 생성하니까

uv가 이상하게 잡히더라구요 

한 점이 3개의 면에 공유되기때문에 일어나는 문제였습니다

즉 0, 0, 0의 좌표가 속한 면이 아랫면인지 뒷면인지 오른쪽면인지 헷갈려서 일어나는 문제라고 하더라구요


24b0d121e09c28a8699fe8b115ef0469973ef0be


유니티에서 기본제공하는 큐브놈도 정점이 6x4인걸 보아 이게 맞는 방법인것 같습니다



24b0d121e09c28a8699fe8b115ef046541a2fb39


createface함수를 만들었습니다

기준점과 방향을 넣어주면 해당 방향으로 면을 생성하기 위한 좌표를 vertices에 넣어줍니다

사진에는 전후만있지만 밑에 상하좌우도 있습니다


중요한 점은 정점을 생성하는 방향이 똑같게 해야한다는 것입니다


24b0d121e09c28a8699fe8b115ef046b6a6692


그래야 triangle에 편하게 넣을 수 있습니다

vIndex는 정점 리스트의 count를 가져옵니다

즉 vIndex는 항상 우리가 직전에 생성한 첫번째 좌표를 가리킵니다

따라서 0번째좌표 1번째좌표 2번째좌표를 이어 삼각형을 만들 수 있고

0번째 2번째 3번째를 이어 삼각형을 만들 수 있습니다

마지막으로 uv를 넣어줍니다


24b0d121e09c28a8699fe8b115ef046b6c6694


정점을 생성한 순서대로 넣어줘야 하더라구요


그럼 이제 모든 방향으로 면을 만들어 큐브를 완성해보겠습니다


24b0d121e09c28a8699fe8b115ef0468e3ace3be


빈 메쉬를 생성하고 6방향으로 면을 만들어줍니다

그렇게 만든 면의 정보가 담겨있는 vertice, triangle, uv를 빈 메쉬에 넣고

bound와 normal을 계산해줍니다

바운드는 메쉬가 얼만큼의 공간을 차지하는지

노말은 법선벡터를 통해 빛과 반응하는 기능 뭐 어쩌구라고 합니다

그리고 메쉬필터에 우리가 만든 메쉬를 넣고 메쉬렌더러에서 적당한 머티리얼을 적용하면




24b0d121e09c28a8699fe8b115ef046b6c669135


60

(감동)