SlideShare une entreprise Scribd logo
1  sur  74
Télécharger pour lire hors ligne
이해석
PencilKit과 Point in Polygon
알고리즘을 활용한 올가미 툴 개발기
콴다(매스프레소)
목차
1.올가미 툴이란?
2.PencilKit 알아보기
3.어떻게 구현 했나요?
4.마무리
올가미 툴이란?
GoodNotes Notability
QANDA
PencilKit 알아보기
PencilKit
Framework iOS 13+ iPadOS 13+
macOS 10.15+
(macOS Catalina)
iOS 14+ iPadOS 14+ macOS 11.0+
(macOS Big Sur)
PencilKit
PKDrawing
PKStroke
PKInk
PKTool
PKToolPicker
PKCanvasView
PKStrokePath PKStrokePoint
PKInkingTool
PKLassoTool
PKEraserTool
PencilKit
PKDrawing
PKStroke
PKInk
PKTool
PKToolPicker
PKCanvasView
PKStrokePath PKStrokePoint
PKInkingTool
PKLassoTool
PKEraserTool
PKCanvasView
iOS 13+
PKDrawing
iOS 13+
QANDA
PKInk
PKStrokePath
PKStrokePoint
PKStroke
iOS 14+
Location / Force
Azimuth
Altitude
PKToolPicker
iOS 13+
PKTool
iOS 13+
PKEraserTool
PKLassoTool
PKInkingTool
Ruler
PKLassoTool 👎
PKStroke 이외에도 사용자가 PKCanvasView 위에 올린
이미지 / 텍스트 (UIView)에도 올가미의 기능을 적용해야 함
UI/ 기능 확장의 어려움
올가미 기능
PKStroke 뿐만 아니라 PKCanvasView 위에 올린 이미지 또는 텍스트 뷰를 잡을 수 있어야 함
올가미가 아이템들을 잡은 상태에서 아이템들의 위치를 이동시킬 수 있어야함
어떻게 구현했나요?
올가미 안에 어떤 아이템이 포함 되었는지
포함되지 않았는지 어떻게 알 수 있을까?
다각형 안에 어떤 점들이 포함 되었는지 포
함되지 않았는지 어떻게 알 수 있을까?
Point in Polygon Problem
https://en.wikipedia.org/wiki/Point_in_polygon
평면에서 주어진 점이 다각형의 내부 혹은 외부에 있는지를 판별하는 문제
Ray casting algorithm
https://en.wikipedia.org/wiki/Point_in_polygon
O(N) 시간 복잡도
crossing number 알고리즘 혹은 even-odd rule 알고리즘이라고 함
https://en.wikipedia.org/wiki/Point_in_polygon
1. 반직선과 변의 교점의 개수가 짝수면 외부에 있는 점, 홀수면 내부에 있는 점
2. 변 위에 있는 점은 내부에 있는 점
3. 반직선이 꼭짓점을 지날때 위쪽과 아래쪽 변 중 한 개만 교차한다고 판단함
4. 반직선이 변과 평행한 경우는 고려하지 않음
1. 반직선과 변의 교점의 개수가 짝수면 외부에 있는 점, 홀수면 내부에 있는 점
2. 변 위에 있는 점은 내부에 있는 점
3. 반직선이 꼭짓점을 지날때 위쪽과 아래쪽 변 중 한 개만 교차한다고 판단함
4. 반직선이 변과 평행한 경우는 고려하지 않음
1. 반직선과 변의 교점의 개수가 짝수면 외부에 있는 점, 홀수면 내부에 있는 점
2. 변 위에 있는 점은 내부에 있는 점
3. 반직선이 꼭짓점을 지날때 위쪽과 아래쪽 변 중 한 개만 교차한다고 판단함
4. 반직선이 변과 평행한 경우는 고려하지 않음
1. 반직선과 변의 교점의 개수가 짝수면 외부에 있는 점, 홀수면 내부에 있는 점
2. 변 위에 있는 점은 내부에 있는 점
3. 반직선이 꼭짓점을 지날때 위쪽과 아래쪽 변 중 한 개만 교차한다고 판단함
4. 반직선이 변과 평행한 경우는 고려하지 않음
1. 반직선과 변의 교점의 개수가 짝수면 외부에 있는 점, 홀수면 내부에 있는 점
2. 변 위에 있는 점은 내부에 있는 점
3. 반직선이 꼭짓점을 지날때 위쪽과 아래쪽 변 중 한 개만 교차한다고 판단함
4. 반직선이 변과 평행한 경우는 고려하지 않음
PKStroke
PKStroke 을 점으로 표현할 수 없을까?
WWDC20: inspect, modify, and construct PencilKit drawings
UIView 는 어떻게 잡을 수 있을까?
UIImageView
CGRect의 contains?
UIImageView
더 정밀하게 잡을 수 없을까?
UIImageView를 점들로 표현해보자!
UIImageView
UIImageView
기준점을 원점으로 보냄
원점을 기준으로 Transform
원위치로 다시 이동
1
2
3
(xr, yr)
(xr, yr)
1 2 3
import UIKit
extension UIView {
var frameBeforeTransformed: CGRect {
let previousTransform = transform
transform = .identity
let frame = frame
transform = previousTransform
return frame
}
func transformedEdges(cases: [CGRectEdgeType] = CGRectEdgeType.allCases) -> [CGPoint] {
let result = cases.map { edgeType -> CGPoint in
let point = frameBeforeTransformed.point(type: edgeType)
let movedPoint = pointBeforeTransformed(point)
let transformedPoint = movedPoint.applying(transform)
return pointAfterTransformed(transformedPoint)
}
return result
}
func pointBeforeTransformed(_ point: CGPoint) -> CGPoint {
return .init(x: point.x - center.x, y: point.y - center.y);
}
func pointAfterTransformed(_ point: CGPoint) -> CGPoint {
return .init(x: point.x + center.x, y: point.y + center.y);
}
}
import UIKit
enum CGRectEdgeType: CaseIterable {
case leftTop
case leftBottom
case rightTop
case rightBottom
}
extension CGRect {
func point(type: CGRectEdgeType) -> CGPoint {
switch type {
case .leftTop:
return CGPoint(x: minX, y: minY)
case .leftBottom:
return CGPoint(x: minX, y: maxY)
case .rightTop:
return CGPoint(x: maxX, y: minY)
case .rightBottom:
return CGPoint(x: maxX, y: maxY)
}
}
}
1
2
3
UIImageView
Accelerate
고성능 & 낮은 에너지 소비에 최적화된 수학/이미지 계산 라이브러리
Accelerate: vDSP_vgenp(_:_:_:_:_:_:_:_)
func linearInterpolation(point1: CGPoint, point2: CGPoint) -> [CGPoint] {
let (start, end) = point2.x < point1.x ? (point2, point1) : (point1, point2)
let (startX, endX) = (Float(start.x), Float(end.x))
let (startY, endY) = (Float(start.y), Float(end.y))
let (deltaX, deltaY) = (abs(endX - startX), abs(endY - startY))
let maxDelta = max(deltaX, deltaY)
let (indices, stride, n) = ([0, maxDelta], vDSP_Stride(1), vDSP_Length(maxDelta))
var xPoints = [Float](repeating: 0, count: Int(n))
var yPoints = [Float](repeating: 0, count: Int(n))
var values = [startX, endX]
vDSP_vgenp(
values, stride,
indices, stride,
&xPoints, stride,
n, vDSP_Length(values.count)
)
values = [startY, endY]
vDSP_vgenp(
values, stride,
indices, stride,
&yPoints, stride,
n, vDSP_Length(values.count)
)
return zip(xPoints, yPoints).map { CGPoint(x: CGFloat($0), y: CGFloat($1)) }
}
UIImageView
Edge case를 찾아보자
Case1
Case2
Case3
Case3
Case3
올가미로 잡은 아이템을 어떻게 옮길 수 있을까?
UIView를 옮기는 건 쉬운데…
PKStroke은 어떻게 옮길 수 있을까?
UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke을
PKDrawing에서 분리
Changed
Ended
올가미로 잡은 PKStroke에 transform 적용
transform 된 PKStroke 생성
import PencilKit
extension PKStroke {
func createNewStroke(with transform: CGAffineTransform) -> PKStroke {
let dx = transform.tx
let dy = transform.ty
let resultPoint: [PKStrokePoint] = path.map { p in
return PKStrokePoint(
location: CGPoint(x: (p.location.x + dx), y: (p.location.y + dy)),
timeOffset: p.timeOffset,
size: p.size,
opacity: p.opacity,
force: p.force,
azimuth: p.azimuth,
altitude: p.altitude
)
}
let resultPath = PKStrokePath(controlPoints: resultPoint, creationDate: Date())
var resultStroke = PKStroke(ink: PKInk(ink.inkType, color: ink.color), path: resultPath, transform: .identity)
if let mask = mask {
mask.apply(transform)
resultStroke.mask = mask
}
return resultStroke
}
}
올가미로 잡은 PKStroke에 transform 적용
transform 된 PKStroke 생성
UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke을
PKDrawing에서 분리
Changed
Ended
새로운 PKStroke을 PKCanvasView의
PKDrawing에 반영
QANDA
UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke에 transform 적용
transform 된 PKStroke 생성
올가미로 잡은 PKStroke을
PKDrawing에서 분리
⚠ 랜더링 병목 발생!
새로운 PKStroke을 PKCanvasView의
PKDrawing에 반영
Changed
Ended
UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke을 PKDrawing에서 분리
분리한 PKStroke로 새로운 PKDrawing을 생성
새로운 PKDrawing을 이미지로 변환 / 이미지 뷰 생성 (Snapshot)
PKDrawing: image(from: CGRect, scale: CGFloat)
UIPanGestureRecognizer Logic
Began
올가미로 잡은 PKStroke을 PKDrawing에서 분리
Changed
분리한 PKStroke로 새로운 PKDrawing을 생성
새로운 PKDrawing을 이미지로 변환 / 이미지 뷰 생성 (Snapshot)
이미지 뷰를 transform 시킴
transform 된 PKStroke 생성
이미지 뷰 제거
새로운 PKStroke을 PKCansvasView의 PKDrawing에 반영
Ended
dragging ?
UIPanGestureRecognizer
Began
Changed
Ended
true false
reset lasso points
append lasso point
draw bezier path
append lasso point
draw bezier path
append lasso point
draw bezier path
captured?
false
reset lasso points
detach captured strokes
Ray casting algorithm
move uiviews
move image view (strokes)
attach captured strokes
detach image view
Ray casting algorithm
attach image view
attach image view
false
detach captured strokes
move uiviews
move image view (strokes)
attach captured strokes
detach image view
dragging ?
UIPanGestureRecognizer
Began
Changed
Ended
true
reset lasso points
append lasso point
draw bezier path
append lasso point
draw bezier path
captured?
false
reset lasso points
Ray casting algorithm
Ray casting algorithm
append lasso point
draw bezier path
append lasso point
draw bezier path
Ray casting algorithm
true
reset lasso points
append lasso point
draw bezier path
append lasso point
draw bezier path
captured?
false
reset lasso points
false
detach captured strokes
move uiviews
move image view (strokes)
attach captured strokes
detach image view
dragging ?
UIPanGestureRecognizer
Began
Changed
Ended
Ray casting algorithm
attach image view
QANDA
Apple Documentation
PencilKit
https://developer.apple.com/documentation/pencilkit
Accelerate
https://developer.apple.com/documentation/accelerate
WWDC
Introducing PencilKit
https://developer.apple.com/videos/play/wwdc2019/221/
What’s new in PencilKit
https://developer.apple.com/videos/play/wwdc2020/10107/
Inspect,modify,and construct PencilKit drawings
https://developer.apple.com/videos/play/wwdc2020/10148
콴다 기술 블로그
iOS PencilKit을 활용한 Drawing 노트 개발기
https://blog.mathpresso.com/ios-pencilkit을-활용한-drawing-노트-개발기-
d50019d42041
이해석
감사합니다
콴다(매스프레소)
Special Thanks
신연화 님 / QANDA iOS 팀 / 이정엽, 정초이
Let'Swift 2022 PencilKit과 Point in Polygon 알고리즘을 활용한 올가미 툴 개발기

