【发布时间】:2013-11-20 14:04:14
【问题描述】:
好吧,我不知道我是不是傻还是怎么的。
但是当我运行我的应用程序而不绘制任何东西时,我得到大约 6k FPS。
当绘制大约 150-200 点(来自 obj )时,它只有 800... 如果我再添加字体渲染,它会变得更低。
我不知道这是正常现象还是什么,但我不明白你应该如何渲染整个游戏世界。 如果只有 150 - 200 点可以把它降到那么低。 我还尝试渲染大约 4k 点 => FPS=80
这是我的 objs 渲染方法:
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:英特尔酷睿 i5 760 @ 2.80GHz
内存:4 GB
显卡:ATI Radeon HD 48000 系列
屏幕:1920x1080@60Hz
【问题讨论】:
-
您是否正在调试模式下运行您的程序?如果是这样,您将有很多无用的构造函数/析构函数调用。尝试删除 OBJData 和 OBJFace 的构造函数/析构函数,并让它们变得陈旧
structs -
我现在已经把它们变成了结构体。但不幸的是 FPS 仍然在 80 - 100 左右
-
您使用的是什么图形硬件?英特尔和许多仅 ES 的垃圾(比如在手机上)的速度往往非常缓慢......
-
我用我的规格编辑了帖子!
标签: c++ performance glut frame-rate glew