3D遊戲從頭編–第六回:攝象機

來源:互聯網
上載者:User

::金點時空::

第六回:攝象機

  一直以來,我都夢想著擁有一台數字攝象機(DV),但是口袋裡的銀子不允許。不過今天終於可以實現這個夢想了,因為這一回我們就要說怎麼在D3D中實現攝象機的功能(望梅止渴也好^_^)。
  首先來看攝象機的原理,還是先看圖吧:(一張圖勝過千言萬語)

  

  一台攝象機有以上畫面中的一些屬性:
  1、 觀察點:攝象機擺放的位置
  2、 目標點:攝象機對著一個地方
  3、 觀察範圍:圓錐形狀投影範圍的夾角大小,單位是弧度。
  4、 可見的最近距離和最遠距離:這兩個距離中間的觀察範圍就是可見地區。
  5、 縱橫比:顯示時候的寬和高比例,一般為1。

  明白了攝象機的原理後,我們來看D3D中是怎麼設定它的,有兩個矩陣是用來設定攝象機的,一個是觀察矩陣,一個是射影矩陣,程式說明一切。
  首先是設定攝象機的觀察矩陣:

  m_vEyePt = D3DXVECTOR3( 0.0f, 3.0f,-5.0f ); // 視點座標
  m_vLookatPt = D3DXVECTOR3( 0.0f, 0.0f, 0.0f ); // 目標點座標
  m_vUpVec = D3DXVECTOR3( 0.0f, 1.0f, 0.0f ); // 當前世界的向上方向,通常是(0,1,0)

  // 根據上面給出的3個值建立一個基於左手座標系的觀察矩陣
  D3DXMatrixLookAtLH( &m_matView, &m_vEyePt, &m_vLookatPt, &m_vUpVec );

  // 設定該矩陣為D3D的當前觀察矩陣
  pd3dDevice->SetTransform( D3DTS_VIEW, &m_matView );

  然後設定攝象機的射影矩陣:

  m_fFOV = D3DX_PI/4; // 觀察範圍夾角,這裡是90度
  m_fAspect = 1.0f; // 縱橫比為1
  m_fNearPlane = 1.0f; // 可見的最近距離
  m_fFarPlane = 10000.0f; // 可見的最遠距離

  // 建立一個基於左手座標系的射影矩陣
  D3DXMatrixPerspectiveFovLH( &m_matProj, fFOV, fAspect, fNearPlane, fFarPlane );

  // 設定該矩陣為D3D的當前射影矩陣
  pd3dDevice->SetTransform( D3DTS_PROJECTION, &m_matProj );

  非常容易不是嗎?不過真正的要搞懂這些還是必須先把矩陣搞懂,做3D遊戲用的最多的數學知識恐怕就是矩陣了,所以建議大家不要著急寫程式,先把《線形代數》的教科書找出來好好複習一下吧。
  如果你不相信,請看這回例子程式中附帶的攝象機的旋轉和移動部分,只要你能全部看懂,那我就不多說什麼了,因為那完全都是在跟矩陣運算打交道的。
  順便說明一下這回的例子程式,裡面攝象機的部分我用一個類cCamera封裝起來了,用起來肯定會比自己設定矩陣方便的多,試試在啟動並執行時候按方向鍵吧,如果是第一次你會很有成就感的哦^_^
  不明白的地方歡迎大家來"金點時空"的留言板探討。
  今天晚上一直停電,到快12點電才來,現在已經是淩晨1點了,明天還要上班呢,下回見。

  運行結果:

  

[下載本回完整來源程式]

首頁:http://www.gpgame.com
郵件:softboy@sina.com
soft於2002-8-5淩晨1點


返回

金點時空 2000/8/5

www.gpgame.net

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.