【发布时间】:2013-05-03 09:30:34
【问题描述】:
我正在尝试通过应用程序获得至少 120 fps,但它目前大约为 30 fps。如果我删除我的球体创建方法,fps 会变为 120。
我的 sphere 方法检查每个球体,看它是否超出范围。 使用结构并没有提高性能。
xc = x coord
yc = y coord
zc = y coord
xd = x direction
yd = y direction
zd = z direction
有什么方法可以大幅度提高效率?
每个帧都会调用此代码。
void createSpheres()
{
for(int i = 0; i < spheres.size(); i+=6)
{
xc = spheres[i];
yc = spheres[i+1];
zc = spheres[i+2];
xd = spheres[i+3];
yd = spheres[i+4];
zd = spheres[i+5];
if((xc+xd)>= 45 || (xc+xd)<= -45)
{
xd = 0-xd;
}
if((yc+yd)>= 9.5 || (yc+yd)<= -9.5)
{
yd = 0-yd;
}
if((zc+zd)>= 45 || (zc+zd)<= -45)
{
zd = 0-zd;
}
glEnable(GL_TEXTURE_2D);
glBindTexture ( GL_TEXTURE_2D, texture_id[6] );
glPushMatrix();
glTranslatef( xc+(xd/10), yc+(yd/10), zc+(zd/10));
glRotatef( -80,1,0,0);
glScalef( 0.10f, 0.10f, 0.10f);
gluQuadricTexture(quadric,1);
gluSphere(quadric,10.0,72,72);
glPopMatrix();
glDisable(GL_TEXTURE_2D);
spheres[i] = xc+(xd/10);
spheres[i+1] = yc+(yd/10);
spheres[i+2] = zc+(zd/10);
spheres[i+3] = xd;
spheres[i+4] = yd;
spheres[i+5] = zd;
}
}
【问题讨论】:
-
您是否在每一帧上创建球体?
-
乍一看,您可以在 if 之后为 xc+(xd/10)、yc+(yd/10) 和 zc+(zd/10) 设置单独的变量,并将它们传递给 glTranslatef 并将它们分配给spheres[i], spheres[i+1] 和 spheres[i+2],所以你只需要计算一次。我怀疑它会产生您希望的影响,但根据循环的长度,它可以提高性能。
-
@MichaelIV 每一帧都叫yes
-
为什么不创建一次球体几何体,然后根据需要对其进行转换?或者,根据您想如何使用球体,您可以尝试使用冒名顶替者而不是大量三角形:stackoverflow.com/questions/10488086/…
-
如何改变 gluSphere(quadric,10.0,72,72);
标签: performance opengl rendering