討論區快速選單
知識庫快速選單
討論區最近新進100則主題 將BI融合到Excel資料分析中 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
一個最簡單的三角面卻執行效率不佳?
更改我的閱讀文章字型大小
作者 : grayorange(Vincent)
[ 貼文 1 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/10/29 上午 03:23:07
最近開始學習OpenGL
但才剛開始畫一個旋轉的三角面
卻發現執行效率不佳的問題
當視窗在最大化之後會明顯感覺三角面的旋轉變慢
照理說只有一個三角面應該是幾千fps再跑吧?
為何只是放大視窗後就變慢了呢?
下面是程式碼,還請各位高手解答了! 感謝!


#include <GLTools.h>
#ifdef __APPLE__
#include <glut/glut.h>
#else
#define FREEGLUT_STATIC
#include <GL/glut.h>
#endif

// Window Size Change
void ChangeSize(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(
45.0,
(double)w / (double)h,
1.0,
200.0);
}

// Initialize
void Ini()
{
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
}

// DrawScene
float _angle = 10.0f;
void DrawScene() {

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

// Camera Transfrom
glRotatef(10.0f, 1.0f, 0.0f, 0.0f);
glTranslatef(0.0f, -2.0f, -5.0f);

// Object Transfrom
glPushMatrix();
glRotatef(_angle, 0.0f, 1.0f, 0.0f);

// triangle
glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_TRIANGLES);
glVertex3f( 0.0f, 1.0f, 0.0f);
glVertex3f(-0.7f, -0.0f, 0.0f);
glVertex3f(0.7f, -0.0f, 0.0f);
glEnd();
glPopMatrix();

glutSwapBuffers();
}
// Timer
void update(int value) {
    _angle += 2.0f;
    if (_angle > 360) {
     _angle -= 360;
    }
    
    glutPostRedisplay();
    glutTimerFunc(25, update, 0);
}

// Main
int main(int argc, char* argv[])
{
gltSetWorkingDirectory(argv[0]);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
glutInitWindowSize(600, 400);
glutCreateWindow("Triangle");

glutReshapeFunc(ChangeSize);
glutDisplayFunc(DrawScene);

Ini();

glutTimerFunc(25, update, 0); //Add a timer
glutMainLoop(); // start loop

return 0;
}
作者 : cromayen2000(CROMAYEN2000) OpenGL卓越專家貼文超過500則人氣指數超過10000點
[ 貼文 645 | 人氣 22308 | 評價 2260 | 評價/貼文 3.5 | 送出評價 38 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/10/30 上午 09:25:38
沒有打燈光的話 這行可以試著註解掉看看
> glEnable(GL_COLOR_MATERIAL);

>照理說只有一個三角面應該是幾千fps再跑吧?
沒有的事情 你的計時器 25ms 才更新一次 了不起就 40 FPS
更新速度跟繪製速度是兩回事,螢幕的更新率不過 60 Hz

>// Timer
>void update(int value) {
> _angle += 2.0f;
> if (_angle > 360) {
> _angle -= 360;
> }
>
> glutPostRedisplay();
> glutTimerFunc(25, update, 0);
>}

開了 GLUT_STENCIL 會影響管線的處理,如果沒用到可以關掉

>// Main
>int main(int argc, char* argv[])
>{
> gltSetWorkingDirectory(argv[0]);
> glutInit(&argc, argv);
> glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
> glutInitWindowSize(600, 400);
> glutCreateWindow('Triangle');
>
> glutReshapeFunc(ChangeSize);
> glutDisplayFunc(DrawScene);
>
> Ini();
>
> glutTimerFunc(25, update, 0); //Add a timer
> glutMainLoop(); // start loop
>
> return 0;
>}
>

當然放大以後變慢最有可能的原因是你沒有獨立卡,你的顯示卡光柵化的能力太低造成的
 板主 : 白老鼠(Gary)
 > OpenGL - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - OpenGL - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
OpenGL
1 白老鼠(Gary) 2720 
2 CROMAYEN2000 1530 
3 aming 500 
4 東昇 380 
5 PLAYER 120 
6 富伯 110 
7 qq 100 
8 NDark 80 
9 ozzy 60 
10 simula 60 
OpenGL
  專家等級 評價  
  一代宗師 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/
0.0234375