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

正文內(nèi)容

osg-osgearth學(xué)習(xí)技術(shù)總結(jié)報(bào)告(參考版)

2025-06-02 18:07本頁(yè)面
  

【正文】 那么如何啟動(dòng)這個(gè)過(guò)程呢?我們可以使用osg::Node的“acce。 }。 }private: std::string searchForName。 nodeListTypeamp。 osg::Node* getFirst()。 void setNameToFind(const std::string amp。 virtual void apply(osg::Transform amp。 virtual void apply(osg::Node amp。 findNodeVisitor(const std::string amp。如果我們希望針對(duì)所有的節(jié)點(diǎn)進(jìn)行同樣的操作,那么可以重載針對(duì) osg::Node類型的apply方法?;惖摹癮pply”方法已經(jīng)針對(duì)所有類型的節(jié)點(diǎn)(所有派生自 osg::Node的節(jié)點(diǎn))作了定義。這個(gè) 類需要兩個(gè)新的數(shù)據(jù)成員:一個(gè)std::string變量,用于和我們搜索的有名節(jié)點(diǎn)進(jìn)行字符串比較;以及一個(gè)節(jié)點(diǎn)列表變量(std::vector), 用于保存符合搜索字符串的所有節(jié)點(diǎn)。遍歷過(guò)程結(jié)束后,列表中將包含所有符合指定的搜索字符串的節(jié)點(diǎn)。這里我們將會(huì)針對(duì)用戶自定義的節(jié)點(diǎn)名稱進(jìn)行字符串比較。這里我們將選擇TRAVERSE_ALL_CHILDREN(遍歷所有子節(jié)點(diǎn))的模式。由于我們還沒(méi) 有討論場(chǎng)景更新(updating),封閉節(jié)點(diǎn)(occluder node)和揀選(culling)的有關(guān)內(nèi)容,因此這里首先介紹NODE_VISITOR(節(jié)點(diǎn)訪問(wèn)器)遍歷類型。 // 該節(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)中。 // 遍歷結(jié)束,不存在所求節(jié)點(diǎn)。 // 找到所求節(jié)點(diǎn)。 i ++) { foundNode = findNamedNode(searchName, currGroupgetChild(i))。 if ( currGroup ){for (unsigned int i = 0 。 } if (currNodegetName() == searchName) { return currNode。osg::Node* foundNode。osg::Node* findNamedNode(const std::stringamp。特別要注意的是,使用訪問(wèn)器將提供更為靈活的節(jié) 點(diǎn)訪問(wèn)方式。函數(shù)的返回值是指定節(jié)點(diǎn)子樹中,第一個(gè)與輸入字符串名稱相符的節(jié)點(diǎn)實(shí)例。添加查找節(jié)點(diǎn)的函數(shù)。例如在場(chǎng)景圖形中載入flt文件。而獲取節(jié)點(diǎn)的名稱,主要有這樣一些方法:咨詢建模人員;使用其它文件瀏覽器(,可以使用Creator或者Vega)瀏覽模型;或者使用OpenSceneGraph。 對(duì)這些節(jié)點(diǎn)進(jìn)行更新時(shí),我們需要一個(gè)指向節(jié)點(diǎn)的指針。例如炮塔節(jié)點(diǎn)可以旋轉(zhuǎn),機(jī)槍節(jié)點(diǎn)可以升高。 搜索場(chǎng)景圖形中的一個(gè)有名節(jié)點(diǎn)模型文件可能包含了各種不同的節(jié)點(diǎn)類型,用戶通過(guò)對(duì)這些節(jié)點(diǎn)的使用來(lái)更新和表達(dá)模型的各個(gè)部分。} TravelManipulator操作器的簡(jiǎn)單實(shí)踐場(chǎng)景為設(shè)置為一所學(xué)校,我們操作一個(gè)圓球進(jìn)行相關(guān)的前后左右,上下的移動(dòng)。 if (!()) { m_vPosition += delta。 (())。 osg::ref_ptrosg::LineSegment lineZ = new osg::LineSegment(newPos + osg::Vec3(,m_fMoveSpeed),newPos osg::Vec3(,m_fMoveSpeed))。 osgUtil::IntersectVisitor iv。實(shí)現(xiàn)的代碼如下:void TravelManipulator::ChangePosition(osg::Vec3amp。 delta)此函數(shù)主要功能是實(shí)現(xiàn)當(dāng)前點(diǎn)位置的移動(dòng),在移動(dòng)的過(guò)程中作出相應(yīng)的碰撞檢測(cè)算法操作。 default: return false。 case (osgGA::GUIEventAdapter::RELEASE): if ( () == 1) { m_bLeftButtonDown = false 。 if ( [0] = 0) [0] = 0 。 [0] += osg::DegreesToRadians(*(mouseYm_fpushY)) 。 } return false。 m_fpushY = mouseY。 } return false。 ChangePosition(osg::Vec3 (2*m_fMoveSpeed * cosf(osg::PI_2+[2]), 0, 0)) 。 return true。 } case (osgGA::GUIEventAdapter::SCROLL): if (() == osgGA::GUIEventAdapter::SCROLL_UP) { ChangePosition(osg::Vec3 (0,2* m_fMoveSpeed * sinf(osg::PI_2+[2]), 0)) 。 return true。168。旋y轉(zhuǎn)193。增?加168。 } if (() == 0x47 || () == 0x67)//G/g鍵168。 { m_fAngle = 。a角?度168。174。185。a { [2] += osg::DegreesToRadians(m_fAngle)。174。左193。向168。會(huì)168。 } if (()== 0xFF51) //left鍵168。旋y轉(zhuǎn)193。168。176。162。185。 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)) 。174。 } if ( () == 0x41|| () == 0x61)//左193。 ChangePositionForStairs(osg::Vec3 (m_fMoveSpeed * cosf(osg::PI_2+[2]), 0, 0)) 。梯172。 )//下?樓163。 } if (() == 39。 ChangePosition(osg::Vec3(m_fMoveSpeed * cosf(osg::PI_2+[2]), 0, 0)) 。 return true。Y { ChangePositionForStairs(osg::Vec3 (0, m_fMoveSpeed * sinf(osg::PI_2+[2]), 0)) 。164。 )//上166。 } if (() == 39。 ChangePosition(osg::Vec3 (m_fMoveSpeed * cosf(osg::PI_2+[2]), 0, 0)) 。 } if (() == 0xFF52 || () == 0x57 || () == 0x77)//上166。 if (m_fMoveSpeed ) { m_fMoveSpeed = 。 return true。 return true。 } if (() == 0xFF57) //end { //(m_vPosition + osg::Vec3(0,0,m_fMoveSpeed))。 ChangePosition(osg::Vec3(0,0,m_fMoveSpeed))。 return true 。 switch(()) { case (osgGA::GUIEventAdapter::KEYDOWN): { if(() == 0x20) { ()。 us){ float mouseX = ()。具體代碼如下,內(nèi)有詳細(xì)的注釋:bool TravelManipulator::handle(const osgGA::GUIEventAdapteramp。 ea,osgGA::GUIActionAdapteramp。同理,osg::Matrixd TravelManipulator::getInverseMatrix(void) const獲取逆矩陣代碼類似,在此不詳細(xì)說(shuō)明。 部分成員函數(shù)的實(shí)現(xiàn)osg::Matrixd TravelManipulator::getMatrix(void) const此函數(shù)是主要的更新模型位置的函數(shù),它通過(guò)自己的矩陣,在每一幀渲染的時(shí)候調(diào)用此矩陣來(lái)獲得新的位置,主要有矩陣的旋轉(zhuǎn)和矩陣的平移。說(shuō)明:返回一個(gè)三維坐標(biāo),實(shí)現(xiàn)獲得當(dāng)前點(diǎn)的位置。參數(shù)名稱類型描述positionosg::Vec3 amp。position) 。參數(shù)名稱類型描述speedfloat amp。speed) 。說(shuō)明:返回一個(gè)浮點(diǎn)類型的數(shù)值,獲得當(dāng)前的移動(dòng)速度。參數(shù)名稱類型描述deltaosg::Vec3amp。 delta)。參數(shù)名稱類型描述deltaosg::Vec3amp。 delta)。用于控制場(chǎng)景viewer以及上下文,窗口等等。主要用來(lái)控制所得到的事件類型。說(shuō)明:按鍵事件操作響應(yīng)函數(shù),所有的動(dòng)作響應(yīng)都在此函數(shù)中實(shí)現(xiàn),返回是一個(gè)bool型的變量,如果為true,下一次就不會(huì)響應(yīng)此函數(shù),如果是false,就可以一直監(jiān)聽(tīng)響應(yīng)。 ea,osgGA::GUIActionAdapteramp。參數(shù)無(wú)。virtual osg::Matrixd getInverseMatrix() const 。參數(shù)名稱類型描述matrixconst osg::Matrixdamp。 matrix)。 matrix)。說(shuō)明:此類的構(gòu)造和析構(gòu)函數(shù),在此實(shí)現(xiàn)中完成相應(yīng)的初始化工作。類中方法:TravelManipulator()。public: ////判斷鼠標(biāo)左鍵是否按下,可用來(lái)旋轉(zhuǎn)窗口 bool m_bLeftButtonDown。 osg::Vec3 m_vPosition。 unsigned int m_nID。 TravelManipulator類實(shí)現(xiàn),這個(gè)功能塊,具有的功能是場(chǎng)景漫游,設(shè)置速度,在漫游時(shí)與一般網(wǎng)絡(luò)游戲中的漫游方式基本相同: F WASD分別為:向前后左右走,鼠標(biāo)可向任意方向拖動(dòng)場(chǎng)景; F Up down left right:為向前,左轉(zhuǎn),向后,右轉(zhuǎn),這套操作完全是仿槍擊游戲板恐的一套操作;F Home end上向下移動(dòng);編寫矩陣操作器需要重載osgGA::MatrixManipulator,如何理解呢?這是屬于C++語(yǔ)言的功底,不過(guò)下面我們來(lái)看一下重載在OSG中的描述,: 操作類描述類說(shuō)明:定義一個(gè)能夠?qū)崿F(xiàn)前后左右上下移動(dòng),并且具有碰撞檢測(cè)功能,還能夠上樓梯。} 實(shí)現(xiàn)效果第六章 TravelManipulator類實(shí)現(xiàn)就如游戲一樣,我們?cè)诎缪菽骋唤巧臅r(shí)候,需要對(duì)其控制或者操作,在各種的即時(shí)策略與角色扮演游戲中,我們可以通過(guò)操作鍵盤、鼠標(biāo)或者外接游戲手柄等來(lái)控制對(duì)象的前后左右上下的移動(dòng),奔跑,放技能等,場(chǎng)景隨著人的視線變化而變化。 viewersetSceneData(gp)。 gpaddChild(nm1)。 nm1toScale()。 nmrotating(osg::Vec3d(,),osg::Z_AXIS,)。 osg::ref_ptrosg::Group gp = new osg::Group。 osg::ref_ptrosg::Node node1 = osgDB::readNodeFile()。 osg::ref_ptrNodeMatrix nm = new NodeMatrix。 NodeMatrix類的應(yīng)用場(chǎng)景中包含兩個(gè)模型,一個(gè)飛機(jī)一條牛,飛機(jī)在原點(diǎn)繞z軸按照1弧度旋轉(zhuǎn),而??s放適合飛機(jī)模型大小,并移動(dòng)到(,),其中牛的本身模型坐標(biāo)不再原點(diǎn),利用本類可以方便的把模型移動(dòng)到想要的位置,如果采用OSG自己的矩陣操作移動(dòng)的話,是不能移動(dòng)到預(yù)定的位置的。說(shuō)明:返回一個(gè)Vec3d的坐標(biāo),此函數(shù)為獲得當(dāng)前模型的位置。參數(shù)名稱類型描述pososg::Vec3d amp。pos)。 疊加操作的處理要實(shí)現(xiàn)移動(dòng)和旋轉(zhuǎn),就得把孩子節(jié)點(diǎn)放到當(dāng)前矩陣的下一個(gè)矩陣變換下,一個(gè)矩陣負(fù)責(zé)移動(dòng),一個(gè)矩陣負(fù)責(zé)旋轉(zhuǎn)回調(diào)。如,要實(shí)現(xiàn)glider模型的移動(dòng)到(,)并且繞z軸的一直旋轉(zhuǎn)。說(shuō)明:向類中加入孩子節(jié)點(diǎn)。參數(shù)名稱類型描述spsosg::BoundingSphere amp。void adapt(osg::Node *node)。縮放的矩陣參數(shù)lelfloat縮放的比例void adapt(osg::BoundingSphere amp。說(shuō)明:對(duì)模型進(jìn)行縮放操作
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1