OSDN Git Service

\83A\83o\83^\81[\82Ì\93®\8dì\82ð\95Ï\8dX
authorBreak <t_windbreak@yahoo.co.jp>
Fri, 11 Jun 2010 11:07:24 +0000 (20:07 +0900)
committerBreak <t_windbreak@yahoo.co.jp>
Fri, 11 Jun 2010 11:07:24 +0000 (20:07 +0900)
\83L\81[\93ü\97Í\82É\82æ\82Á\82Ä\8fã\89º\8d\89E\82É\93®\82­\82Ì\82Å\82Í\82È\82­
\91O\90i\81E\8cã\91Þ\82Æ\89ñ\93]\82É\93®\8dì\95Ï\8dX

source/main.cpp

index 71c6f2f..729c78a 100644 (file)
@@ -14,7 +14,7 @@
 // \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
@@ -75,9 +80,9 @@ void display()
        // 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«
        );
@@ -218,25 +223,37 @@ void timer(int value)
        // 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);
        }