討論區快速選單
知識庫快速選單
網路投保旅行平安險 想要資料分析就學Python 政府補助!學嵌入式+物聯網
[ 回上頁 ] [ 討論區發言規則 ]
OpenGL的CPU使用量的問題
更改我的閱讀文章字型大小
作者 : marty1885(疾風)
[ 貼文 27 | 人氣 0 | 評價 10 | 評價/貼文 0.37 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/10/1 上午 10:36:35
小弟最見想寫遊戲,選了OpenGL
不過光畫一個三角形,就吃了我40%的CPU效能(3.10Ghz的CPU)
請問一下,這是正常的,還是我寫的有問題
DirectX會不會比較好

---------------------------
訊息迴圈
   while (1) {
     while(PeekMessage(&msg, hWnd, 0, 0, PM_NOREMOVE)) {
     // 判斷使用者是否關閉程式 , 然後處理訊息
     if(GetMessage(&msg, hWnd, 0, 0)) {
     TranslateMessage(&msg);
     DispatchMessage(&msg);
     }
     // 使用者關閉程式
else {
// 關閉 OpenGL 應用程式 , 並釋放資源
     wglMakeCurrent(NULL, NULL);
     ReleaseDC(hWnd, hDC);
     wglDeleteContext(hRC);
     DestroyWindow(hWnd);
     return msg.wParam;
     }
     }

     // 畫出定義的內容
     Display();

     //等到 OpenGL 已經畫完所有物體後再繼續程式
     glFinish();

     // 轉換緩衝區
     SwapBuffers(hDC);
    
    }



//Display函數
// 畫出物體
void Display() {

    // 清除緩衝區
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  
// 建立投影矩陣
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    // 利用透視投影 , 並建立觀測矩陣
    gluPerspective(90, (GLfloat) ww/(GLfloat) wh, 1, 700);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

// 把顏色設為白色
    glColor4f(1, 1, 1, 1);

// 將物體延著 z 軸, 移到離原點 5 個單位處
    glTranslatef(0, 0, -5);

    // 畫一個三角形
    glBegin(GL_LINE_LOOP );
     glVertex3f( 0, 1, 0);
     glVertex3f( 1, -1, 0);
     glVertex3f(-1, -1, 0);
    glEnd();

}
----------------------
這樣寫有沒有錯
作者 : cromayen2000(CROMAYEN2000) OpenGL卓越專家貼文超過500則人氣指數超過10000點
[ 貼文 645 | 人氣 22308 | 評價 2260 | 評價/貼文 3.5 | 送出評價 38 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人marty1885註記此篇回應為很有道理 2011/10/1 下午 09:19:24
訊息迴圈
   while (1) {
     while(PeekMessage(&msg, hWnd, 0, 0, PM_NOREMOVE)) {
     // 判斷使用者是否關閉程式 , 然後處理訊息
     if(GetMessage(&msg, hWnd, 0, 0)) {
     TranslateMessage(&msg);
     DispatchMessage(&msg);
     }
     // 使用者關閉程式
else {
// 關閉 OpenGL 應用程式 , 並釋放資源
     wglMakeCurrent(NULL, NULL);
     ReleaseDC(hWnd, hDC);
     wglDeleteContext(hRC);
     DestroyWindow(hWnd);
     return msg.wParam;
     }
     }

     // 畫出定義的內容
     Display();

     //等到 OpenGL 已經畫完所有物體後再繼續程式
     glFinish();

     // 轉換緩衝區
     SwapBuffers(hDC);
    
    }

你確定這段沒寫錯嗎? else 對不起來 另外

>Display();
>glFinish();
>SwapBuffers(hDC);

這三個函數是在 WM_PAINT 裡面處理的
你每收到一個訊息就重繪一次 CPU 當然吃很重摟
 板主 : 小呆 , 冷眼
 > 遊戲程式設計 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 遊戲程式設計 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
遊戲程式設計
1 aming 2280 
2 冷眼 1450 
3 阿西德倫 510 
4 PLAYER 390 
5 garf 340 
6 Akira 330 
7 白老鼠(Gary) 290 
8 BlueTulip 270 
9 東昇 250 
10 CCL 240 
遊戲程式設計
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
2.929688E-02