我正在尝试制作我正在绘制的立方体似乎每隔几秒就“跳”一次。这是我的代码:
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);
}
我假设我需要使用一个每N秒提高y值的计时器,这样立方体似乎会跳跃,但我不确定该怎么做?
答案 0 :(得分: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