Contenu connexe

Tendances

YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方wata2ki
 
Container Storage Best Practices in 2017
Container Storage Best Practices in 2017Container Storage Best Practices in 2017
Container Storage Best Practices in 2017Keith Resar
 
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked ChangesJiyeon Seo
 
PowerDNS with MySQL
PowerDNS with MySQLPowerDNS with MySQL
PowerDNS with MySQLI Goo Lee
 
Yocto Project ハンズオン / 参加者用資料
Yocto Project ハンズオン / 参加者用資料Yocto Project ハンズオン / 参加者用資料
Yocto Project ハンズオン / 参加者用資料Nobuhiro Iwamatsu
 
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3infinite_loop
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化Kumazaki Hiroki
 
AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較beyond Co., Ltd.
 
今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンスHidenori Ishii
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅NAVER D2
 
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門Takashi Takizawa
 
PostgreSQL HA
PostgreSQL   HAPostgreSQL   HA
PostgreSQL HAharoonm
 
MongoDB at Baidu
MongoDB at BaiduMongoDB at Baidu
MongoDB at BaiduMat Keep
 
OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門VirtualTech Japan Inc.
 
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理するHyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理するjunichi anno
 
Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표Kwen Won Lee
 

Tendances (20)

YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方YoctoをつかったDistroの作り方とハマり方
YoctoをつかったDistroの作り方とハマり方
 
