c++ - 放大 2D 场景中的对象?

标签 c++

现在,我的相机转换到相机位置,然后按比例因子缩放。

  al_identity_transform(&mTransform);
    al_translate_transform(&mTransform,-mPosition.x, -mPosition.y);
    al_scale_transform(&mTransform,mScale,mScale);
    al_use_transform(&mTransform);

因此,如果我有一个位于 400,400 处的对象并且我想放大它(使 400、400 成为屏幕的中心),我需要对相机位置做些什么并缩放每一帧?目前,简单地增加 mScale 会越来越接近原点(屏幕左上角)。

谢谢

最佳答案

如果屏幕的宽度为W,高度为H,并且原点位于左上角,右侧为正 x 并且正 y 向下,然后为了确保在 (a,b) 处呈现的像素位于屏幕中心,您需要将该点转换为 (< strong>W/2,*H/2*)。这很简单:

al_identity_transform(&mTransform);
al_translate_transform(&mTransform,W/2-a, H/2-b);

如果您想放大那个点,您必须将该点平移到原点,应用比例尺,然后将该点平移回屏幕中心:

al_translate_transform(&mTransform,-W/2, -H/2);
al_scale_transform(&mTransform,mScale,mScale);
al_translate_transform(&mTransform, W/2, H/2);

当然,你可以结合前两个翻译得到:

al_identity_transform(&mTransform);
al_translate_transform(&mTransform,-a, -b);
al_scale_transform(&mTransform,mScale,mScale);
al_translate_transform(&mTransform, W/2, H/2);

也就是说,

  1. 从身份开始,
  2. 将点(a,b)移到原点,
  3. mScale 围绕原点缩放
  4. 将原点处的所有内容移动到屏幕中间。

关于c++ - 放大 2D 场景中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6680480/

相关文章:

c++ - 阿托夫不工作?

c++ - 调用模板CUDA内核时出现问题

C++ - 使用映射存储回调函数

c++ - 使用简单\非侵入式数据模型的 C++ 中的 XML 数据绑定(bind)

c++ - string 和 vector 的 shrink_to_fit 实现不同?

c++ - 为什么我的 C 程序可以从 C++ 文件调用函数而不包含 header ?

c++ - C/C++ 有标准的 'slice' 容器吗?

c++ - std::tr1::function 和 std::tr1::bind

c++ - 是否可以将 C++ 输出流绑定(bind)到另一个输出流?

c++ - 是否可以在 Windows 系统范围内动态更改插入符符号(文本光标)?