我想要獲得至少120fps的應用程序,但它目前坐落在30fps左右。如果刪除我的球體創建方法,則fps將變爲120.改善opengl球形發生器的性能
我的球體方法會檢查每個球體以查看它是否超出邊界。 使用結構不會提高性能。
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;
}
}
您是否在每個框架上創建球體? – 2013-05-03 11:26:23
乍一看,您可以在您的if之後爲xc +(xd/10),yc +(yd/10)和zc +(zd/10)設置單獨的變量並將它們傳遞給glTranslatef並將它們分配給球體[i],球體[我+ 1]和球[I + 2],所以你只需要計算一次。我懷疑它會產生你期望的影響,但取決於你的循環的長度,它可以提高性能。 – Kevin 2013-05-03 12:26:05
@MichaelIV它被稱爲每幀是 – 2013-05-03 13:48:41