作者starvirus (隼)
看板C_and_CPP
標題[問題] openGL載入貼圖連續顯示
時間Sat Apr 27 01:27:04 2013
開發平台(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