2011-04-20 180 views
2

我創建了一個用C++編寫的使用普通OpenGL(沒有外部工具)的遊戲池遊戲,但是我可以使用GLUT。我畫了一個我想跟隨鼠標光標的游泳池提示,但我不確定如何執行此操作。鼠標移動opengl

我知道如何使用鍵盤輸入移動物體,例如相機位置或繪製物體,但我不知道如何使用鼠標輸入移動物體。

這是我試圖通過鼠標輸入到移動提示:

void cue() { 
    glBegin; 
    glTranslatef(-10,5,0); 
    glRotatef(90,0,1,0); 
    glutSolidCone(0.25, 15, 20, 20); 
    glEnd(); 
} 
+0

當你說cue時,你的意思是排隊嗎?我不敢編輯它。 – orlp 2011-04-20 18:19:08

+0

不,它意味着提示...你在斯諾克或游泳池中使用的棍子的名字:) – DK10 2011-04-20 18:21:53

+1

@nightcracker:[pool cue](http://en.wikipedia.org/wiki/Cue_stick) – genpfault 2011-04-20 18:24:04

回答

1

使用一個全局變量來保持鼠標光標的位置,然後在兩個函數中使用它。

全局變量似乎是在glut之間所需的不同功能之間進行通信的唯一方式。考慮到目前的opengl/glut結構,在沒有它們的情況下做到這一點似乎非常困難。

2

澄清:OpenGL既不是建模庫,也不是場景圖。 OpenGL所做的就是將點,線和三角形扔到圖像緩衝區。

所以純粹使用OpenGL是不可能的。您將需要某種建模代碼來創建由三角形組成的模型。請你幫個忙和:

  • 模型與3D建模
  • 其導出到文件格式,你的對象,你可以閱讀
  • 在你的程序讀取這些文件併發送網從那裏
  • 到OpenGL

任何物理模擬(和你的池遊戲都需要一個)需要訪問物體的幾何。正如已經提到的,OpenGL不會建模,所以無論您使用OpenGL進行繪製,只要將其發送到OpenGL都不會使其可用於物理模擬。

無論如何,您的代碼是錯誤的:只允許頂點規範調用glBegin(...)glEnd()之間。您的電話glRotateglTranslateglutSolidCone不允許在那裏。

+0

我們不允許使用3D模型...它的任務.. ..當我運行它時,我的代碼也能很好地繪製? – DK10 2011-04-29 18:49:44

+2

@ DK10:呃,我不知道該怎麼說,但是誰給了你這個任務的限制是一個白癡。爲什麼:因爲強迫人們*編寫他們的對象*給他們一個關於如何使用OpenGL的錯誤想法。如果你的老師堅持使用GLU或GLUT來繪製東西,那麼你可以給他我的郵件地址「opengl-dev(at)wolfgang-draxinger(dot)net」,他也可以谷歌的「Wolfgang Draxinger OpenGL」。告訴他:「GLUT已經過時了,GLU不能和OpenGL-3以及更高版本一起工作」,並且拒絕瞭解將來不會從中受益的東西,請幫自己一個忙。 – datenwolf 2011-04-29 19:41:07

+0

@ DK10:順便說一句:你的代碼吸引人的是,因爲你實際上並沒有調用glBegin。你在那裏寫的語句只是指向函數glBegin的指針,然後立即丟棄它。你必須調用glBegin(GL_TRIANGLES)纔有意義。 – datenwolf 2011-04-29 20:14:58