[問題] 請問如何用OpenGL顯示動畫?

看板C_and_CPP作者 (原力副甦)時間15年前 (2010/07/30 14:32), 編輯推噓4(405)
留言9則, 5人參與, 最新討論串1/1
平台是Windows XP sp3 用VC 8 (VS2005) 想做很傻的事,用OpenCV去load 資料 ,然後叫 OpenGL繪圖: int width = 0; int height = 0; char *imageData=NULL; void Resize(int x, int y) { glViewport(0, 0, x, y); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0.0, 1.0, 0.0, 1.0, 0.0, 1.0); }/*Resize*/ void Display(void) { /* Clear the window to black */ glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); if (NULL != imageData) glDrawPixels(width, height, GL_BGR_EXT, imageData); glFinish(); }/*Redraw*/ int RenderImage(void) { glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(width , height); glutCreateWindow("Viewer"); glutDisplayFunc(Display); glutReshapeFunc(Resize); /*inverse image*/ glRasterPos2i(-1.0, 1.0); glPixelZoom(1.0f, -1.0f); glutMainLoop(); return 1; }/*RenderImage*/ int main(void) { char *inputname = "testImage.bmp"; IplImage *Image = cvLoadImage(inputname,-1); width = Image->width; height = Image->height; imageData = Image->imageData; RenderImage(); return 1; }/*main*/ 上面的代碼,對顯示一張是沒問題的。 現在問題是在於 ,外面會一直用OpenCV加載不同的數據, 然後餵給openGL顯示為動畫。 既main改為: for(int i = 0;i< n;i++){ char inputname[256] ; sprintf(inputname,"%s%d%s","testImage",i,".bmp"); IplImage *Image = cvLoadImage(inputname,-1); width = Image->width; height = Image->height; imageData = Image->imageData; RenderImage(); }/*for i*/ 這樣做只會顯示第一張就定住不動。 那請問該如何做修改才會變成動畫呢,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.158.204 ※ 編輯: Risingforce 來自: 59.120.158.204 (07/30 14:33)

07/30 15:22, , 1F
畫兩張圖之間應該是要加一個sleep吧
07/30 15:22, 1F

07/30 15:29, , 2F
其實他的問題在於, MainLoop一進去就不會出來了, 應該是
07/30 15:29, 2F

07/30 15:30, , 3F
每次都在MainLoop對應的callback裡做load->render的動作
07/30 15:30, 3F

07/30 15:31, , 4F
上面修正一下, 其實就是Display()裡; 不過這樣不容易控
07/30 15:31, 4F

07/30 15:32, , 5F
制framerate; 話說, 只是要播影片, OpenCV做不到嗎?_?
07/30 15:32, 5F

07/30 15:54, , 6F
glFlush() ?
07/30 15:54, 6F
※ 編輯: Risingforce 來自: 59.120.158.204 (07/30 16:02)

07/30 16:04, , 7F
為什麼要大費周章用OpenGL 用OpenCV就可以連續撥圖了啊
07/30 16:04, 7F

07/30 20:29, , 8F
我認為這種功能GL或CV用其中一個開發就好了
07/30 20:29, 8F

07/30 20:30, , 9F
GL連續撥圖應該不難 應該可以用全域變數控制
07/30 20:30, 9F
文章代碼(AID): #1CKd87kv (C_and_CPP)