본문 바로가기

프로그래밍

(299)
[Metal] 이미지 렌더링~ 여러 텍스처 합치기 원본텍스처와 사이즈를 줄인 텍스처, 마스킹용 텍스처를 합치는 간단한 샘플. (어째 원본외에 캡처한 이미지들 색상이 좀 이상..) 이전 예제에서 원본텍스처와 렌더타겟 텍스처가 존재하니 마스킹용 텍스처만 하나 추가로 로드한다. func initMetal() { . . . . initRederTarget() initSwapRender() self.imageTexture = loadTexture(name:"sample", ext:"png") self.maskingTexture = loadTexture(name: "masking", ext: "png") } 화면 렌더링용 쉐이더에 3개의 텍스처를 전달한다 func render(view:MTKView) { print("render") . . . . swapEncod..
[Metal] 이미지 렌더링~ 텍스처에 렌더링 이번엔 텍스처에 렌더링하고, 해당 텍스처를 화면에 렌더링하는 예제이다. 예제에서는 일반 사이즈보다 훨씬 작은 64x64 크기의 렌더타겟 텍스처를 생성해 렌더링을 진행했다. 여전히 기존 코드들은 동일. 버텍스 let kImagePlaneVertexData:[Float] = [ -1.0, -1.0, 0.0, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, ] 기본 프로퍼티들 선언 텍스처로 렌더링하기 위해 MTLRenderPipelineState와 MTLRenderPassDescriptor 가 추가되고, 렌더타겟인 MTLTexture, 프래그먼트 쉐이더 MTLFunction 이 추가되었다. var device:MTLDevice! var c..
[Metal] 이미지 렌더링~ 텍스처 표시 뷰 컨트롤러 스토리보드에 MTKView 추가하고, mtk view 의 기본적인 설정을 한다. delegate는 아래 정의할 renderer로 연결 class ViewController: UIViewController { @IBOutlet weak var mtkView: MTKView! var renderer: Renderer = .init() override func viewDidLoad() { super.viewDidLoad() self.mtkView.enableSetNeedsDisplay = true self.mtkView.device = self.renderer.device self.mtkView.delegate = self.renderer } } 정점 이미지만을 표시하기 위해 4각형 정의 let ..
[Metal] 이미지 렌더링~ 사각형 그리기 뷰 컨트롤러 스토리보드에 MTKView 추가하고, mtk view 의 기본적인 설정을 한다. delegate는 아래 정의할 renderer로 연결 class ViewController: UIViewController { @IBOutlet weak var mtkView: MTKView! var renderer: Renderer = .init() override func viewDidLoad() { super.viewDidLoad() self.mtkView.enableSetNeedsDisplay = true self.mtkView.device = self.renderer.device self.mtkView.delegate = self.renderer } } 정점 이미지만을 표시하기 위해 4각형 정의 let ..
[Metal] AR 얼굴인식 및 obj 렌더링 AR 환경에서 얼굴의 anchor 에 obj 파일을 렌더링 하는 내용을 다룬다. 다른 환경으로의 전달을 위해 별도의 렌더타겟을 만들고, CVPixelBuffer로 복사하는 방식 사용하며, 실제 뷰 렌더링은 다루지 않는다. 공유타입 #include typedef struct { matrix_float4x4 projectionMatrix; matrix_float4x4 viewMatrix; matrix_float4x4 modelMatrix; matrix_float3x3 normalMatrix; vector_float3 ambientLightColor; vector_float3 directionalLightDirection; vector_float3 directionalLightColor; float mater..
[Metal] Render to Texture 버텍스 let vertexData:[Float] = [ -1.0, -1.0, 0.0, 1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, ] 버퍼 let size = vertexData.count * MemoryLayout.size // var vertexBuffer:MTLBuffer vertexBuffer = device.makeBuffer(bytes: vertexData, length: size) vertexBuffer.label = "VertexBuffer" 렌더타겟용 텍스처 생성 렌더링에 사용할 텍스처는 MTKTextureLoader 등으로 별로 생성 let texDescriptor = MTLTextureDescriptor() t..
UIButton selected + highlighted image 버튼에 selected 상태의 이미지가 별도로 있는 경우 highlighted 이미지를 selected 이미지로 설정하기 override var isSelected: Bool { didSet { if isSelected { if let img = self.image(for: .selected) { self.setImage(img, for: UIControl.State.selected.union(.highlighted)) } } } }
CaptureSession 카메라, 마이크 var captureSession: AVCaptureSession! var videoPreviewLayer: AVCaptureVideoPreviewLayer! viewDidLoad 퍼미션 체크, 요청 switch AVCaptureDevice.authorizationStatus(for: .video) { case .notDetermined: break case .restricted: break case .denied: if let url = URL(string: UIApplication.openSettingsURLString) { if UIApplication.shared.canOpenURL(url) { UIApplication.shared.open(url, options: [:], completionHa..