2013-04-22 38 views
1

我正在試圖讓我繪製的多維數據集每隔幾秒就會「跳」出來。這裏是我的代碼:OpenGl讓對象每隔N秒「跳」

  for (int i=0; i<25; i++) 
      { 
       if(j<rows) 
       { 

        //Timer used in vibration calculation when drawing cubes 
        float time = (std::clock() - timer); 
        //Calculate the amount of simulated vibration based on amount of distortion (intensity) 
        float offset = sin(1.0f * 3.14159265359f * time) * shake; 

        //Draw cubes right and left of centre point 
        drawCube((x+xShift), y, (-300 +depth), 1.0f, cubeColour, offset); 
        drawCube((x-xShift), y, (-300 +depth), 1.0f, cubeColour, offset); 
        xShift -= gap; 
       } 
      } 

而且drawCube代碼:

void drawCube(float x, float y, float z, float opacity, float col[], float offset) 
{ 
    //Draw cube taking into account any offset caused by simulated vibration 
    glTranslatef((-x+offset), (-y+offset), -z); 
    glColor4f(col[0], col[1], col[2], opacity); 
    glutWireCube(20); 
    glTranslatef((x-offset), (y-offset), z); 

} 

我假設我需要這麼立方體出現跳轉到使用提高了Y值每N秒計時器但我不確定如何做到這一點?

+2

我不知道如何使它「跳」不是。 「跳」是什麼意思?你究竟想看到什麼? – 2013-04-22 13:41:59

+0

基本上每隔N秒鐘我就要一排立方體以快速的順序上升和下降,所以它看起來像是在反彈。所以我想我想讓他們在Y軸上升到10.0f左右,然後回落到原來的位置。我希望每N秒觸發一次該動作。 – user1356791 2013-04-22 15:16:42

回答

1

你需要的是調用drawCube調用y座標。這應該是基礎值+跳躍高度。

一次簡單的方法來計算跳時高度t如下:設置一個隨時間增加的變量(最好在1秒後增加1)。你應該在N秒後重置這個變量。所以變量從0運行到N

此變量將成爲跳高計算的基礎。如果定義jumpDuration爲跳躍和jump_height爲最大跳躍高度的持續時間,跳躍的偏移可以用兩個函數來計算:

jump_offset = 0 // if t > jump_duration 
jump_offset = -4 * jump_height/jump_duration^2 * t^2 + 4 * jump_height/jump_duration * t // else 
+0

謝謝,我想我明白你的意思。我將如何去增加每1秒一次的變量。我對C++中的定時器有點不熟悉。 – user1356791 2013-04-22 16:30:43

+0

你已經使用過'std :: clock()'。該函數返回處理器時間。您可以通過除以CLOCKS_PER_SEC來將其轉換爲秒。如果將當前處理器時間保存在變量中,則可以通過'current_time - last_time'得到經過的時間。如果兩個值均以秒爲單位,則可以將差值添加到't'(如果't> N',則將其重置) – 2013-04-22 16:42:25