목록전체 글 (56)
momodudu.zip

이제 matrix를 적용해보자. matrix 적용 여부를 쉽게 알 수 있도록 3차원의 큐브 모양의 mesh를 하나 만든다. matrix를 적용하기 전에는 아래처럼 그냥 평면에서 보고 있으므로, 네모난 모양만 보인다. 큐브처럼 그럴싸하게 보이려면.. 이제 matrix를 적용해줘야한다. Transformation / Rotation / Scale등의 과정을 거쳐서 화면에서 봤을 때 큐브를 입체적으로 표시할 수 있다. 1) Model Transformation 현재 큐브를 구성하는 정점들의 좌표는 모두 Metal의 NDC범위 내에 있다. 그래서 x,y는 [-1,1] z는 [1,0]으로만 이루어져 있다. 하지만 이 좌표들이 wgs84좌표라면 ..? 이걸 어떻게 그려야지? 어떤 Mesh는 wgs84인데 또 어떤 ..

Non-Interlaved vertex를 그리는 쉐이더를 작성중에.. 이런 문제를 발견했다. #include using namespace metal; struct VertexIn { float3 position; float4 color; }; struct VertexOut { float4 position [[position]]; float4 color; }; vertex VertexOut vertex_main(const device VertexIn* vertex_in [[ buffer(0) ]], unsigned int vid [[vertex_id]]) { VertexIn in = vertex_in[vid]; VertexOut out; out.position = float4(in.position.posi..

Apple의 MSL Spec문서를 보는데, 일단 양이 굉장히 방대해서.. 간단한 부분들만 정리해보려고한다. 봐도봐도 헷갈리는 MSL. 간단한 예제들로 머가 어떻게 구성되는지 알아보자. 1. Metal Coordinate System Metal의 NDC Space는 왼손 좌표계로, 아래와 같은 공간으로 구성된다. z는 [0, 1]의 범위로 구성되어 있다. 즉, 중앙값이 0.5이다. 그리고 NDC에서 나온 ouput은 rasterization을 거쳐서 뷰포트로 전환이 되는데, 원점은 좌상단인 viewport coordinate system이 완성된다. 2. Address Space Metal의 memory는 MSL program내의 memory object들의 구조와 동작을 묘사할 수 있도록 모델링되었다. ..
이제 약간 본격적인 챕터다. 점점 프로젝트에 살이 붙을 예정이니.. 지금까지 작성했던 코드들을 분리해보자. 튜토리얼에 맞춰서 ViewController쪽과 Renderer라는 클래스를 따로 분리할것이다. 그 전에, 앞에서 훑어봤던 Metal 초기화 과정을 다시 한번 짚어보자.. 1. MTLDevice 2. MTLCommandQueue : CommandBuffer를 생성한다. 3. MTLLibrary : 쉐이더 프로그램을 담고있음 4. MTLRenderPipelineState : 어떤 쉐이더 프로그램을 사용할지, 뎁스나 컬러 세팅 등 파이프라인에서 어떤 동작을 하는지 config지정. 5. MTLBuffer : CPU -> GPU로 보낼 데이터를 담고있는 컨테이너 1~2는 한번만 만들고, 4번의 경우 Pi..