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; 
} 

上述辦法一些調整測試,以避免比較幾乎相等的浮點值。您可以使用整數變量來跟蹤進度,並將其乘以得到實際的比例因子,而不是處理可能存在問題的浮點比較。