osg for android 操作器

來源:互聯網
上載者:User

標籤:osg android 操作器 三維

   很短的文章解決一個實用的問題
   osg for android預設操作器,用起來是不是不能動,一觸屏模型就飛了?

   是的,原因是由於在相機操作的時候的一個計算引起的.

   引擎程式碼片段中,會看到許多下面的處理.

    float dx = _ga_t0->getXnormalized()-_ga_t1->getXnormalized();

    float dy = _ga_t0->getYnormalized()-_ga_t1->getYnormalized();

    這個計算本身沒有問題,問題就出在android中,getXnormalized()函數中的取值出了問題
   inline float getXnormalized() const { return 2.0f*(getX()-getXmin())/(getXmax()-getXmin())-1.0f; }

  其中getXmax()/getYmax()取到的值是錯誤的
  所以整個計算都出了問題(具體為什麼沒取到正確的值,目前沒有深入去跟)
  解決方案就很簡單了,重寫整個函數
  給出getXnormalized()的程式碼片段,Y同理(android中Y需要取反)

 float MyTrackballManipulator::getXnormalized(const osg::ref_ptr<const osgGA::GUIEventAdapter> ea){
if(!ea)
{
return 0;
}
float w = ea->getWindowWidth();
float xOrigin = ea->getWindowX();
return 2.0f*((ea->getX()-xOrigin)/w)-1.0f;
}


至此您的操作器就沒有問題了
附一張




osg for android 操作器

聯繫我們

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