// \83R\83\81\83\93\83g\82Æ\83R\83~\83b\83g\82Í\8aî\96{\89p\8cê\82Å\8bL\8fq\82·\82é
// \8dì\90¬\82·\82é\82à\82Ì
-// \89æ\96Ê\95\\8e¦ -> glut\82ð\97\98\97p\82·\82é\81A\8c»\92i\8aK\82Å\82ÍMVC\82Í\8dl\82¦\82¸\82Æ\82É\82©\82\8bL\8fq\82·\82é
+// \89æ\96Ê\95\\8e¦ -> glut\82ð\97\98\97p\82·\82é\81A\8c»\92i\8aK\82Å\82ÍMVC\82Í\8dl\82¦\82¸\82Æ\82É\82©\82\8bL\8fq\82·\82é\81B\8c»\8fó\8fã\82©\82ç\8e\8b\93_\82ª\8a®\90¬\81B -> \8cã\82Å\88ê\90l\8fÌ\8e\8b\93_\82Å\93®\8dì
// \89¹\90º\82Ì\93ü\97Í
// \89¹\90º\82Ì\8d\87\90¬
// \89¹\90º\82Ì\8dÄ\90¶
#include <Windows.h>
#include <cstdlib>
#include <iostream>
+#include <cmath>
#include <time.h>
//#include <GL/glut.h>
#include "glut.h"
+#ifndef M_PI
+#define M_PI 3.14159265357989
+#endif // M_PI
+
// \83A\83o\83^\81[\82Ì\8fî\95ñ
struct AvatarInformation
// z = 0\82ð\95W\8d\820
// set look at matrix
- // \8c»\8fó\82Í\8fã\82©\82ç\8e\8b\93_\81i\8fã\8bó20m\81j\82Æ\82·\82é
+ // \8c»\8fó\82Í\8fã\82©\82ç\8e\8b\93_\81i\8fã\8bó5m\81j\82Æ\82·\82é
gluLookAt(
- 0, 0, 20, // \8e\8b\93_\82Ì\88Ê\92u
+ 0, 0, 5, // \8e\8b\93_\82Ì\88Ê\92u
0, 0, 0, // \8e\8b\93_\82Ì\96Ú\95W\92n\93_
0, 1, 0 // \93ª\82Ì\8cü\82«
);
// 1\95b\8aÔ\82É60\89ñ\8cÄ\82Ñ\8fo\82³\82ê\82é
glutTimerFunc(1000 / 60, timer, 0);
- // \90l\82Ì\95à\82\91¬\93x\82ð1\95b\8aÔ\82É30cm\82Æ\82·\82é
- double a_VelocityParSecond = 0.3;
+ // \90l\82Ì\95à\82\91¬\93x\82ð1\95b\8aÔ\82É1m\82Æ\82·\82é
+ double a_VelocityParTimes = 1.0 / 60;
+ // 2\95b\82Å\90U\82è\95Ô\82é\81i180\93x = pi\81j\82Æ\82·\82é\81B
+ double a_RotateParTimes = M_PI / (2 * 60);
// \83L\81[\93ü\97Í\82Ì\8fó\91Ô\82É\82æ\82è\83A\83o\83^\81[\81ii = 0\82Ì\82Ý\81j\82ð\93®\82©\82·
- // up(y = 1) direciton
+ // \91O\90i
if((g_KeyStatus & KEY_UP_BIT) && !(g_KeyStatus & KEY_DOWN_BIT)){
- g_AvatarInformation[0].m_Position[1] += a_VelocityParSecond;
+ g_AvatarInformation[0].m_Position[0] += g_AvatarInformation[0].m_Direction[0] * a_VelocityParTimes;
+ g_AvatarInformation[0].m_Position[1] += g_AvatarInformation[0].m_Direction[1] * a_VelocityParTimes;
+ g_AvatarInformation[0].m_Position[2] += g_AvatarInformation[0].m_Direction[2] * a_VelocityParTimes;
}
- // down(y = -1) direciton
+ // \8cã\91Þ
else if(!(g_KeyStatus & KEY_UP_BIT) && (g_KeyStatus & KEY_DOWN_BIT)){
- g_AvatarInformation[0].m_Position[1] -= a_VelocityParSecond;
+ g_AvatarInformation[0].m_Position[0] -= g_AvatarInformation[0].m_Direction[0] * a_VelocityParTimes;
+ g_AvatarInformation[0].m_Position[1] -= g_AvatarInformation[0].m_Direction[1] * a_VelocityParTimes;
+ g_AvatarInformation[0].m_Position[2] -= g_AvatarInformation[0].m_Direction[2] * a_VelocityParTimes;
}
- // right(x = 1) direciton
+ // \89E\90ù\89ñ
if((g_KeyStatus & KEY_RIGHT_BIT) && !(g_KeyStatus & KEY_LEFT_BIT)){
- g_AvatarInformation[0].m_Position[0] += a_VelocityParSecond;
+ double x = g_AvatarInformation[0].m_Direction[0];
+ double y = g_AvatarInformation[0].m_Direction[1];
+ g_AvatarInformation[0].m_Direction[0] = x * cos(a_RotateParTimes) + y * sin(a_RotateParTimes);
+ g_AvatarInformation[0].m_Direction[1] = -x * sin(a_RotateParTimes) + y * cos(a_RotateParTimes);
}
- // left(x = -1) direciton
+ // \8d¶\90ù\89ñ
else if(!(g_KeyStatus & KEY_RIGHT_BIT) && (g_KeyStatus & KEY_LEFT_BIT)){
- g_AvatarInformation[0].m_Position[0] -= a_VelocityParSecond;
+ double x = g_AvatarInformation[0].m_Direction[0];
+ double y = g_AvatarInformation[0].m_Direction[1];
+ g_AvatarInformation[0].m_Direction[0] = x * cos(a_RotateParTimes) - y * sin(a_RotateParTimes);
+ g_AvatarInformation[0].m_Direction[1] = x * sin(a_RotateParTimes) + y * cos(a_RotateParTimes);
}