[Animation] 스키닝 애니매이션이란? (Skinning Animation)
컴퓨터 그래픽스/DirectX2024. 11. 10. 14:28[Animation] 스키닝 애니매이션이란? (Skinning Animation)

스키닝 애니매이션이란?스키닝 애니메이션(Skinning Animation)은 3D 컴퓨터 그래픽에서 객체가 자연스럽게 움직이도록 하기 위해 사용하는 애니메이션 기법이다. 3D 모델의 뼈대를 기반으로 정점을 뼈대에 결합시키는 기법이다. 이렇게 개념만 보면 무슨 말인지 모르겠다.그래서 본인이 스스로 공부한 것을 바탕으로 최대한 이해하기 쉽게 정리해보려고한다.(렌더링 파이프라인과정과 좌표계 변환 개념을 잘 이해하지 못하고 있다면 어렵다)모델이란?모델은 여러개의 메쉬들로 이루어진 경우가 많기 때문에 본인은 모델의 정의를 '여러 메쉬들로 이루어진 메쉬의 집합'라 하겠다.  그리기의 단위는 점, 선, 삼각형 순인데 정점 3개가 모이면 '폴리곤(polygon)'이라 부르고 이 폴리곤의 집합을 '메쉬(mesh)'라고 ..

[백준] 9663 N-Queen
알고리즘/백준2024. 10. 7. 12:48[백준] 9663 N-Queen

https://www.acmicpc.net/problem/9663 백트레킹 문제이다.어렵고 까다롭지만 좋은 문제라서 따로 정리해두려고한다.더 좋은 풀이는 https://cryptosalamander.tistory.com/58 이분의 풀이를 추천드린다. 풀이 흐름해당문제는 일단 하나의 row에 하나의 퀸만 배치할 수 있다는 것을 전재로 두는게 좋다.탐색 자체는 현재 row(행)의 특정 col(열)에 퀸을 배치할 수 있는지 없는지를 판단할 것이다.현재 row라는 값이 필요하기 때문에 탐색할 때 param으로 현재 현재 ‘row’를 받아와야한다.row의 특정 col에 조건을 따져 배치할 수 있다면 배치하고 그렇지 않다면 되돌아 가준다.계속 배치를 하다가 row가 n과 같다면 한 row당 하나의 퀸을 배치한 것..

스레드란?
CS2024. 9. 18. 22:37스레드란?

