如何定期缩放二维对象
How to scale 2D object periodically?
我正在尝试使用一个可变的比例因子,这样每一帧的比例都会变化+或-.05,这使它具有一个增长/收缩的动画方面。
我的缩放因子(scale_x、scale_y和scale_z)初始化为1.0。我想做的是,对于渲染的每一帧,每个比例因子都会增长或收缩一些固定值(如.05)。理想情况下,一开始它应该保持每帧减去.05,直到达到固定值,如0.2。然后我希望它再次从0.2增长到1.0。
它应该给人一种随着时间的推移而缩小和增长的错觉。我正在努力想办法做到这一点。我想使用某种布尔值"grow",告诉我是应该增长(每个因子加上.05)还是收缩(每个因子减去.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);
}
您可以保留一个额外的变量来跟踪您应用于比例因子的当前增量,并在每次达到上限/下限时将其反转。
基于几个常数:
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;
}
上面对测试进行了一些调整,以避免比较几乎相等的浮点值。您可以使用一个整数变量来跟踪进度,并将其相乘以获得实际的比例因子,而不是处理可能有问题的浮点比较。
相关文章:
- 可容纳二维对象数组的变量
- 根据类中另一个对象 C++ 的值对类中的二维对象进行排序并赋予值
- 类对象初始化的二维向量
- 使用什么数据结构来存储基于游戏对象的二维单元地图?
- 制作二维对象数组
- 如何在中心旋转二维对象
- 填充对象的C++二维数组
- 使用对象 C++ 创建二维矢量
- C++对象或二维数组作为参数
- 用C++将列表转换为对象的二维数组
- 二维数组和分配对象
- C++ 中的对象的二维数组
- 正确分配和取消分配指向对象的指针的二维数组
- 对象的二维几何布局
- 旋转使用OpenGL绘制的二维对象
- 将二维对象数组的指针传递给方法
- 从对象打印二维矢量时出错
- 如何定期缩放二维对象
- 是二维动态对象 O(n^2) 碰撞的最快算法
- 在 c++ 中声明和初始化(大型)二维对象数组的正确方法是什么?