2011-07-13 111 views
0

現在,我的相機轉換爲相機位置,然後通過比例因子進行縮放。放大2D場景中的物體?

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越來越接近原點(屏幕的左上角)。

感謝

回答

1

如果屏幕是W¯¯^h高大的原點在左上角正X的權利和積極ÿ向下,那麼爲了確保在(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); 

它說,

  1. 開始與身份,
  2. 招點(A,B)原點,
  3. 規模在原點附近通過mScale
  4. 此舉無論在原點到屏幕中間的。
1

你需要有2個矩陣:攝象機矩陣,將在世界空間中任意點轉換攝像頭視圖,這將轉化模型矩陣/縮放/旋轉任何對象。

最終的頂點位置方程是:

camera_matrix * modelview_matrix * Vertex_position(與頂點位置是你最初的頂點座標)。

如果您需要一些幫助來構建矩陣,我在當前項目中使用自定義矩陣。你會在http://www.github.com/tuxerr/City找到資料來源。模型視圖矩陣位於src /中的matrix4.cpp中,相機矩陣位於src /中的scene.cpp中。

祝你好運:)