freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

osg-osgearth學(xué)習(xí)技術(shù)總結(jié)報(bào)告-資料下載頁(yè)

2025-05-30 18:07本頁(yè)面
  

【正文】 0, m_fMoveSpeed * sinf(osg::PI_2+[2]), 0)) 。 ChangePositionForStairs(osg::Vec3 (m_fMoveSpeed * cosf(osg::PI_2+[2]), 0, 0)) 。 return true。 } if ( () == 0x41|| () == 0x61)//左193。168。174。 { ChangePosition(osg::Vec3 (0, m_fMoveSpeed * cosf(osg::PI_2+[2]), 0)) 。 ChangePosition(osg::Vec3 (m_fMoveSpeed * sinf(osg::PI_2+[2]), 0, 0)) 。 return true。 } if ( () == 0x44|| () == 0x64) { ChangePosition(osg::Vec3 (0,m_fMoveSpeed * cosf(osg::PI_2+[2]), 0)) 。 ChangePosition(osg::Vec3 (m_fMoveSpeed * sinf(osg::PI_2+[2]), 0, 0)) 。 return true。 } if (() == 0xFF53) //right鍵168。185。會(huì)168。162。向168。176。右174。168。176。旋y轉(zhuǎn)193。a { [2] = osg::DegreesToRadians(m_fAngle)。 } if (()== 0xFF51) //left鍵168。185。會(huì)168。162。向168。176。左193。168。174。旋y轉(zhuǎn)193。a { [2] += osg::DegreesToRadians(m_fAngle)。 } if (() == 0x48 || () == 0x68)//H/h鍵168。185。減?小?增?加168。174。旋y轉(zhuǎn)193。a角?度168。168。 { m_fAngle = 。 return true。 } if (() == 0x47 || () == 0x67)//G/g鍵168。185。增?加168。174。旋y轉(zhuǎn)193。a角?度168。168。 { m_fAngle += 。 return true。 } return false。 } case (osgGA::GUIEventAdapter::SCROLL): if (() == osgGA::GUIEventAdapter::SCROLL_UP) { ChangePosition(osg::Vec3 (0,2* m_fMoveSpeed * sinf(osg::PI_2+[2]), 0)) 。 ChangePosition(osg::Vec3 (2*m_fMoveSpeed * cosf(osg::PI_2+[2]), 0, 0)) 。 return true。 } if (() == osgGA::GUIEventAdapter::SCROLL_DOWN ) { ChangePosition(osg::Vec3 (0, 2*m_fMoveSpeed * sinf(osg::PI_2+[2]), 0)) 。 ChangePosition(osg::Vec3 (2*m_fMoveSpeed * cosf(osg::PI_2+[2]), 0, 0)) 。 return true。 } return false。 case (osgGA::GUIEventAdapter::PUSH): if ( () == 1) { m_fpushX = mouseX 。 m_fpushY = mouseY。 m_bLeftButtonDown = true。 } return false。 case (osgGA::GUIEventAdapter::DRAG): if ( m_bLeftButtonDown) { [2] = osg::DegreesToRadians(m_fAngle * (mouseXm_fpushX))。 [0] += osg::DegreesToRadians(*(mouseYm_fpushY)) 。 if ( [0] = ) [0] = 。 if ( [0] = 0) [0] = 0 。 } return false。 case (osgGA::GUIEventAdapter::RELEASE): if ( () == 1) { m_bLeftButtonDown = false 。 } return false。 default: return false。 }}void TravelManipulator::ChangePosition(osg::Vec3amp。 delta)此函數(shù)主要功能是實(shí)現(xiàn)當(dāng)前點(diǎn)位置的移動(dòng),在移動(dòng)的過(guò)程中作出相應(yīng)的碰撞檢測(cè)算法操作。在此對(duì)于碰撞檢測(cè)算法不做詳細(xì)的說(shuō)明,后面會(huì)分章來(lái)闡述。實(shí)現(xiàn)的代碼如下:void TravelManipulator::ChangePosition(osg::Vec3amp。 delta){ if (m_bPeng) { osg::Vec3 newPos = m_vPosition + delta。 osgUtil::IntersectVisitor iv。 osg::ref_ptrosg::LineSegmentline = new osg::LineSegment(newPos,m_vPosition)。 osg::ref_ptrosg::LineSegment lineZ = new osg::LineSegment(newPos + osg::Vec3(,m_fMoveSpeed),newPos osg::Vec3(,m_fMoveSpeed))。 (())。 (())。 m_pHostViewergetSceneData()accept(iv)。 if (!()) { m_vPosition += delta。 } } else m_vPosition += delta。} TravelManipulator操作器的簡(jiǎn)單實(shí)踐場(chǎng)景為設(shè)置為一所學(xué)校,我們操作一個(gè)圓球進(jìn)行相關(guān)的前后左右,上下的移動(dòng)。部分代碼如下:: a、前后移動(dòng) b、左右移動(dòng)C、上下移動(dòng),俯視圖 d、上樓梯 實(shí)驗(yàn)效果圖第七章 多自由度模型(dof)的控制與操作對(duì)于多自由的模型的控制,首先要實(shí)現(xiàn)對(duì)模型的DOF節(jié)點(diǎn)進(jìn)行遍歷搜索,獲得其節(jié)點(diǎn),然后調(diào)用相應(yīng)的GUI操作控制器,對(duì)其進(jìn)行控制。 搜索場(chǎng)景圖形中的一個(gè)有名節(jié)點(diǎn)模型文件可能包含了各種不同的節(jié)點(diǎn)類型,用戶通過(guò)對(duì)這些節(jié)點(diǎn)的使用來(lái)更新和表達(dá)模型的各個(gè)部分。例如坦克,模型中還可以 包含DOF節(jié)點(diǎn),以便清晰表達(dá)坦克的某個(gè)部分。例如炮塔節(jié)點(diǎn)可以旋轉(zhuǎn),機(jī)槍節(jié)點(diǎn)可以升高。炮塔旋轉(zhuǎn)時(shí),炮塔體(包括機(jī)槍)的航向角(heading)與坦 克的航向角相關(guān)聯(lián),而機(jī)槍抬升時(shí),機(jī)槍的俯仰角(pitch)與炮塔的俯仰角相關(guān)聯(lián)。 對(duì)這些節(jié)點(diǎn)進(jìn)行更新時(shí),我們需要一個(gè)指向節(jié)點(diǎn)的指針。而我們首先要獲取節(jié)點(diǎn)的名字,才能得到該節(jié)點(diǎn)的指針。而獲取節(jié)點(diǎn)的名稱,主要有這樣一些方法:咨詢建模人員;使用其它文件瀏覽器(,可以使用Creator或者Vega)瀏覽模型;或者使用OpenSceneGraph。用戶可以 根據(jù)自己的需要自由運(yùn)用OSG的功能。例如在場(chǎng)景圖形中載入flt文件。osg文件使用ASCII格式保存,因此用戶可以使用各種文本處理軟件(寫(xiě)字板,記事本)對(duì)其進(jìn)行編輯。添加查找節(jié)點(diǎn)的函數(shù)。下面的遞歸函數(shù)有兩個(gè)參數(shù)值:用于搜索的字符串,以及用于指定搜索開(kāi)始位置的節(jié)點(diǎn)。函數(shù)的返回值是指定節(jié)點(diǎn)子樹(shù)中,第一個(gè)與輸入字符串名稱相符的節(jié)點(diǎn)實(shí)例。如果沒(méi)有找到這樣的節(jié)點(diǎn),函數(shù)將返回NULL。特別要注意的是,使用訪問(wèn)器將提供更為靈活的節(jié) 點(diǎn)訪問(wèn)方式。而下面的代碼只用于展示如何手動(dòng)編寫(xiě)場(chǎng)景圖形的遍歷代碼。osg::Node* findNamedNode(const std::stringamp。 searchName, osg::Node* currNode){osg::Group* currGroup。osg::Node* foundNode。 if ( !currNode) { return NULL。 } if (currNodegetName() == searchName) { return currNode。 } currGroup = currNodeasGroup()。 if ( currGroup ){for (unsigned int i = 0 。 i currGroupgetNumChildren()。 i ++) { foundNode = findNamedNode(searchName, currGroupgetChild(i))。 if (foundNode) return foundNode。 // 找到所求節(jié)點(diǎn)。 } return NULL。 // 遍歷結(jié)束,不存在所求節(jié)點(diǎn)。 } else { return NULL。 // 該節(jié)點(diǎn)不是組節(jié)點(diǎn),返回NULL }} 按照“訪問(wèn)器”模式搜索有名節(jié)點(diǎn)“訪問(wèn)器”的設(shè)計(jì)允許用戶將某個(gè)特定節(jié)點(diǎn)的指定函數(shù),應(yīng)用到當(dāng)前場(chǎng)景遍歷的所有此類節(jié)點(diǎn)中。遍歷的類型包括 NODE_VISITOR,UPDATE_VISITOR,COLLECT_OCCLUDER_VISITOR和CULL_VISITOR。由于我們還沒(méi) 有討論場(chǎng)景更新(updating),封閉節(jié)點(diǎn)(occluder node)和揀選(culling)的有關(guān)內(nèi)容,因此這里首先介紹NODE_VISITOR(節(jié)點(diǎn)訪問(wèn)器)遍歷類型?!霸L問(wèn)器”同樣允許用戶指定遍歷的模式,可選項(xiàng)包括TRAVERSE_NONE,TRAVERSE_PARENTS,TRAVERSE_ALL_CHILDREN和TRAVERSE_ACTIVE_CHILDREN。這里我們將選擇TRAVERSE_ALL_CHILDREN(遍歷所有子節(jié)點(diǎn))的模式。 然后,我們需要定義應(yīng)用到每個(gè)節(jié)點(diǎn)的函數(shù)。這里我們將會(huì)針對(duì)用戶自定義的節(jié)點(diǎn)名稱進(jìn)行字符串比較。如果某個(gè)節(jié)點(diǎn)的名稱與指定字符串相符,該節(jié)點(diǎn)將被添加到一個(gè)節(jié)點(diǎn)列表中。遍歷過(guò)程結(jié)束后,列表中將包含所有符合指定的搜索字符串的節(jié)點(diǎn)。為了能夠充分利用“訪問(wèn)器”,我們可以從基類osg::NodeVisitor派生一個(gè)特定的節(jié)點(diǎn)訪問(wèn)器(命名為findNodeVisitor)。這個(gè) 類需要兩個(gè)新的數(shù)據(jù)成員:一個(gè)std::string變量,用于和我們搜索的有名節(jié)點(diǎn)進(jìn)行字符串比較;以及一個(gè)節(jié)點(diǎn)列表變量(std::vector), 用于保存符合搜索字符串的所有節(jié)點(diǎn)。為了實(shí)現(xiàn)上述的操作,我們需要重載“apply”方法?;惖摹癮pply”方法已經(jīng)針對(duì)所有類型的節(jié)點(diǎn)(所有派生自 osg::Node的節(jié)點(diǎn))作了定義。用戶可以重載apply方法來(lái)操作特定類型的節(jié)點(diǎn)。如果我們希望針對(duì)所有的節(jié)點(diǎn)進(jìn)行同樣的操作,那么可以重載針對(duì) osg::Node類型的apply方法。findNodeVisitor的頭文件內(nèi)容在下列出:ifndef FIND_NODE_VISITOR_Hdefine FIND_NODE_VISITOR_Hinclude osg/NodeVisitorinclude osg/Nodeinclude osgSim/DOFTransforminclude iostreaminclude vectorclass findNodeVisitor : public osg::NodeVisitor { public: findNodeVisitor()。 findNodeVisitor(const std::string amp。searchName) 。 virtual void apply(osg::Node amp。searchNode)。 virtual void apply(osg::Transform amp。searchNode)。 void setNameToFind(const std::string amp。searchName)。 osg::Node* getFirst()。 typedef std::vectorosg::Node* nodeListType。 nodeListTypeamp。 getNodeList() { return foundNodeList。 }private: std::string searchForName。 nodeListType foundNodeList。 }。 endif現(xiàn)在,我們創(chuàng)建的類可以做到:?jiǎn)?dòng)一次節(jié)點(diǎn)訪問(wèn)遍歷,訪問(wèn)指定場(chǎng)景子樹(shù)的每個(gè)子節(jié)點(diǎn),將節(jié)點(diǎn)的名稱與用戶指定的字符串作比較,并建立一個(gè)列表用于保存名字與搜索字符串相同的節(jié)點(diǎn)。那么如何啟動(dòng)這個(gè)過(guò)程呢?我們可以使用osg::Node的“a
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1