2013-11-20 26 views
1

好吧,所以我不知道我是否愚蠢或什麼。C++ glut glew的速度?

但是,當我運行我的應用程序沒有繪製任何東西,我得到約6k FPS。

當繪製約150-200點(從obj)它只有800 ... 如果我然後添加字體渲染它甚至更低。

我不知道這是正常還是某些事情,但我不明白你是如何渲染整個遊戲世界的。 如果只有150-200分將其降低。 同時,我試圖渲染約4k點=> FPS = 80

這裏是我的渲染方法OBJ文件:

void Render::RenderOBJVBO(OBJData data) 
{ 
if(data.RenderID == 0) return; 
    glBindBufferARB(GL_ARRAY_BUFFER, data.RenderID); 
    glVertexPointer(3, GL_FLOAT, sizeof(float) * 8, (GLvoid*)(sizeof(float) * 5)); 
    glNormalPointer(GL_FLOAT, sizeof(float) * 8, (GLvoid*)(sizeof(float) * 2)); 
    glTexCoordPointer(2, GL_FLOAT, sizeof(float) * 8, (GLvoid*)0); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
    glEnableClientState(GL_NORMAL_ARRAY); 

    glDrawArrays(GL_TRIANGLES, 0, data.F.size() * 3); 

    glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
    glDisableClientState(GL_NORMAL_ARRAY); 
    glDisableClientState(GL_VERTEX_ARRAY); 
    glBindTexture(GL_TEXTURE_2D, 0); 
} 

這裏是OBJData:

class OBJData 
{ 
public: 
OBJData(void){} 
~OBJData(void){} 
std::vector<OBJFace> F; 
std::vector<Vector3f> V; 
std::vector<Vector3f> VN; 
std::vector<Vector3f> VT; 
int RenderID; 
}; 

最後OBJFace:

class OBJFace 
{ 
public: 
OBJFace(void){} 
~OBJFace(void){} 
Vector3f verts; 
Vector3f norms; 
Vector3f textures; 
OBJFace(Vector3f v, Vector3f n, Vector3f t) 
{ 
    verts = v; 
    norms = n; 
    textures = t; 
} 
}; 

所以我的問題:這是正常的嗎?如果不是可能導致這個問題?

規格:

操作系統:Windows 8的64位

CPU:Intel酷睿i5 760 @ 2.80GHz的

RAM:4 GB

顯卡:ATI的Radeon HD 48000系列

屏幕:1920x1080 @ 60Hz

+1

你也許在調試模式下運行程序?如果是這樣,你將會有很多無用的構造函數/析構函數調用。嘗試刪除OBJData和OBJFace的構造函數/析構函數,並使它們成爲普通的舊結構體' –

+0

我現在已經使它們成爲結構體。但不幸的是FPS仍然在80-100左右 –

+0

你使用的是什麼圖形硬件?英特爾和許多僅限ES的垃圾(如手機)往往會很痛苦... – defube

回答

4
void Render::RenderOBJVBO(OBJData data) 

應該

void Render::RenderOBJVBO(OBJData & data) 

或更好,但

void Render::RenderOBJVBO(const OBJData & data) 

否則的OBJData新副本將被創建的每個調用RenderOBJVBO

+0

非常感謝你解決了這個問題。它現在幾乎是一樣的,就好像我沒有渲染! –

+0

很高興解決了你的問題。查看[這個問題](http://stackoverflow.com/questions/2139224/how-to-pass-objects-to-functions-in-c)獲取更多關於傳遞對象作爲函數參數的信息。 –