2013-04-22 44 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