2013-06-01 46 views
2

我有兩個方法正在做同樣的事情。現在我想知道他們的區別是什麼,哪一個可以更快地執行。 這裏是方法: 1號方法OpenGL 2D移動關係

glBindTexture(GL_TEXTURE_2D, texture[0]); 
glBegin(GL_QUADS); 
    glTexCoord2f(0, 0); glVertex2f(x, y); 
    glTexCoord2f(1, 0); glVertex2f(x+texWidth, y); 
    glTexCoord2f(1, 1); glVertex2f(x+texWidth, y+texHeight); 
    glTexCoord2f(0, 1); glVertex2f(x, y+texHeight); 
glEnd(); 
x++; y++; 

二路方法

glPushMatrix(); 
glTranslatef(x, y, 0); 
glBindTexture(GL_TEXTURE_2D, texture[0]); 
glBegin(GL_QUADS); 
    glTexCoord2f(0, 0); glVertex2f(0.0f, 0.0f); 
    glTexCoord2f(1, 0); glVertex2f(1.0f, 0.0f); 
    glTexCoord2f(1, 1); glVertex2f(1.0f, 1.0f); 
    glTexCoord2f(0, 1); glVertex2f(0.0f, 1.0f); 
glEnd(); 
glPopMatrix(); 

x++; y++; 
+1

這兩種方法是不一樣的,你需要'glScalef(texWidth,texHeight,1.0f)'和'glTranslatef'。 –

回答

0

第二種方法是快得多,因爲它被翻譯了整個矩陣,因爲它並沒有做很多計算在方法一中。

+2

這些特定的操作可能像CPU一樣在CPU上運行得更快或更快,並且幾乎可以肯定比調整矩陣快,所以我會說方法1的速度可能會快得多。 –

+0

哦真的嗎?非常感謝〜:) – user2442604

+3

@ user2442604:只限於這種特殊情況。只要繪製了8個以上的三角形,速度就會變慢。但是你不應該首先使用直接模式(glBegin,glVertex,glEnd)。使用頂點數組。 – datenwolf

2

關於性能,您使用的是立即模式,無論如何這是很慢的(它是「舊」的做事方式;不幸的是,網絡上的大多數OpenGL教程都過時了)。如果您真的關心性能,請使用像VBO和VAO這樣的緩衝區(gpu端)。

一個很好的現代教程http://open.gl/它這裏主要介紹維也納組織:http://open.gl/drawing

-1

第二種方法是快了很多,因爲它轉換用更少的計算整個QUAD矩陣。