Container Storage Best Practices in 2017
Container Storage Best Practices in 2017Container Storage Best Practices in 2017
Container Storage Best Practices in 2017
 
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
코드 리뷰의 또 다른 접근 방법: Pull Requests vs. Stacked Changes
 
PowerDNS with MySQL
PowerDNS with MySQLPowerDNS with MySQL
PowerDNS with MySQL
 
Yocto Project ハンズオン / 参加者用資料
Yocto Project ハンズオン / 参加者用資料Yocto Project ハンズオン / 参加者用資料
Yocto Project ハンズオン / 参加者用資料
 
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
Dbtechshowcasesapporo mysql-turing-for-cloud-0.9.3
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化
 
Goss入門
Goss入門Goss入門
Goss入門
 
AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較
 
レシピの作り方入門
レシピの作り方入門レシピの作り方入門
レシピの作り方入門
 
今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス
 
[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅[232] 성능어디까지쥐어짜봤니 송태웅
[232] 성능어디까지쥐어짜봤니 송태웅
 
#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門#logstudy 01 rsyslog入門
#logstudy 01 rsyslog入門
 
PostgreSQL HA
PostgreSQL   HAPostgreSQL   HA
PostgreSQL HA
 
Yahoo! JAPANにおけるApache Cassandraへの取り組み
Yahoo! JAPANにおけるApache Cassandraへの取り組みYahoo! JAPANにおけるApache Cassandraへの取り組み
Yahoo! JAPANにおけるApache Cassandraへの取り組み
 
MongoDB at Baidu
MongoDB at BaiduMongoDB at Baidu
MongoDB at Baidu
 
OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門OpenStackで始めるクラウド環境構築入門
OpenStackで始めるクラウド環境構築入門
 
Hyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理するHyper-V を Windows PowerShell から管理する
Hyper-V を Windows PowerShell から管理する
 
Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표
 

Similaire à Let'Swift 2022 PencilKit과 Point in Polygon 알고리즘을 활용한 올가미 툴 개발기

Day by day iPhone Programming
Day by day iPhone ProgrammingDay by day iPhone Programming
Day by day iPhone ProgrammingYoung Oh Jeong
 
NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스Sungik Kim
 
NDC11_슈퍼클래스
NDC11_슈퍼클래스NDC11_슈퍼클래스
NDC11_슈퍼클래스noerror
 
스위프트 성능 이해하기
스위프트 성능 이해하기스위프트 성능 이해하기
스위프트 성능 이해하기Yongha Yoo
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술henjeon
 
Klaytn Developer Meetup_20191022
Klaytn Developer Meetup_20191022Klaytn Developer Meetup_20191022
Klaytn Developer Meetup_20191022Klaytn
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9진현 조
 
셰이더가 뭐에요?
셰이더가 뭐에요?셰이더가 뭐에요?
셰이더가 뭐에요?Jungsoo Park
 
배정섭, 쉽고 빠르게 매력적인 모션 제작하기 tip, NDC2010
배정섭, 쉽고 빠르게 매력적인 모션 제작하기 tip, NDC2010배정섭, 쉽고 빠르게 매력적인 모션 제작하기 tip, NDC2010
배정섭, 쉽고 빠르게 매력적인 모션 제작하기 tip, NDC2010devCAT Studio, NEXON
 
c++ opencv tutorial
c++ opencv tutorialc++ opencv tutorial
c++ opencv tutorialTaeKang Woo
 
임통신 기말 프로젝트 PPT.pptx
임통신 기말 프로젝트 PPT.pptx임통신 기말 프로젝트 PPT.pptx
임통신 기말 프로젝트 PPT.pptxssuser5fef0f
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 
개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow양 한빛
 
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.병대 손
 
Rainbow의 혈관 속 탐험 (The Rainbow's adventure in the vessel) (RL Korea)
Rainbow의 혈관 속 탐험 (The Rainbow's adventure in the vessel) (RL Korea)Rainbow의 혈관 속 탐험 (The Rainbow's adventure in the vessel) (RL Korea)
Rainbow의 혈관 속 탐험 (The Rainbow's adventure in the vessel) (RL Korea)Kyunghwan Kim
 
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로Oracle Korea
 

Similaire à Let'Swift 2022 PencilKit과 Point in Polygon 알고리즘을 활용한 올가미 툴 개발기 (20)

Day by day iPhone Programming
Day by day iPhone ProgrammingDay by day iPhone Programming
Day by day iPhone Programming
 
NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스
 
NDC11_슈퍼클래스
NDC11_슈퍼클래스NDC11_슈퍼클래스
NDC11_슈퍼클래스
 
스위프트 성능 이해하기
스위프트 성능 이해하기스위프트 성능 이해하기
스위프트 성능 이해하기
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
 
Klaytn Developer Meetup_20191022
Klaytn Developer Meetup_20191022Klaytn Developer Meetup_20191022
Klaytn Developer Meetup_20191022
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9
 
셰이더가 뭐에요?
셰이더가 뭐에요?셰이더가 뭐에요?
셰이더가 뭐에요?
 
배정섭, 쉽고 빠르게 매력적인 모션 제작하기 tip, NDC2010
배정섭, 쉽고 빠르게 매력적인 모션 제작하기 tip, NDC2010배정섭, 쉽고 빠르게 매력적인 모션 제작하기 tip, NDC2010
배정섭, 쉽고 빠르게 매력적인 모션 제작하기 tip, NDC2010
 
c++ opencv tutorial
c++ opencv tutorialc++ opencv tutorial
c++ opencv tutorial
 
Picking
PickingPicking
Picking
 
알고리즘
알고리즘알고리즘
알고리즘
 
임통신 기말 프로젝트 PPT.pptx
임통신 기말 프로젝트 PPT.pptx임통신 기말 프로젝트 PPT.pptx
임통신 기말 프로젝트 PPT.pptx
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow개발자를 위한 공감세미나 tensor-flow
개발자를 위한 공감세미나 tensor-flow
 
2D games with iOS or Corona
2D games with iOS or Corona2D games with iOS or Corona
2D games with iOS or Corona
 
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
React 애플리케이션 아키텍처 - 아무도 알려주지 않아서 혼자서 삽질했다.
 
Rainbow의 혈관 속 탐험 (The Rainbow's adventure in the vessel) (RL Korea)
Rainbow의 혈관 속 탐험 (The Rainbow's adventure in the vessel) (RL Korea)Rainbow의 혈관 속 탐험 (The Rainbow's adventure in the vessel) (RL Korea)
Rainbow의 혈관 속 탐험 (The Rainbow's adventure in the vessel) (RL Korea)
 
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
[Main Session] 미래의 Java 미리보기 - 앰버와 발할라 프로젝트를 중심으로
 
Java.next
Java.nextJava.next
Java.next
 

Let'Swift 2022 PencilKit과 Point in Polygon 알고리즘을 활용한 올가미 툴 개발기