반응형
iOS 16.1, Xcode 14.1, Swift 5, Playground 환경에서 진행했습니다.
기존에 삼각형을 그리려면 변수를 저장하여야하는데,
수많은 삼각형을 그리게 되면, 겹치는 꼭지점이 무수히 많아 메모리가 낭비될 것입니다.
그리하여 겹치는 부분은 제거하고 같은 꼭지점은 index로 접근하는 방법이 있습니다.
let vertices: [Float] = [
-1, 1, 0,
-1, -1, 0,
1, -1, 0,
1, 1, 0
]
let indices: [UInt16] = [
0, 1, 2,
2, 3, 0
]
indices에서 첫번째 줄 0, 1, 2는
vertices[0], vertices[1], vertice[2]의 지점을 사용한다는 의미입니다.
indices 두번째 줄 2, 3, 0은
vertices[2], vertices[3], vertice[0]의 지점을 사용한다는 의미입니다.
인덱스버퍼를 생성하고, commandEncoder에서 index를 활용하여 4가지 vertex를 통해 사각형을 그릴 수 있습니다.
var indexBuffer = device.makeBuffer(bytes: indices, length: indices.count * MemoryLayout<UInt16>.size)
commandEncoder?.drawIndexedPrimitives(types: .triangle, indexCount: indices.count, indexType: .uint16, indexBuffer: indexBuffer!, indexBufferOffset: 0)
참조 : https://www.youtube.com/watch?v=GLDYreVv4Ns&list=PL23Revp-82LJG3vcDPm8w7b5HTKjBOY0W&index=4
반응형
'iOS > 라이브러리' 카테고리의 다른 글
[iOS, Metal] Metal에서 Image를 MTKView에 올리는 방법 (0) | 2023.03.21 |
---|---|
[Library, Metal] shader 사용방법 (0) | 2023.02.06 |
[Library, Metal] 삼각형 그리기 (pipeline) (0) | 2023.02.03 |
[Library, Metal] MetalView 그리기 (0) | 2023.02.03 |