Equalizer中的視口(viewport)與像素視口(pixel viewport)

來源:互聯網
上載者:User
這兩天在做Ogre向Equalizer的移植,中間遇到了一個小問題。
在Equalizer中需要將實際的幀渲染過程放在eq::Channel::frameDraw中完成,其中需要根據伺服器的配置對渲染過程中的緩衝、視口、透視矩陣、模型-視矩陣進行更新,以實現視窗間的負載劃分與最終映像的合成。
由於Ogre中的視口設定是一組(0,1)範圍的向量,所以我在實現的時候很自然的選擇了eq::Channel::getViewport來獲得視口資料,因為它的返回資料也是(0,1)範圍的,然後根據它來設定Ogre中的視口。我用的是兩個視窗,sort-first的配置(2-window.2d.eqc)。雖然兩個視窗都能夠繪製正確的畫面,但是合成視窗總是無法正確的獲得另一個視窗的畫面來進行合成。在查了Eq的源碼後發現,eq::Channel在進行映像拷貝時不是根據其內部的視口資料進行的,而是根據一個像素視口(pixel viewport)的資料進行的,而後者在我所用的版本中是根據設定檔中定義的視口資料計算的,其中的x與y都被定義為0(這是個初期為了簡便所做的設定,0.4版中已經改為根據外部配置進行計算獲得了),也就是說無論我的視口如何定義,所拷貝的地區始終都是從視窗的左下角開始的。
當然我根據像素視口進行設定後,映像合成過程就基本正確了(同步還有點問題,後面慢慢改進吧),但就所遇到的問題我還是向Eilemann請教了一下。他建議大家仍然是根據pixel viewport來設定自己的視口,因為viewport只是在eq::Channel中接收來自與外部的配置或者據此計算一些過程資料,比如視窗的比例或者對pixel viewport設定初始量等。而在eq::Channel的其它處理過程中都是採用pixel viewport進行的。
Eilemann沒有說為什麼兩個資料都有公用介面,估計他希望能夠給開發人員提供更多的靈活性吧,不過我倒是覺得這樣其實聽容易造成使用者的困惑,要是像Ogre一樣,相關聯的資料只提供一個介面,雖然有點強硬,但是也免去了很多挑揀選揀的麻煩。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.