목록ios/Metal (8)
momodudu.zip
이전에 렌더링 파이프라인에서 가장 기본적인 Model Transformation(Translate, Scale, Rotate)와 입체적으로 표현할 수 있게 해주는 Projection transformation에 대해서 알아보았다. 이 두가지 기본 변환 이외에도, 렌더링 파이프라인 내에서는 추가적인 변환이 일어나는데, 그것이 바로 View translation과 Viewport transformation이다. - View transformation 이 변환은 예전에도 설명을 했었다. 지금까지의 예제는 전부 metal의 스크린 좌표 기준으로 모든 정점을 구성했다. 그렇지만 우리가 그릴건 특정 world좌표에 있는 object일것이고, 그 기준들은 무수히 많다. 이런것들을 하나로 모아서 카메라 안에 담기게 어..
이전의 Model Transform이 매쉬를 이루는 vertex들을 Local Cooridnate -> World Coordinate로 바꾸는 변환이었다면, Projection Transform은 camera coordinate -> normalized coordinate로 바꾸어주는 변환이다. projection type에는 두가지가 있는데, orthogonal과 perspective 변환이 있다. orthogonal은 말그대로 직교 변환이고, perspective는 원근법을 구사한 변환이다. 앞전에 생성했던 Cube에 perspective projection을 적용해보자. var matrix: Matrix4 var projectionMatrix: Matrix4 projectionMatrix를 저장해둘..
이제 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..