2014-09-10 50 views
0

我正在尝试使用可变比例因子,以便每个帧的缩放比例更改为+或 - .05,这使得它具有增长/缩小的动画方面。如何定期缩放2D对象?

我的比例因子(scale_x,scale_y和scale_z)初始化为1.0。我想要发生的是每帧渲染后,每个比例因子会增加或减少一些固定值(如.05)。理想情况下,首先它应该保持每帧减去0.05,直到它达到一个固定值,如0.2。然后我希望它再次从0.2增长到1.0。

它应该会随着时间的推移而产生缩小和增长的幻觉。 我努力想出一个办法来做到这一点。我正在考虑使用某种布尔值“增长”,告诉我是否应该增长(每个因子增加0.05),或者缩小(从每个因子减去0.05)。

// These are global vars. 
float rotate_x, rotate_y, rotate_z; 
float scale_x = 1.0f; 
float scale_y = 1.0f; 
float scale_z = 1.0f; 
... 

void update_scale() 
{ 
// what can go here? 
} 

void animate() 
{ 
// calculate new transformation values 
update_rotation(); 
update_scale(); 

//apply transformations 
glRotatef(rotate_x, 1, 0, 0); 
glRotatef(rotate_y, 0, 1, 0); 
glRotatef(rotate_z, 0, 0, 1); 
glScalef(scale_x, scale_y, scale_z); 
} 

回答

0

您可以保留一个附加变量,用于跟踪您应用于比例因子的当前增量,并在每次达到上限/下限时反转它。

基于几个常数:

const float MIN_SCALE = 0.2f; 
const float MAX_SCALE = 1.0f; 
const float SCALE_STEP = 0.05f; 

然后初始化:

float scaleFact = MAX_SCALE; 
float scaleInc = -SCALE_STEP; 

然后在每个更新:

scaleFact += scaleInc; 
if (scaleFact < MIN_SCALE + 0.5f * SCALE_STEP) { 
    scaleFact = MIN_SCALE; 
    scaleInc = SCALE_STEP; 
} else if (scaleFact > MAX_SCALE - 0.5f * SCALE_STEP) { 
    scaleFact = MAX_SCALE; 
    scaleInc = -SCALE_STEP; 
} 

上述办法一些调整测试,以避免比较几乎相等的浮点值。您可以使用整数变量来跟踪进度,并将其乘以得到实际的比例因子,而不是处理可能存在问题的浮点比较。