일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- FABRIK
- InverseKinematics
- IK
- final
- ImageProcessing #ComputerGraphics #ComutationalPhotography #PoissinImageEditing #Siggraph2003
- C++11
- Override
- ComputerGraphics
- C++ #개발자 #Modern_C++ #스마트포인터 #Smart_Pointer #unique_ptr # shared_ptr # weak_ptr
- c++
- Modern C++
- TwoBoneIK
- FABIK
- IKSolver
- Kinematics
- 클래스
- 상속
- CCD
- Today
- Total
목록전체 글 (10)
DevNote
What is OS? OS (Operating System)는 메모리와 프로세스, 소프트웨어와 하드웨어를 관리하는 중추 프로그램이다. 우리가 컴퓨터를 사용하면서 대부분 응용 프로그램들을 사용할 것이고, 이 때, 일어나는 동작들을 간략히 말하면 아래와 같다. - 거의 항상 여러 프로그램(프로세스)이 동시에 실행되고 있다. - 이 때, 프로그램 실행을 위해 CPU와 메모리, 저장장치에 엑세스 해야한다. - CPU는 실제 실행을 위한 연산을 수행하고, 연산 수행을 위해 필요한 정보들은 메모리에 담기며, 실제로 실행되어야할 프로그램은 저장장치에 기록되어있다. - 실제로 프로그램이 실행되기 위해, 각 하드웨어들이 연동되고, 이런 동작들에 대한 전반적인 관리를 담당하는 것이 OS 다. 결국, OS는 유저가 컴퓨터를..
이전 포스트에서는 IK에 대해 간단하게 소개했고, 이번 포스트는 IK Solver에 대해 소개한다. 여러 IK Solvers 들이 있지만, Unreal Engine 4에서 제공되고 있는 IK Solver 위주로 찾아봤다. 1. Analytic Solver (Two-Bone IK) 뒤에 설명할 CCD와 FABRIK은 Iterative하게 최적화하는 방법이기 때문에 다소 비용이 비싸다. IK를 매우 자주 적용해야할 경우에 Closed-Form으로 떨어지는 Two-Bone IK 방법이 굉장히 빛을 발한다(식 하나로 계산이 끝나기 때문에 비용이 적다). 그러나 Joint가 많아지면 계산이 복잡해지는 문제가 있어 아래 과 같이 Joint 구조가 간단한 경우에 사용하는 것이 좋다. 문제는 간단하다 아래와 같은 본 ..
Computer Graphics 분야에서 다뤄지는 IK(Inverse Kinematics, 역운동학)에 대한 포스트이다. IK에 대해 이야기하기 전에 Kinematics가 뭔지에 대한 이해가 필요하다. 좀 흔하지 않은(?) 개념이기 때문이다. Kinematics? 운동학이다. " 움직임에 관여하는 힘과 모멘트(돌림힘) 등을 고려하지 않은! " 즉, 운동의 양상만을 다룬다. Computer Graphics 분야에서는 주로 관절이 존재하는 물체의 Animation을 다룰 때, Kinematics가 적용되는 경우가 많다. 이 때, 이 관절이 존재하는 물체를 Articulated Body라고 하고, 이는 Joints&Links로 이루어져 있으며, 이를 통해, 물체의 Animation을 표현할 수 있다. 이러한 ..
C++에서도 클래스 간의 상속에 관해 명시적으로, 그리고 효율적으로 대처할 수 있는 키워드가 있다. (Java의 Interface, final 이나 C#의 Sealed같은 기능을 제공해주는 키워드 같은게 C++11에서 추가됨) 그것이 바로 final과 override 키워드 두 가지이다. 이 두 개의 키워드를 통해 이전의 C++에서보다 더 정교하게 상속을 다룰 수 있게 되었다. Keyword Desc final - 상속을 차단할 때 사용, final로 선언된 클래스는 상속이 불가. override - 부모 클래스의 멤버 함수를 명시적으로 overrding 하기 위해 사용 - 상속 구조에서 파생 클래스 내에서 override로 선언된 멤버 함수는 부모 클래스의 멤버 함수를 명시적으로 overriding 한..
const - 의미적인 제약 :: const 키워드가 붙은 객체는 외부 변경을 불가능하게 한다. - 어떤 객체가 불변이어야 한다는 제작자의 의도를 컴파일러와 다른 개발자와 공유할 수 있는 수단 const의 특성 - 상수를 선언(정의)하는데 쓸 수 있다. - static으로 선언한 객체에도 const를 붙일 수 있다. - 어떠한 객체에도 붙을 수 있다. (객체 변수, 함수 파라미터 및 리턴 값, 멤버 함수, 포인터) 포인터와 const - 포인터 자체를 상수로, 혹은 포인터가 가리키는 데이터를 상수로, 혹은 둘 다 상수로 지정할 수 있다. 다음의 내용은 아래의 예제를 통해 확인할 수 있다. - 포인터가 가리키는 대상을 상수로 만들 때 const를 사용하는 스타일은 조금씩 다르다. 타입 앞에 cosnt가 붙..
C++에서의 함수 호출 C++에서는 함수가 호출되면 우선 스택에 함수로 전달할 파라미터와 함께 호출이 끝난 뒤 돌아갈 반환 주소값을 저장한다. 그리고는 프로그램의 제어가 해당 함수의 위치로 넘어와 함수 내에 선언된 지역 변수도 스택에 저장한다. 이때부터 함수의 모든 코드를 실행하게 되고, 실행이 전부 끝나면 반환값을 넘겨준다. 그리곤 스택에 저장된 돌아갈 반환 주소값으로 이동하여, 스택에 저장된 함수 호출정보를 제거한다. 이러한 과정은 매 함수마다 일어난다. 아래의 그림을 보면 이해가 빠를거다. Inline 함수 앞서 설명했듯 C++에서 함수의 호출은 꽤 복잡한 과정을 거치기 때문에, 코드가 복잡해지고, 무게가 무거워지면 호출시간이 쌓이고 쌓여 느린 코드가 될 수도 있다. C++에서는 이러한 경우에 사용..
C와 다르게 C++에는 특정 변수의 실제 이름 대신에 사용할 수 있는 참조자(reference)라는 새로운 기능이 추가되었다. 참조자는 크기가 큰 구조체나 클래스의 데이터를 함수의 인수로 줘야 할 경우나 클래스를 설계할 때 자주 사용된다. int x;// 변수 선언 int& rx = x;// 레퍼런스 선언 위의 예제를 보면 &연산자는 주소 연산자가 아니라 타입 식별을 위한 식별자로 사용된다. 즉, int&는 int형 변수에 대한 참조를 의미한다. 이렇게 선언된 참조자는 대상 변수와 같은 메모리 위치를 참조한다. 1. 레퍼런스의 타입은 대상이 되는 변수의 타입과 일치! 2. 선언과 동시에 초기화 3. 한 번 초기화되면, 참조 대상 변경이 불가능 #include using namespace std; int ..
C++에서 복사 생성자란 자신과 같은 클래스 타입의 다른 객체에 대한 참조(reference)를 인수로 전달받아, 그 참조를 가지고 자신을 초기화하는 방법이다. 복사 생성자는 새롭게 생성되는 객체가 원본 객체와 같으면서도, 완전한 독립성을 갖게 한다. 왜냐하면, 복사 생성자를 이용한 대입은 깊은 복사를 통한 값의 복사이기 때문이다. 그러면! 깊은 복사란 무엇인가? 복사 생성자를 설명할 때, 꼭 빠지지 않는 개념이 바로 얕은 복사와 깊은 복사이다. 새롭게 생성하는 변수에 다른 변수의 값을 대입하기 위해서는 대입 연산자(=)를 사용한다. 이와 마찬가지로 클래스 객체도 새롭게 생성될 때, 다른 객체의 값을 대입하기 위해 대입 연산자를 사용할 수 있다. 아래의 예제를 보면 좀 더 이해하기 쉬울 것이다. #inc..