gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 03:48:16 24 4
gpt4 key购买 nike

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

  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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com