프로그래밍/3D그래픽스 & 쉐이더 스피비 2011. 1. 5. 15:14
1. x축, y축, z축 각각의 회전행렬을 만든다. yaw(y축 회전각) pitch(x축), roll(z축) 2. 회전 행렬을 객체의 변환행렬과 각각 순서대(x, y, z)로 곱한다.(오일러각) 3. x축을 90도 틀고난 후 y축으로 90도 튼것과 y축을 90도 틀고난 후 z축으로 90도 튼것과의 회전 값이 같다. 4. 세 개의 축 각을 이용하여 항상 순서대로 회전을 하면 위와같이 한 개의 축이 쓸모 없게 된다. 이 현상이 짐벌락이다. 5. 이 문제는 계산을 한 번에 하지 않아서(세 번으로 나누어서)이다. 쿼터니온을 쓰면 한 번에 계산되어 문제가 해결된다. 즉 짐벌락현상을 없애기 위해서 쿼터니온을 쓰는것이다. *참고 - 오일러각 : 기준 방위에서 회전한 상태를 나타내기 위해 사용하는 3개의 각도. 더 알..
프로그래밍/3D그래픽스 & 쉐이더 스피비 2011. 1. 5. 14:22
3D 애니메이션 기초정리편. 애니메이션의 계층구조에 대하여. 노드의 월드행렬 = 노드의 지역행렬(Local Matrix) * 부모의 월드행렬( Parent World Matrix) 로 구할 수 있다. 애니메이션이 없는 static mesh일 경우에는 익스포팅할 때 미리 노드의 월드행렬을 계산하여 그대로 구성해주는 게 좋다. 하지만 애니메이션이 존재할 경우에는 크기변환, 회전변환, 이동변환을 가지고 지역 행렬을 구성해야 한다. 즉, S*R*T원칙( OpenGL에서는 그 반대인 T * R * S )에 따라!!!!!!!!!!!!!! 노드의 월드행렬 = 노드의 지역행렬(S*R*T) * 부모의 월드행렬( Parent World Matrix ) 로 구성해준다. 그리고 노드의 지역행렬을 구하고자 한다면 행렬의 수학적..
프로그래밍/3D그래픽스 & 쉐이더 스피비 2011. 1. 5. 13:54
사람과 동물은 관절체(articulated body)로 이루어져있다. 이러한 관절체의 중요한 특징은 계층구조를 갖는다는것!!!(hierachy) 거래한 트리구조를 가진다!. 종류: BSP(Binary surface particle tee, 2진트리) 쿼드트리 옥트리 등이 있다. 계층구조는 간단하게 생각하면 부모 - 자식 관계를 구현하는것. 부모-자식관계를 3D로 구현한다는 것은 결국 3D적인 표현 수단을 사용하는것 == 결국은 행렬을 사용하는것이다. 애니메이션의 계층구조에 대하여. 노드의 월드행렬 = 노드의 지역행렬(Local Matrix) * 부모의 월드행렬( Parent World Matrix) ***********************************************************..
프로그래밍/3D그래픽스 & 쉐이더 스피비 2011. 1. 4. 11:05
D3DXVec3TransformCoord 함수는 (x, y, z, 1) 벡터 와 4x4행렬을 곱하여 (x, y, z)벡터를 구하는 함수이다. (x, y, z, 1) x [_11, _12, _13, _14] [_21, _22, _23, _24] [_31, _32, _33, _34] [_41, _42, _43, _44] = [ (_11 * x) + (_21 * y) + (_31 * z) + _41 , (_12 * x) + (_22 * y) + (_32 * z) + _42 , (_13 * x) + (_23 * y) + (_33 * z) + _43 ]
프로그래밍/3D그래픽스 & 쉐이더 스피비 2011. 1. 4. 10:36
D3DXVec3TransformNormal 과 D3DXVec3TransformCoord 의 차이에 대해서 간단히 말씀드리도록 하겠습니다. 단순하게 말하자면 D3DXVec3TransformNormal 은 벡터를 변환하는 것이고 D3DXVec3TransformCoord 는 위치를 변환하는 것입니다. 벡터와 행렬을 곱하기 위해서는 행과 열이 같은 차수여야 한다는 것을 알고 계실 것입니다. 예를 들어서 [x, y, z] 라는 3차원 벡터가 존재하는데 D3D 에서는 4x4 행렬을 곱하게 됩니다. 이러한 벡터를 행렬과 연산을 할 때는 차수를 맞춰줘야지 곱할 수 있게 됩니다. 즉 3차 벡터를 마치 1x4 행렬 혹은 4x1 행렬인 것처럼 만들어 주어야 4x4 행렬과 곱하는 것이 가능하다는 것이죠. D3DXVec3Tra..