[問題] openGL載入貼圖連續顯示

看板C_and_CPP (C/C++)作者 (隼)時間13年前 (2013/04/27 01:27), 編輯推噓1(1011)
留言12則, 3人參與, 最新討論串1/4 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VS2012 c++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) openGL (freeglut) 問題(Question): 1.main function中while loop及Display call back function 關係 2.視窗無法顯示 餵入的資料(Input): 餵入多張bmp檔,存成texture並顯示在視窗上 程式碼(Code):(請善用置底文網頁, 記得排版) int main(){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(400,400); glutInitWindowPosition(600,80); glutCreateWindow("OpenGL test"); while(1) { save_count++; if(save_count>Max_frame)break; //計算最大張數的frame跳出 texture(); //讀入bmp檔,存入arr glutReshapeFunc(WindowSize); glutKeyboardFunc(Keyboard); glutDisplayFunc(Display); glutMainLoopEvent(); cout<<"loop: "<<save_count<<endl; cout<<"Display_count: "<<Display_count<<endl; } } void texture() { unsigned char * arr; //讀入bmp存入arr glTexImage2D(GL_TEXTURE_2D,0,3,Width,Height,0,GL_RGB,GL_UNSIGNED_BYTE,arr); glEnable(GL_TEXTURE_2D); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); } void Display(void) { glClear(GL_COLOR_BUFFER_BIT); glClearColor(1.0, 1.0, 1.0, 1.0); //背景white gluLookAt (0.0, 0.0, 10.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);//eye center up glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //gluLookAt(0,0,10.0f,0,0,0,0,1,0); //視線的座標及方向 cout<<"Display"<<endl; Display_count++; glBegin(GL_QUADS); glNormal3f(0.0,0.0,1.0); glTexCoord2f(0,0); glVertex3f(-11,-11,0); glTexCoord2f(0,1); glVertex3f(-11,11,0); glTexCoord2f(1,0); glVertex3f(11,-11,0); glTexCoord2f(1,1); glVertex3f(11,11,0); glEnd(); glutSwapBuffers(); } 補充說明(Supplement): 我將main function的訊息印出 例如現在最大frame數是5 則loop會從1-5 但Display的計數器只加到2 代表他只進入Display function兩次 而且視窗總是全白 請各位先進提供可能的原因 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.68.157

04/27 13:04, , 1F
我記得不需要 while(1)
04/27 13:04, 1F

04/27 16:22, , 2F
我也記得不需要while(1) 另外你繪圖的四個座標順序也有
04/27 16:22, 2F

04/27 16:23, , 3F
問題 記得是使用右手定 且則有正反面分別
04/27 16:23, 3F

04/27 16:23, , 4F
04/27 16:23, 4F

04/27 16:24, , 5F
另外你沒有設定timer也是問題
04/27 16:24, 5F

04/27 20:52, , 6F
使用while(1)的緣故是我使用glutMainLoopEvent()
04/27 20:52, 6F

04/27 20:53, , 7F
如果不用迴圈則使用glutMainLoop,但這樣我無法執行到
04/27 20:53, 7F

04/27 20:54, , 8F
texture(),再來timer的問題可以請大大再多加解釋一下嗎
04/27 20:54, 8F

04/27 21:54, , 9F
我用glutMainLoop需要設定timer Event就不確定了
04/27 21:54, 9F

04/27 21:54, , 10F
另外你的貼圖可以在一開始就載入 這樣就不用每個LOOP都
04/27 21:54, 10F

04/27 21:55, , 11F
載入一次了吧 你可以在IF判斷是那邊多一行printf
04/27 21:55, 11F

04/27 21:56, , 12F
看看為什麼display只有算到兩次
04/27 21:56, 12F
文章代碼(AID): #1HUhZg1V (C_and_CPP)
文章代碼(AID): #1HUhZg1V (C_and_CPP)