我正在努力讓鍵盤輸入在GLUT中工作,我有很多時間。基本上我的問題是我設置爲與某些鍵相關的操作無法正常工作。Glutkeyboard輸入不註冊沒有奇怪的循環來幫助
這是我的聲明和glutKeyboardFunc的定義和glutKeyboardUpFunc:
glutKeyboardFunc(keyPressed);
glutKeyboardUpFunc(keyUp);
void keyPressed (unsigned char key, int x, int y) {
keyStates[key] = true;
}
void keyUp (unsigned char key, int x, int y) {
keyStates[key] = false;
}
與這些目標是當它壓和假當它被釋放只是設置鍵設置爲true。
我再定義一些事情要做基於這些按鍵:然後
void keyOperations (void) {
if (keyStates[int('w')] || keyStates[int('W')]){
xspeed-=0.001f;
}
if (keyStates[int('s')] || keyStates[int('S')]){
xspeed+=0.001f;
}
if (keyStates[int('a')] || keyStates[int('A')]){
yspeed+=0.001f;
}
if (keyStates[int('d')] || keyStates[int('D')]){
yspeed-=0.001f;
}
if (keyStates[' ']){
yspeed=0.0f;
xspeed=0.0f;
}
}
keyOperations叫我glutDisplayFunc。
void display(void) {
keyOperations();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f,-1.0f,z);
glRotatef(xrot,1.0f,0.0f,0.0f);
glRotatef(yrot,0.0f,1.0f,0.0f);
glBegin(GL_QUADS);
glNormal3f(0.0f, 1.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f);glVertex3f(-100.0f, -0.0001f, -100.0f);
glTexCoord2f(0.0f, 1.0f);glVertex3f(100.0f, -0.0001f, -100.0f);
glTexCoord2f(0.0f, 0.0f);glVertex3f(100.0f, -0.0001f, 100.0f);
glTexCoord2f(1.0f, 0.0f);glVertex3f(-100.0f, -0.0001f, 100.0f);
glEnd();
xrot+=xspeed;
yrot+=yspeed;
glutSwapBuffers();
}
如果你在我身邊吧,我的一些變量沿主要功能如下所示:
for循環我已經包括在主函數GLfloat xrot;
GLfloat yrot;
GLfloat xspeed;
GLfloat yspeed;
GLfloat z=-50.0f;
bool* keyStates = new bool[256];
int main (int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow ("Test");
for(int i=0; i<=255; i++){ //this is the odd loop I'm referring to
keyStates[i]=0;
}
glEnable (GL_DEPTH_TEST);
glEnable (GL_LIGHTING);
glEnable (GL_LIGHT0);
glutDisplayFunc(display);
glutIdleFunc (display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyPressed);
glutKeyboardUpFunc(keyUp);
glutMainLoop();
}
的重置整個keyStates陣列0.最終應該與glutKeyboardUpFunc具有相同的效果,但由於某些原因,如果沒有for循環,keyOperations將無法正確執行。
我已經搜索了一些類似於我的使用glutKeyboardUpFunc的代碼示例,但它找不到明顯相似的東西。我知道glutKeyboardUpFunc和glutKeyboardFunc中的操作只是在它到達那段代碼時插入某種退出命令來執行。
如果您刪除glutReshapeFunc(reshape),則此代碼應以其當前形式進行編譯;
我的問題具體是:這個for循環是什麼導致所需的旋轉效果,似乎沒有它沒有發生?如果你知道,我該如何解決這個問題?
另外,通過按a和d鍵在空白平面上的旋轉不明顯,但按w和s應該旋轉一些。根據計算機的速度,您可能需要更改xspeed和yspeed的數量以使其旋轉得更快/更慢。
啊,謝謝,現在我覺得我可能認識到這一點,當我第一次添加循環。我會研究GLFW。實際上,這個項目(我剝去了大部分代碼)只是在很短的時間內完成的,我已經試圖將我們的代碼從WinAPI轉換爲freeglut,因爲我們真的獲得了我們在opengl和window方面的第一次經驗管理等。 – Cerin 2012-03-03 05:13:25