现在,我的相机转换为相机位置,然后按比例因子缩放。
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越来越接近原点(屏幕的左上角)。
由于
答案 0 :(得分:1)
你需要有2个矩阵:一个摄像机矩阵,可以转换摄像机视图中世界空间中的任何一个点,以及一个可以平移/缩放/旋转任何对象的模型矩阵。
最终的顶点位置方程是:
camera_matrix * modelview_matrix * Vertex_position(顶点位置是您的初始顶点坐标)。
如果您需要一些帮助来构建矩阵,我在当前项目中使用自定义矩阵。您可以在http://www.github.com/tuxerr/City找到来源。 modelview矩阵在src /中的matrix4.cpp中,相机矩阵在src /中的scene.cpp中。
祝你好运:)答案 1 :(得分:1)
如果屏幕 W 宽且 H 高,原点位于左上角,右侧是 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