�� ���� ������ ���ǵ� Game Programming Gems 3 �ѱ�����(���� ��, ������ȭ��)�� �Ϻ��Դϴ�. �� �ۿ� ���� ��� �Ǹ��� ������ȭ�簡 ������ ������, ���� ��� ���̴� �� ����Ʈ �Խø� ����� ��� ������ ������� �����Ǿ� �ֽ��ϴ�.

�� ���� ���� ���� ���� �����̹Ƿ� ��Ÿ�� ������ ���� �� �ֽ��ϴ�. ���� �� �������� �Ѱ� ��, ������ ���̿� �μ�� ���¿ʹ� �ٸ� �� �ֽ��ϴ�. ���� å������ ǥ�� ������ �� �� ��Ȯ�� ���·� ǥ�õ� ���̸� �׸�/��ǥ ���� ������ ������ �ѱ�ȭ�� ���Դϴ�.

Game Programming Gem 3 �ѱ����ǿ� ���� ������ GPG ���͵�(http://www.gpgstudy.com/)���� ���� �� �ֽ��ϴ�.

2.4 ������� ����

Mark Zarb-Adami, Muckyfoot Productions
mark_at_muckyfoot.com

���ó��� ��ǻ�� ���ӵ��� ���� ���� �ִϸ��̼� �����͸� ����ϸ�, �� �ִϸ��̼� �����ӿ� ���̴� �޸� �� ���� �κ��� ������ ȸ���� �Һ�ȴ�. ȸ�� �����ʹ� �Ϲ������� �����(quaternion, ����) ���·� ����Ǵµ�, �� �ۿ����� float �� ��¥�� ������� �ϳ��� 32 ��Ʈ ������ �����ϴ� ������� ����, �񱳵ȴ�.

�����

�ϳ��� ����� Q(x, y, z, w)�� �ϳ��� ȸ�� ����� ǥ���� �� �ִ�. ��� ȸ�� ��ĵ��� �� A(X, Y, Z)�� ���� ���� θ�� ȸ���� �ǹ��Ѵٰ� �� ��, �� ȸ���� ���� ������� ������ ����.

���⼭,

����� Q(x, y, z, w)�� ����� Q'(-x, -y, -z, -w)�� ������ ȸ���� �ǹ��Ѵٴ� ���� �����ؾ� �� ���̴�. �̴� �� A�� ���� ���� θ�� ȸ���� �� -A�� ���� ���� -θ�� ȸ���� �����ϱ� �����̴�. �׸���, �� �ۿ����� ��� ��������� ����ȭ�� ���̶�� �����Ѵ�. ��, �� ���� ��� ����� Q(x, y, z, w)�� ������ �����Ѵ�.

�ּһ��

������� �� ������ �ϳ��� ����Ʈ�� ���� �� �ִٸ� ������� 32 ��Ʈ�� ������ �� �ִ�. ���� ������ �׷��� �ϸ� ���е��� ������ ���ۿ� ����. �׷��� ������� ����ȭ�Ǿ� �ִٴ� ���� �̿��ؼ� �� ���� �� �ϳ��� �����Ѵٸ� ���е��� �ø� �� �ִ�(���� ���� �� ���� ����ٰ� �ؼ� �ּһ��(smallest three)�̶�� �θ���). �� ���� ���е��� �־����� ������ �� ������ ����� �� �ִ�. �׷��ٸ� � ������ �����ؾ� �ұ�? ���밪�� ���� ū ������ �����ϸ� ������ ���鵵 �� �۾�����. ������, �ϳ��� ��������� ���� ū ���� ������ ������ �� ���е� �� 1/sqrt(2)�� �Ѵ� ���� �������� �ʴ´�. ������ ���� ������ �����غ��� �� ������ ������ �� ���� ���̴�. ����ȭ�� ��������� �� ������ ���� ������ ���� 0�̶�� �ϸ�(���� ��� Q(v, v, 0, 0)) �� ��°�� ū ������ �� ���� ū �����̴�. �׷� ������� ����ȭ�ϸ� 0�� �ƴ� ����, �� ���� ū ������ 1/sqrt(2)�� �Ǹ�, ���� ������ �� �� �� 1/sqrt(2)�� �Ѵ� ������ �������� �ʴ´�.

���� ū ������ ��ȣ�� ������ �ʿ䰡 ����. �׻� 0���� ũ�ٰ� �����ϸ� �DZ� �����̴�. ���� ū ������ ���� ��쿡�� ���� ���� ������ ����� ��ü�� ��ȣ�� �ٲٸ� �ȴ�.

�ع�

���� ���� (x, y, z)�� �� ���� ���� ��(yaw)�� ��ġ(pitch)������ ǥ���� �� �ִ�. ���� �׿� �ش��ϴ� ������� (��, ��ġ, w)�� ���� �� �ִ�. (x, y, z)�� ��� ��ġ�� �����ϸ� ���̿� ���� ������ �������, ������� ����ȭ�Ǿ��ٰ� �����ϹǷ� w�� ���ؼ� ���̸� �����ϴ� ���� �����ϴ�. w�� �׻� ���̶�� �����Ѵٸ� w�� ��ȣ ���� ������ �ʿ䰡 ����. ���� ���� �ƴ϶��, ���� ���� ���� ������ ����� ��ü�� ��ȣ�� ������ �����ϸ� �ȴ�.

���� ���͸� ��� ��ġ�� ������ �� �� ���� ������, ��ȯ�� ���͵��� ���鿡 ���� �յ��ϰ� �л���� �ʰ� �� �ؿ� ������ ������ ���δٴ� ���̴�. ������ ��ġ�� π/2�̰� ���Ͱ� �� ���� �ٷ� ����Ű�� �ִٸ�, ��� �������� �ʾƵ� �ȴ�. �׷��� ������ ��ġ�� 0�̰� ���Ͱ� ������ ���� ���� �ִٸ�, ���� ���� �� ������ �����ؾ� �Ѵ�. ���� ���͸� n ��Ʈ�� �����Ѵٰ� ����. �� ���� ����� ������ ���鿡 �յ��ϰ� ������Ű��, �� ���� (x, y, z) �Ǵ� (��, ��ġ)�� ���� ���̺��� �����ϰ�, �� ���̺��� ���� n ��Ʈ ������ �����ϴ� ���̴�. �̷��� ����� n�� ���� ������ ��ȿ�ϳ�, n�� Ŀ������ ���̺��� Ŀ���ٴ� ������ ������ �ִ�.

������ ���� ���̺� ���� ���� ���͸� ���ڵ��ϴ� ȿ������ ����� �����Ѵ�. �켱 x, y, z�� ��ȣ���� ���������� �����صΰ�, �� �ĺ��ʹ� x, y, z�� ��� ���̶�� �����Ѵ�. �̷��� �ϸ� ���� ������ ������ 8���� 1�� ����� �� �ִ�. �������δ�, �� 8�б��� ���鿡 ��ȣ�� �ű��(�׸� 2.4.1).

�׸� 2.4.1 8�б����� ���鿡 ��ȣ�� �ű��.

�׸� 2.4.1�� ����, ���� �����ڸ��� ������ ���������� �� �� �ִ�. �̷��� Ư¡�� �̿��ϸ� ���ڵ��� ��ȣ e�� �ش��ϴ� ��(row)�� ��(column)�� �˾Ƴ� �� �ִ�.

 row = floor(sqrt(e));
 column = e - row*row;

���� ������ ��ġ�� ���ȣ��, �並 ����ȣ�� �ؼ� e�� ���ϸ� ��������� �ϳ��� ���� ���͸� �ϳ��� n ��Ʈ ������ ������ �� �ִ�. �̷��� ������� �ָ��� ����, �ؿ����� ��� �� ���鵵 ������� ������ ���������� ������ �� ������ ����� �������ٴ� ���̴�.

����

�׷� ���ݱ��� �̾߱��� ������� ������ ���� �̾߱��غ���.

�ּһ��

�ּһ���� �ϳ��� ������� 32 ��Ʈ�� ����ϰ� �����Ѵ�. 32 ��Ʈ �� �� ��Ʈ�� ���ܵ�(���� ū) ������ �������� ����ϰ�, ������ 10 ��Ʈ���� ������ �� ���е��� �����Ѵ�. ����� ���е� ��� ���� [-1/sqrt(2), 1/sqrt(2)] �ȿ� ���Ƿ�, �� ������ [0, 1023]���� �����ؼ� �� ������ ���� ������ �����ϸ� �ȴ�.

�ع�

�پ��� ��Ʈ �Ҵ� ��ĵ��� ������ �� ���, w�� 11 ��Ʈ�� �Ҵ��ϴ� ��� ���� �� ������� �� �� �־���. x, y, z�� ��ȣ���� �� 3 ��Ʈ�� �����ϰ�, ������ 18 ��Ʈ�� ��� ��ġ�� �����Ѵ�. ��� ��ġ�� �ϳ��� ������ ��ȯ�Ѵٸ� 512���� ������ ������ �� �ִ�. �ƴϸ�, ��� ��ġ�� ���� 9 ��Ʈ�� ������ ���� �ִ�. ��� ��ġ ��� ������ [0, π/2]�̹Ƿ� �� ������ [0, 511]�� �����ؼ� ������ �����ϸ� �ȴ�.

��� ��ġ�� �ٽ� ���ͷ� �����Ϸ��� �� ��ο� ���� ���ΰ� �ڻ��� ����� �ʿ��ϴ�. �� �� [Edwards00]�� ���� ���� ���׽� �ٻ縦 ����ϸ� �ӵ��� �ø� �� ���� ���̴�. ����, ��� ��ġ�� �׻� [0, π/2]�� ���ϹǷ� �� ������ �°� �ٻ縦 ����ȭ�ϴ� �͵� ���� �����̴�. ���Ϸ�(Taylor) �޼��� π/4�� ����(0�� �ƴ϶�) �����ϰ� [0, π/4] ������ ������ ��׶���(Lagrange) �޼��� ���� ǥ�� ����� ����� ���� �ִ�. 5�������� ���Ϸ� �޼��� 4, 5�������� ��׶��� �޼��� ����ϴ�. 4�� ��׶��� �޼��� ���� �� ������ ������ ���е��� ����� �������� �ȴ�. �׸��� 5�� ��׶��� �޼��� 5�� ���Ϸ� �޼����� �� �����ϴ�.

���ڰ� ������ ���� Blade II�� �ִϸ��̼� �����ʹ� ���������� ����Ǿ� �����Ƿ� ��κ��� ��������� ���� ���� ������ ȸ���� ǥ���Ѵ�. ȸ������ θ�� �� �� ������� ��Į�� ���� w�� cos(θ/2)�̹Ƿ�, θ�� ���� �� w�� 1�� �ſ� ������. �̴� ������� ���������� ȸ������ ������ ��쿡�� ��� ���� ���̴�(�ڻ��� �Լ��� ���� ������). 1�� ����� ������ ���� �����ϰ� �����ϱ� ���� ����� �����, w ��� sqrt(1-w)�� �����ϰ� ������ Ǯ �� w�� �ٽ� �����ϴ� ���̴�.

����

�� ���� ����� ǰ���� �����ϱ� ����, Blade II�� ��������� �ڷ�� ����ߴ�. ���� ����� �̷���. �ڷ��� �� ����� Q�� �����ؼ� �� �ٸ� ����� Q'�� ���, Q�� Q'�� ��ĵ�� ��ȯ�� �� Q�� ��ȯ�� ���� Q'�� ��ȯ�� �� ������ �Ÿ��� ����Ѵ�. ���� �Ÿ��� ���� ����� ������ �����Ѵ�. ���� �� ����� ���� ���� �ӵ��� �����Ѵ�. �׸� 5.4.2�� Blade II�� ������ �ڷῡ ���� �� ���� ����� ����� ������ �����ְ� �ִ�. �ع��� ���� �ٻ� ����� 5�� ��׶��� ���׽��̴�.

���� �ð�

                                           �ع����� ���ڵ��� (��, ��ġ)�� w
�ִ� ����                                  ������ ǥ���� (��, ��ġ, w)     
                                           �ּһ��                        

��� ����

�׸� 2.4.2 Blade II ����� �ڷḦ �̿��� ���� ������� ������� ����

���

��ġ �ڷẸ�ٴ� ���� ���� ij���͵��� ������ �����ϴ� ���� �̷� ���� ����鿡 ���� �� �� �������� �� ����� ���̴�. Blade II�� ��� �������� ���븦 ���� �����Ǵ� ��Ȳ�� �������⵵ �ߴ�. Ư�� ij���Ͱ� �� ����(���� ��)�� ��� �ִ� ��� ������ �ſ� �Ǵ�. �ּһ���� ���� �ع��� ����� �� ���� ���� ������ ������ �ִ�.

������ ��

�� ���� ���̵� �����ϴ� �� ������ �� Jan Svarovsky�� Mike Diskett���� ������ ���� ���Ѵ�.

�����ڷ