스레드(thread)란?'실행의 단위, 프로세스를 구성하는 실행 흐름의 단위를 뜻한다.' 실행의 흐름 단위가 1개라면 단을 프로세스, 실행 흐름의 단위가 여러개라면 멀티 스레드 프로세스이다.실행에 필요한 최소한의 정보만(프로그램 카운터, 레지스터, 스택)을 유지한체 프로세스의 자원을 공유하여 실행한다. 스레드가 왜 필요할까?윈도우 OS 기준 멀티 프로세스 기반 OS이다.즉 여러개의 프로세스를 실행할 수 있는데 여러개의 프로세스를 실행할 때 '컨텍스트 스위칭'이 발생한다.컨텍스트 스위칭(CS라 하겠다)을 간단하게 말하면 프로세스의 상태 정보를 저장하고 복원하는 일련의 과정을 뜻한다.이 CS는 아무리 못해도 1초에 수십번 발생하기 때문에 성능저하의 원인이 된다.(멀티 프로세스 기반 OS의 최대 단점중 한가지..

원근 투영 변환 행렬과 투영 변환 행렬의 의미 (수정)
컴퓨터 그래픽스2024. 8. 5. 18:26원근 투영 변환 행렬과 투영 변환 행렬의 의미 (수정)

수정 및 추가된 부분먼저 이전에 원근 투영 변환 행렬에 대해서 조금 잘 못 알고있던 부분을 수정했고 투영 변환 행렬에 대한 정확한 의미?를 추가하였습니다.원근 투영 변환 행렬이란?우선 원근 투영은 인간의 눈과 비슷하게 3차원 공간의 객체를 2차원 평면에 사영(Projection)하여 화면에 나타내는 방식이다. 즉, 3D 뷰 공간(space)으로 부터 2D 뷰포트 공간에 정점들을 변환 하는 행렬을 말한다.근데, 보통 구글링을 하면 3차원 공간에서 바로 2차원 뷰포트로 가는듯이 말을하는 글들이 많은데 중간 과정이 있다.바로 아래와 같이 카메라 시야각(FOV)안에 담긴 물체들을 -1~1크기의 정육면체 안으로 변환한다.NDC좌표계로 변경된 좌표를 이제 뷰포트 매핑을 해주어 화면에 보이게 되는 것이다. 왜 변환을..

View Spcae Matrix 만들기
컴퓨터 그래픽스/DirectX2024. 7. 31. 16:26View Spcae Matrix 만들기

뷰 스페이스란?'뷰 행렬은 카메라의 위치와 방향을 기반으로 3D공간을 카메라의 시점으로 변환하는 행렬'이다..이 행렬이 필요한 이유는 월드 공간은 매우 넓은 영역인데 이 영역을 다 보여준다면 프레임이 쭉쭉 떨어질 것이다.그래서 가상의 카메라 개념을 넣어서 카메라를 중심으로 화면이 보이도록 하겠다라는 것이다.이렇게 하기 위해서는 '월드 공간'에 있던 여러 오브젝트들을 카메라를 중심으로하는 좌표계로 변환 시켜야 하는데이 공간을 view space라 한다. (view space로 변환 시켜주는 행렬이 View Matrix이다) 이 과정을 짧게 정리하면 카메라를 월드 시스템의 원점으로 변환하고, 카메라가 양의 Z축을 보도록 회전 시켜야 한다는 것이다. 이때 월드에 대한 관점이 바뀌지 않도록 하기 위해서는 카메라..

Stack Frame과 함수 호출 규약(__stdcall)
CS2024. 4. 28. 22:36Stack Frame과 함수 호출 규약(__stdcall)

스택 프레임이란?쓰레드의 실행 문맥(Context)를 제공하는 스택의 추상화입니다.다른 말로는 함수의 호출 정보를 저장하는 자료구조이고, 이 자료구조는 스택형태로 되어 있습니다.스택 프레임에는 함수로 전달되는 매개 변수(인수)와 지역변수, 함수 호출을 마치면 돌아올 복귀 할 주소 등의 정보들이 들어갑니다. 스택프레임 형성 과정이런식으로 호출을 하는 경우 대~충 아래처럼 스택이 쌓입니다.sp(stack pointer)이라는 레지스터는 변수가 하나씩 할당될 때마다 증가하는데 증가하면서 다음 변수가 할당될 메모리 위치를 가르키게 됩니다.함수가 호출이 종료되고 나서 돌아갈 곳을 기억하기 위해서 fp(frame pointer) 라는 레지스터를 사용을 합니다.즉, sp가 돌아갈 위치를 fp가 기억을 해주는 방식입니..

[백준] 1948 임계경로 C++
알고리즘/백준2024. 4. 28. 10:52[백준] 1948 임계경로 C++

https://www.acmicpc.net/problem/1948 후기TopologySort + 탐색(DFS, BFS)가 같이 들어가 조금 어려웠던 문제 입니다.일단 문제를 읽고 위상정렬이라는 것 자체를 떠올리기가 힘들었고 역으로 1분도 쉬지 않고 달려야하는 경로를 찾는부분도 해맸던 문제입니다.해설먼저 문제의 조건에서 사이클이 없다는 것과 가장 마지막에 도착하는 사람이 있다는 것을 기반으로 위상정렬 아이디어를 떠올려서 가장 마지막에 도착하는 사람의 도착시간을 구해줍니다.(저는 스타크래프트 배럭과 벙커를 예시로 생각했습니다... 벙커를 지을려면 배럭을 먼저 지어야 하는 식의 예시)이후 도착점으로 부터 출발지 까지 역으로 DFS든 BFS로든 탐색을 해주는데'다음으로 갈 노드의 결과 값' == '현재 결과값 ..

[백준] 1525 퍼즐 C++
알고리즘/백준2024. 4. 15. 11:04[백준] 1525 퍼즐 C++

https://www.acmicpc.net/problem/1525 1525번: 퍼즐 세 줄에 걸쳐서 표에 채워져 있는 아홉 개의 수가 주어진다. 한 줄에 세 개의 수가 주어지며, 빈 칸은 0으로 나타낸다. www.acmicpc.net 후기 조금 어려웠던점 점은 원본 상태에 대한 상태를 변경해야한다는 부분을 어떻게 처리할 줄 몰랐었습니다. 기존의 조금 까다롭다고 생각되는 문제들은 2차원 배열을 탐색하는 것이 아니라 값 자체를 탐색하는것에 추가적으로 특정 상태를 기억한다음에 탐색을 이어 가는데 해당 문제는 이 두가지 가 모두 포함된 상태에서 탐색을 하는 대상자체와 방문 표시를 하는 부분에 대한 신경도 썻어야 하는 문제입니다. 풀이 "103425786"에 대한 상태를 문자열로 관리를 해줍니다. '0'이 있는 ..

image