看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
Minilogo:我記得不需要 while(1) 04/27 13:04
kuso0516:我也記得不需要while(1) 另外你繪圖的四個座標順序也有 04/27 16:22
kuso0516:問題 記得是使用右手定 且則有正反面分別 04/27 16:23
kuso0516: 理 04/27 16:23
kuso0516:另外你沒有設定timer也是問題 04/27 16:24
starvirus:使用while(1)的緣故是我使用glutMainLoopEvent() 04/27 20:52
starvirus:如果不用迴圈則使用glutMainLoop,但這樣我無法執行到 04/27 20:53
starvirus:texture(),再來timer的問題可以請大大再多加解釋一下嗎 04/27 20:54
kuso0516:我用glutMainLoop需要設定timer Event就不確定了 04/27 21:54
kuso0516:另外你的貼圖可以在一開始就載入 這樣就不用每個LOOP都 04/27 21:54
kuso0516:載入一次了吧 你可以在IF判斷是那邊多一行printf 04/27 21:55
kuso0516:看看為什麼display只有算到兩次 04/27 21:56