C++ 放大2D场景中的对象?
现在,我的相机转换到相机位置,然后按比例因子进行缩放C++ 放大2D场景中的对象?,c++,C++,现在,我的相机转换到相机位置,然后按比例因子进行缩放 al_identity_transform(&mTransform); al_translate_transform(&mTransform,-mPosition.x, -mPosition.y); al_scale_transform(&mTransform,mScale,mScale); al_use_transform(&mTransform); 因此,如果我有一个40040
al_identity_transform(&mTransform);
al_translate_transform(&mTransform,-mPosition.x, -mPosition.y);
al_scale_transform(&mTransform,mScale,mScale);
al_use_transform(&mTransform);
因此,如果我有一个400400的对象,我想放大它(使400400成为屏幕的中心),我需要对相机位置做什么,并缩放每一帧?此时,简单地增加mScale会越来越接近原点(屏幕左上角)
谢谢您需要有两个矩阵:一个是摄影机矩阵,用于转换摄影机视图中世界空间中的任何点;另一个是模型矩阵,用于平移/缩放/旋转任何对象 最终的顶点位置方程为: 摄影机矩阵*模型视图矩阵*顶点位置(顶点位置为初始顶点坐标) 如果您需要一些帮助来构建矩阵,我将在当前项目中使用自定义矩阵。您将在找到来源。模型视图矩阵位于src/中的matrix4.cpp中,相机矩阵位于src/中的scene.cpp中
祝您好运:)如果屏幕宽且高,且原点位于左上角,正x向右,正y向下,则为了确保(a,b)处渲染的像素位于屏幕中心,您需要将该点转换为(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);
也就是说
mScale