게임 개발
-
애파인 변환? 선형 변환과 이동을 하나의 행렬로 표현 참고자료: https://youtu.be/AheaTd_l5Is Homogeneous Coordinates 벡터: (x,y,z,0)
애파인 변환 (Affine Transformation)애파인 변환? 선형 변환과 이동을 하나의 행렬로 표현 참고자료: https://youtu.be/AheaTd_l5Is Homogeneous Coordinates 벡터: (x,y,z,0)
2023.11.21 -
핵심: 회전도 선형 변환이다. 따라서 회전도 행렬로 표현할 수 있다. 어떤 포인트를 회전시키고 싶다면, 벡터 곱하기 행렬형태로 사용할 수 있다. 회전축에 대한 벡터의 회전 먼저 회전 축을 정해야 한다. 그 다음 몇도만큼 회전할지 정해야 한다. 컴퓨터 그래픽스에서는 3차원 회전에 가장 기본적으로 사원수(Quaternion)을 사용한다. || n x v || == || v ⊥ || 이렇게 길이가 같은데 왜 같을까? 크로스 프로덕트해서 나온 벡터의 길이는 두 벡터가 만드는 평행사변형의 넓이와 같다. 사각형의 넓이는 밑변 x 높이 밑변은 w, 높이는 |v|sinθ 다. 따라서 || n x v || == || v ⊥ || 이다. 따라서 두 벡터가 원을 정의 할 수 있다. 그래서 그 원을 위와같이 한 평면으로 보면..
회전핵심: 회전도 선형 변환이다. 따라서 회전도 행렬로 표현할 수 있다. 어떤 포인트를 회전시키고 싶다면, 벡터 곱하기 행렬형태로 사용할 수 있다. 회전축에 대한 벡터의 회전 먼저 회전 축을 정해야 한다. 그 다음 몇도만큼 회전할지 정해야 한다. 컴퓨터 그래픽스에서는 3차원 회전에 가장 기본적으로 사원수(Quaternion)을 사용한다. || n x v || == || v ⊥ || 이렇게 길이가 같은데 왜 같을까? 크로스 프로덕트해서 나온 벡터의 길이는 두 벡터가 만드는 평행사변형의 넓이와 같다. 사각형의 넓이는 밑변 x 높이 밑변은 w, 높이는 |v|sinθ 다. 따라서 || n x v || == || v ⊥ || 이다. 따라서 두 벡터가 원을 정의 할 수 있다. 그래서 그 원을 위와같이 한 평면으로 보면..
2023.11.19 -
타우를 선형변환이라고 생각하면 된다. 선형 변환은 스케일링, 로테이션을 의미한다. 위의 두 가지 성질을 만족시키면 선형변환이라고 할 수 있다. 반대로 어떤것이 선형변환이다라고하면 위의 두 성질을 이용할 수 있다는 의미. 선형 변환이 아닌 경우 선형 변환의 예시 회전도 선형변환이다. 이동은 선형 변환일까? 선형변환만 가지고는 회전과 이동을 함께 다룰 수 없다. 추가적인 개념이 필요. 선형 변환의 행렬 표현 결국 선형변환을 벡터와 행렬형태의 곱셈으로 나타낼 수 있어서, 프로그래밍하기 쉽다라는 것을 말할려고 하는 것임. 스케일링 스케일링은 각 vertex들의 좌표에 곱셈을 하면 됨. 물론 스케일링의 역변환을 구하려면 역행렬을 구하면 나오긴 한다. 그러나 그냥 기하학적인 역변환을 구하는게 훨씬 쉽고 빠르다. 예시
선형 변환 (Linear Transformation)타우를 선형변환이라고 생각하면 된다. 선형 변환은 스케일링, 로테이션을 의미한다. 위의 두 가지 성질을 만족시키면 선형변환이라고 할 수 있다. 반대로 어떤것이 선형변환이다라고하면 위의 두 성질을 이용할 수 있다는 의미. 선형 변환이 아닌 경우 선형 변환의 예시 회전도 선형변환이다. 이동은 선형 변환일까? 선형변환만 가지고는 회전과 이동을 함께 다룰 수 없다. 추가적인 개념이 필요. 선형 변환의 행렬 표현 결국 선형변환을 벡터와 행렬형태의 곱셈으로 나타낼 수 있어서, 프로그래밍하기 쉽다라는 것을 말할려고 하는 것임. 스케일링 스케일링은 각 vertex들의 좌표에 곱셈을 하면 됨. 물론 스케일링의 역변환을 구하려면 역행렬을 구하면 나오긴 한다. 그러나 그냥 기하학적인 역변환을 구하는게 훨씬 쉽고 빠르다. 예시
2023.11.18 -
회전 주의 Transpose를 하면 -Sin theta가 왼쪽 아래에 온다. 이동 1을 더 붙였다! -> 이동 됨. 0을 붙이면? -> 이동 안됨. 즉, 일반 벡터면 0 붙이고, point 좌표이면 1을 붙인다. (차원 추가) 이런 방식을 Homogeneous Coordinates (동차좌표계)라고 부른다. Homogeneous Coordinates (동차좌표계) 벡터/포인트의 회전과 이동을 하나의 행렬로 표현 가능하다! 엄청 편하다!
변환 (Transformations)회전 주의 Transpose를 하면 -Sin theta가 왼쪽 아래에 온다. 이동 1을 더 붙였다! -> 이동 됨. 0을 붙이면? -> 이동 안됨. 즉, 일반 벡터면 0 붙이고, point 좌표이면 1을 붙인다. (차원 추가) 이런 방식을 Homogeneous Coordinates (동차좌표계)라고 부른다. Homogeneous Coordinates (동차좌표계) 벡터/포인트의 회전과 이동을 하나의 행렬로 표현 가능하다! 엄청 편하다!
2023.11.17 -
핵심 어떤 벡터를 이동, 회전, 스케일링 등등 Transformation 을 가하고 싶으면, 그 벡터에 행렬을 곱하면 된다. 행렬 표기법 row, column 행, 열 그림에서 행렬 B는 3x2 행렬 directX 에서는 u와 같은 row vector를 선호 Row Vector Column Vector 행렬 더하기 주의: 크기가 다른 행렬끼리는 더할 수 없다. 예) C+D=? 불가능 컴퓨터에게 연산을 시킬때, r(A+B)라고 계산을 시키는 쪽이 rA+rB 계산 시키는 쪽 보다 빠를것이다. r(A+B): 덧셈4번, 곱셈4번 rA+rB: 덧셈4번, 곱셈8번 같은 이유로 (r+s)A 가 rA + sA보다 더 빠름 행렬 곱하기 행렬끼리도 크기가 맞아야 한다. 예를들어 다음과 같은 AB의 곱셈은 불가. AB와 B..
행렬핵심 어떤 벡터를 이동, 회전, 스케일링 등등 Transformation 을 가하고 싶으면, 그 벡터에 행렬을 곱하면 된다. 행렬 표기법 row, column 행, 열 그림에서 행렬 B는 3x2 행렬 directX 에서는 u와 같은 row vector를 선호 Row Vector Column Vector 행렬 더하기 주의: 크기가 다른 행렬끼리는 더할 수 없다. 예) C+D=? 불가능 컴퓨터에게 연산을 시킬때, r(A+B)라고 계산을 시키는 쪽이 rA+rB 계산 시키는 쪽 보다 빠를것이다. r(A+B): 덧셈4번, 곱셈4번 rA+rB: 덧셈4번, 곱셈8번 같은 이유로 (r+s)A 가 rA + sA보다 더 빠름 행렬 곱하기 행렬끼리도 크기가 맞아야 한다. 예를들어 다음과 같은 AB의 곱셈은 불가. AB와 B..
2023.11.17 -
벡터는 굵은 소문자, 행렬은 굵은 대문자 사용. 벡터 벡터는 방향과 크기 (direction and magnitude) 두 벡터의 방향과 길이가 같으면 같은 벡터 벡터는 위치 무관 변위(displacements) 시작점과 상관없이 미는 정도(u). 이동을 벡터를 사용해서 표현할 수 있다. 좌표계에서 벡터의 좌표 벡터를 좌표계에 표현가능 벡터의 표준 위치 벡터의 꼬리를 0,0(원점)에 놓으면 표준위치. 좌표계 왼손 좌표계 vs 오른손 좌표계 DirectX, Unreal Engine 등은 왼손좌표계를 사용. Opengl, Vulkan, 컴퓨터 비전 쪽 등은 오른손 좌표계 사용. 통일되지 않았음. 기본적인 벡터 연산 벡터의 길이 단위 벡터(unit vector) 내적 (Dot Product) Orthogona..
벡터벡터는 굵은 소문자, 행렬은 굵은 대문자 사용. 벡터 벡터는 방향과 크기 (direction and magnitude) 두 벡터의 방향과 길이가 같으면 같은 벡터 벡터는 위치 무관 변위(displacements) 시작점과 상관없이 미는 정도(u). 이동을 벡터를 사용해서 표현할 수 있다. 좌표계에서 벡터의 좌표 벡터를 좌표계에 표현가능 벡터의 표준 위치 벡터의 꼬리를 0,0(원점)에 놓으면 표준위치. 좌표계 왼손 좌표계 vs 오른손 좌표계 DirectX, Unreal Engine 등은 왼손좌표계를 사용. Opengl, Vulkan, 컴퓨터 비전 쪽 등은 오른손 좌표계 사용. 통일되지 않았음. 기본적인 벡터 연산 벡터의 길이 단위 벡터(unit vector) 내적 (Dot Product) Orthogona..
2023.11.12