glm::mat4 transform = glm::mat4(1.0f);
transform = glm::translate(transform, glm::vec3(0.5f, -0.5f,0.0f));
1. mat4면 4x4 행렬이자나 vec3면 3x1행렬일테고 translate가 변환행렬이랑 벡터랑 곱하는건데 어떻게 4x4행렬이랑 3x1행렬이랑 곱해질수 있는거야?
2. 그리고 translate 시킨 transform 결과를 출력해보면
1 0 0 0
0 1 0 0
0 0 1 0
0.5 -0.5 0 1 로 나오는데 대체 뭐랑 어떻게 곱해졌길래 이렇게 나와??
translate 시키면 x + tx
y + ty 이런식으로 나오는거 아니야?
z + tz
1
변환,회전부터 헷갈린다;;;;
일단, 4행에 원소가 있는걸로 봐서 모든 vector는 row vector로 이해하고 있음. 즉 vec3은 3x1행렬이 아니라 1x4행렬임
둘째로, 컴퓨터 그래픽에선 3차원 공간을 4차원 사영공간의 단면으로 이해하고 있음. 저 말을 쉽게 말하자면 3차원 공간의 한 점 (3,4,5)는 마지막 위치에 1을 집어넣는 4차원백터 [3 4 5 1] 이랑 일대일 대응을 시킴. 저 방법의 장점은 일반적인 선형변환뿐만 아니라 마지막 행 4,1 4,2 4,3 성분을 각각 x y z축으로 평행변환하는거에 대응
가능하게 돼서 평행이동과 회전변환을 한꺼번에 처이할 수 있게 됨 (사실 4차원 사영공간에선 평행이동이 실제로 회전변환이기때문에..) 이 관계를 쓸때 두 위치의 차이인 벡터 3,4,5는 열벡터 3 4 5 0에 대응하게 됨
그리고 열벡터기때문에 action은 다 오른쪽에서 함. 즉 벡터가 왼쪽 행렬이 오른쪽임. (통상적인 선대책과는 반대) transpose 다 취해서 보면 통상적인 선대책을 복원할수도 있음
답변 감사용. 아 근데 진짜 이해안되는데 어떤 책같은거 참고할거 있음? 아니면 vec3를 1x4형태로 출력하는게 가능한가
vec3의 x y z 좌표 뒤에 0만 붙이고 오른쪽에서 행렬 곱하면 된다고. point엔 뒤에 1 붙이고 행럴곱하면 되고. 어떤 책을 보면 나오는게 아니라 모든 그래픽스책, 레퍼런스 등에 나와있지 않을까.
4차원 사영공간 => 3차원 사영공간으로 정정(3차원 사영공간의 점이 네개의 좌표로 표기함)