OpenGlでのキーボードハンドラについて
Posted: 2013年7月18日(木) 00:20
現在OpenGLを勉強しておりモデルを作ってキーの入力でglLookatの中身の値を変えて
いろいろな視点から眺めたいのですがキーを押しても全く動いてくれません
似たような質問を探してみたのですが解決には至りませんでした。
どうかよろしくお願いいたします。
いろいろな視点から眺めたいのですがキーを押しても全く動いてくれません
似たような質問を探してみたのですが解決には至りませんでした。
どうかよろしくお願いいたします。
#include "glut.h"
#include <GL/gl.h>
#include<math.h>
#define PI 3.14159265358979
int X=4;
int Y=4;
int Z=0;
void Prism(int N) // N角柱描関数
{
int n=N;
double rad=2*PI/n;
//上面を描画 (GL_POLYGON)
glBegin(GL_POLYGON);
glNormal3f(0,1,0);
for(int i=0;i<=n;i++)
{
glVertex3f(cos(rad*i), 2,sin(rad*i)); //i点_目U
}
glEnd();
//下面を描画 (GL_POLYGON)
glBegin(GL_POLYGON);
glNormal3f(0,-1,0);
for(int i=0;i<=n;i++)
{
glVertex3f(cos(rad*i), -2,sin(rad*i)); //i点_目U
}
glEnd();
//側面を描画 (GL_QUAD_STRIP)
glBegin(GL_QUAD_STRIP);
for(int i=0;i<=n;i++)
{
glNormal3f(cos(rad*i),0,sin(rad*i)); //i点_目U
glVertex3f(cos(rad*i),2,sin(rad*i));
glVertex3f(cos(rad*i),-2,sin(rad*i));
glVertex3f(cos(rad*(i+1)),2,sin(rad*(i+1)));
glVertex3f(cos(rad*(i+1)),-2,sin(rad*(i+1)));
}
glEnd();
}
void Prism2(int N) //
{
int n=N;
double rad=2*PI/n;
//上の面描画 (GL_POLYGON)
glBegin(GL_POLYGON);
glNormal3f(0,1,0);
for(int i=0;i<=n;i++)
{
glVertex3f(2,0.5*cos(rad*i) ,0.5*sin(rad*i)); //i点_目U
}
glEnd();
//下の画面(GL_POLYGON)
glBegin(GL_POLYGON);
glNormal3f(0,-1,0);
for(int i=0;i<=n;i++)
{
glVertex3f(-2,0.5*cos(rad*i),0.5*sin(rad*i)); //i点_目U
}
glEnd();
//側面を描画 (GL_QUAD_STRIP)
glBegin(GL_QUAD_STRIP);
for(int i=0;i<=n;i++)
{
glNormal3f(0,0.5*cos(rad*i),0.5*sin(rad*i)); //i点_目U
glVertex3f(2,0.5*cos(rad*i),0.5*sin(rad*i));
glVertex3f(-2,0.5*cos(rad*i),0.5*sin(rad*i));
glVertex3f(2,0.5*cos(rad*(i+1)),0.5*sin(rad*(i+1)));
glVertex3f(-2,0.5*cos(rad*(i+1)),0.5*sin(rad*(i+1)));
}
glEnd();
}
//===== キーボードハンドラ
void KeyboardHandler(unsigned char key, int x, int y)
{
if(key =='a')
X++;
if(key=='s')
Y++;
if(key=='d')
Z++;
}
void display( void )
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f( 1.0, 1.0, 1.0 );
glMatrixMode(GL_MODELVIEW);s
glLoadIdentity();
glTranslatef(0.0, 0.0, -8.0);
Prism(12);
Prism2(12);
glutPostRedisplay();
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitWindowPosition(0, 0);
glutInitWindowSize(400, 400);
glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH);
glutCreateWindow("test");
glClearColor ( 0.0, 0.0, 0.0, 1.0 );
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45, 1.0, 1.0, 20.0);
gluLookAt(X, Y, Z, 0, 0, -8, 0, 1, 0);
glShadeModel(GL_FLAT);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glEnable(GL_DEPTH_TEST);
float light_position[] = {5.0, 10.0, 2.0, 0.0};
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glutKeyboardFunc(KeyboardHandler);
glutDisplayFunc(display);
glutPostRedisplay();
glutMainLoop();
}