OGRE关于 Demo_Ocean 例子的分析
關(guān)于 Demo_Ocean 例子的分析
重要總結(jié):
1. 該例主要類(lèi)不再繼承自ExampleApplication和ExampleFrameListener, 重寫(xiě)驅(qū)動(dòng)類(lèi)和監(jiān)聽(tīng)類(lèi)
2. 如何創(chuàng)建OIS的輸入系統(tǒng)
?? ?1) 創(chuàng)建OIS::ParamList pl;
?? ?2) 調(diào)用程序渲染窗口的 getCustomAttribute方法得到窗口WINDOW屬性所代表的窗口句柄
?? ?3) 將該窗口句柄插入pl中
?? ?4) 以pl為參數(shù), 調(diào)用OIS::InputManager的createInputSystem方法, 即可創(chuàng)建一個(gè)OIS輸入管理器
?? ?5) 該OIS輸入管理器調(diào)用createInputObject方法, 可以創(chuàng)建鍵盤(pán)和鼠標(biāo)對(duì)象
?? ?6) 通過(guò)渲染窗口的getMetrics函數(shù)得到窗口高寬, 從而設(shè)定鼠標(biāo)狀態(tài)的高寬, 限制鼠標(biāo)活動(dòng)范圍.
?? ?7) 如果為緩沖輸入, 調(diào)用各個(gè)對(duì)象的setEventCallback方法, 設(shè)置回調(diào)
3. CEGUI::System::getSingleton().getRenderer(); 可以得到當(dāng)前的CEGUI渲染器
4. RenderTarget類(lèi)的writeContentsToFile方法可以將渲染目標(biāo)當(dāng)前內(nèi)容寫(xiě)入文件中
5. 在關(guān)閉Ogre或者異常發(fā)生的時(shí)候, 記住要清除共享指針, 否則會(huì)出現(xiàn)問(wèn)題
?? ??? ?mActiveFragmentProgram.setNull();
?? ??? ?mActiveFragmentParameters.setNull();
?? ??? ?mActiveVertexProgram.setNull();
?? ??? ?mActiveVertexParameters.setNull();
?? ??? ?mActiveMaterial.setNull();
6. captureInput函數(shù)和releaseInput函數(shù)
?? ?表明當(dāng)捕捉CEGUI窗口的輸入時(shí), 會(huì)直接調(diào)用該窗口的事件處理函數(shù)
?? ?而幀監(jiān)聽(tīng)器的事件處理函數(shù)是通過(guò)注入CEGUI窗口實(shí)現(xiàn)的, 并沒(méi)有調(diào)用CEGUI自身的事件處理函數(shù)
7. 本例主要是介紹如何通過(guò)CEGUI滾動(dòng)條或者其他控件迅速改變材質(zhì)著色程序變量的方法.
??? 函數(shù) handleShaderControl 可以學(xué)習(xí)如何更改材質(zhì)中著色程序的某一個(gè)變量
??? 函數(shù) configureShaderControls 可以學(xué)習(xí)如何得到GPU程序參數(shù), 以及物理索引等內(nèi)容
8. 學(xué)會(huì)如何用control的腳本實(shí)現(xiàn)控制著色程序參數(shù)的變化
9. MaterialControls.h, MaterialControls.cpp文件用于控制材質(zhì)的著色程序變量變化的相關(guān)類(lèi)
10. 具體如何讀取以及修改GPU的參數(shù)
?? ?1) Ogre::GpuProgramParametersSharedPtr activeParameters; 為GPU程序參數(shù)
?? ?2) activeParameters->getConstantDefinition(ActiveShaderDef.ParamName); 得到常量聲明, ActiveShaderDef.ParamName為需要更改的參數(shù)名稱(chēng)
?? ??? ?其返回值賦值給 const Ogre::GpuConstantDefinition& def
?? ?3) def.physicalIndex 得到該參數(shù)的物理索引
?? ?4) activeParameters->getFloatPointer(ActiveShaderDef.PhysicalIndex); 根據(jù)該物理索引得到其在內(nèi)存的指針const float* pFloat
?? ?5) 對(duì)于本例中的ElementIndex表示該參數(shù)可能為一個(gè)數(shù)組, 則在該數(shù)組中根據(jù)ElementIndex取得其元素值
?? ?6) 如果要修改該參數(shù), 可用參數(shù)的_writeRawConstant函數(shù)
?? ??? ?activeParameters->_writeRawConstant(ActiveShaderDef.PhysicalIndex + ActiveShaderDef.ElementIndex, val);
?? ?簡(jiǎn)略的說(shuō)
?? ?1. 根據(jù)參數(shù)名在GPU參數(shù)中得到常量聲明
?? ?2. 根據(jù)聲明得到物理索引
?? ?3. 根據(jù)索引得到該參數(shù)所在指針
?? ?4. GPU參數(shù)的_writeRawConstant方法可用于修改常量
1. OceanDemo 類(lèi)
?? ?// 重寫(xiě)的主驅(qū)動(dòng)類(lèi)
?? ??? ?函數(shù) configure
?? ??? ??? ?配置對(duì)話框
?? ??? ?函數(shù) chooseSceneManager
?? ??? ??? ?創(chuàng)建一個(gè)ST_GENERI場(chǎng)景管理器
?? ??? ?函數(shù) createCamera
?? ??? ??? ?創(chuàng)建相機(jī)
?? ??? ?函數(shù) createViewports
?? ??? ??? ?當(dāng)前窗口創(chuàng)建視口
?? ??? ?函數(shù) setupResources
?? ??? ??? ?加載資源位置
?? ??? ?函數(shù) loadResources
?? ??? ??? ?初始化所有的資源組
?? ??? ?函數(shù) setupGUI
?? ??? ??? ?創(chuàng)建CEGUI窗口
?? ??? ?函數(shù) createScene
?? ??? ??? ?設(shè)置環(huán)境光, 天空盒
?? ??? ??? ?創(chuàng)建節(jié)點(diǎn)
?? ??? ??? ?創(chuàng)建所有的光, 光節(jié)點(diǎn), 公告板來(lái)設(shè)置表示光的對(duì)象
?? ??? ??? ?設(shè)置相機(jī)位置
?? ??? ??? ?創(chuàng)建平面表示海洋
?? ??? ??? ??? ?法線 UNIT_Y
?? ??? ??? ??? ?d 為 20
?? ??? ??? ??? ?場(chǎng)景管理器創(chuàng)建平面對(duì)象
?? ??? ??? ??? ?創(chuàng)建實(shí)體為該平面
?? ??? ??? ??? ?創(chuàng)建節(jié)點(diǎn)掛接該實(shí)體
?? ??? ?函數(shù) setup
?? ??? ??? ?其他如同以前一樣
?? ??? ??? ?增加兩個(gè)函數(shù)
?? ??? ??? ?initDemoEventWiring();
?? ??? ??? ?initComboBoxes();
?? ??? ?
?? ??? ?函數(shù) initComboBoxes
?? ??? ??? ?初始化組合框, 給該組合框添加控制腳本所擁有的材質(zhì), 并在屏幕上顯示材質(zhì)名稱(chēng)
?? ??? ??? ?
?? ??? ?函數(shù) initDemoEventWiring
?? ??? ??? ?給所有的CEGUI窗口增加事件處理函數(shù)
?? ??? ??? ??? ?ExitDemoBtn - PushButton::EventClicked - handleQuit
?? ??? ??? ??? ?ModelCombos - Combobox::EventListSelectionAccepted - handleModelComboChanged
?? ??? ??? ??? ?ShaderCombos - Combobox::EventListSelectionAccepted - handleShaderComboChanged
?? ??? ??? ??? ?root
?? ??? ??? ??? ??? ?- EventMouseMove - OceanDemo_FrameListener::handleMouseMove
?? ??? ??? ??? ??? ?- EventMouseButtonUp - OceanDemo_FrameListener::handleMouseButtonUp
?? ??? ??? ??? ??? ?- EventMouseButtonDown - OceanDemo_FrameListener::handleMouseButtonDown
?? ??? ??? ??? ??? ?- EventMouseWheel - OceanDemo_FrameListener::handleMouseWheelEvent
?? ??? ??? ??? ??? ?- EventKeyDown - OceanDemo_FrameListener::handleKeyDownEvent
?? ??? ??? ??? ??? ?- EventKeyUp - OceanDemo_FrameListener::handleKeyUpEvent
?? ??? ??? ??? ?ModelSpinCB - Checkbox::EventCheckStateChanged - OceanDemo_FrameListener::handelModelSpinChange
?? ??? ??? ??? ?LightSpinCB - Checkbox::EventCheckStateChanged - OceanDemo_FrameListener::handelLightSpinChange
?? ??? ??? ??? ?CameraRBtn - RadioButton::EventSelectStateChanged - OceanDemo::handleMovementTypeChange
?? ??? ??? ??? ?ModelRBtn - RadioButton::EventSelectStateChanged - OceanDemo::handleMovementTypeChange
?? ??? ??? ??? ?VerticalScroll - Scrollbar::EventScrollPositionChanged - OceanDemo::handleScrollControlsWindow
?? ??? ?
?? ??? ?函數(shù) handleQuit
?? ??? ??? ?跳用根的queueEndRendering函數(shù)直接退出
?? ??? ??? ?
?? ??? ?函數(shù) setShaderControlVal
?? ??? ??? ?設(shè)置其中一個(gè)著色器控制的值
?? ??? ??? ?
?? ??? ?函數(shù) handleShaderControl
?? ??? ??? ?重要函數(shù), 處理材質(zhì)的變化, 如散射, 鏡面等等, 最重要的是可以設(shè)置材質(zhì)中著色程序特定變量的值
?? ??? ??? ?
?? ??? ?函數(shù) handleModelComboChanged
?? ??? ??? ?根據(jù)選擇的Model選擇正確的實(shí)體掛接
?? ??? ?
?? ??? ?函數(shù) handleShaderComboChanged
?? ??? ??? ?根據(jù)選擇更改海洋的材質(zhì).
?? ??? ??? ?
?? ??? ?函數(shù) handleScrollControlsWindow
?? ??? ??? ?每當(dāng) 滾動(dòng)含有著色器選項(xiàng)的垂直滾動(dòng)條, 其內(nèi)容的變化
?? ??? ?
?? ??? ?函數(shù) handleMovementTypeChanged
?? ??? ??? ?更改當(dāng)前移動(dòng)的物體對(duì)象
?? ??? ?
?? ??? ?函數(shù) configureShaderControls
?? ??? ??? ?得到當(dāng)前活躍材質(zhì)的GPU程序指針和GPU程序參數(shù)指針
?? ??? ??? ?列出當(dāng)前材質(zhì)在控制腳本中列出的可以修改的程序參數(shù)
?? ??? ??? ?根據(jù)參數(shù)列表設(shè)置著色器控制容器
?? ??? ??? ?以及設(shè)置所有參數(shù)在CEGUI窗口上實(shí)現(xiàn)的子窗口
?? ??? ??? ?另外要得到該參數(shù)在GPU程序中的物理索引
?? ??? ??? ?
?? ??? ??? ?
2. OceanDemo_FrameListener 類(lèi)
?? ?// 重寫(xiě)的幀監(jiān)聽(tīng)器類(lèi)
?? ?基類(lèi): Ogre::FrameListener, OIS::KeyListener, OIS::MouseListener
?? ?
?? ?函數(shù) convertOISButtonToCegui
?? ??? ?// Ogre的按鈕轉(zhuǎn)換成CEGUI可認(rèn)的按鈕
?? ?函數(shù) CheckMovementKeys
?? ??? ?// 檢測(cè)按鍵, 改變一些變量狀態(tài)
?? ?函數(shù) updateStats
?? ??? ?// 更新CEGUI窗口的一些子窗口文本
?? ??? ?
?? ?構(gòu)造函數(shù)
?? ??? ?創(chuàng)建OIS的輸入系統(tǒng) - OIS::InputManager* mInputManager
?? ??? ??? ?1) 創(chuàng)建OIS::ParamList pl;
?? ??? ??? ?2) 調(diào)用程序渲染窗口的 getCustomAttribute方法得到窗口WINDOW屬性所代表的窗口句柄
?? ??? ??? ?3) 將該窗口句柄插入pl中
?? ??? ??? ?4) 以pl為參數(shù), 調(diào)用OIS::InputManager的createInputSystem方法, 即可創(chuàng)建一個(gè)OIS輸入管理器
?? ??? ??? ?5) 該OIS輸入管理器調(diào)用createInputObject方法, 可以創(chuàng)建鍵盤(pán)和鼠標(biāo)對(duì)象
?? ??? ??? ?6) 通過(guò)渲染窗口的getMetrics函數(shù)得到窗口高寬, 從而設(shè)定鼠標(biāo)狀態(tài)的高寬, 限制鼠標(biāo)活動(dòng)范圍.
?? ??? ??? ?7) 如果為緩沖輸入, 調(diào)用各個(gè)對(duì)象的setEventCallback方法, 設(shè)置回調(diào)?? ?
?? ??? ?得到CEGUI的渲染器
?? ??? ??? ?mGuiRenderer = CEGUI::System::getSingleton().getRenderer();
?? ??? ??? ?根據(jù)窗口名稱(chēng), 得到各個(gè)子窗口
?? ??? ??? ??? ?CEGUI::WindowManager::getSingleton().getWindow("name");
?? ??? ??? ??? ?
?? ?析構(gòu)函數(shù)
?? ??? ?// 銷(xiāo)毀OIS的輸入對(duì)象和管理器
?? ??? ?
?? ?函數(shù) frameRenderingQueued
?? ??? ?抓取鼠標(biāo)和鍵盤(pán)狀態(tài)
?? ??? ?根據(jù)頻率更新CEGUI的狀態(tài)指示
?? ??? ?根據(jù)用戶的選擇選中要變換的對(duì)象,然后移動(dòng)和旋轉(zhuǎn)該對(duì)象
?? ??? ?根據(jù)用戶選擇旋轉(zhuǎn)對(duì)象和光
?? ??? ?根據(jù)用戶選擇進(jìn)行截屏
?? ??? ?
?? ?函數(shù) handleMouseMove
?? ??? ?處理CEGUI根窗口的鼠標(biāo)移動(dòng)
?? ??? ?如按下了左鍵, 右鍵沒(méi)有按下, 設(shè)置旋轉(zhuǎn)量
?? ??? ?如按下了右鍵, 左鍵沒(méi)有按下, 設(shè)置左右的移動(dòng)量
?? ??? ?兩者同時(shí)按下, 則設(shè)置前后運(yùn)動(dòng)的移動(dòng)量
?? ??? ?設(shè)置mUpdateMovement為真, 則提示下一幀需要處理對(duì)象的變化
?? ??? ?
?? ?函數(shù) handleMouseButtonUp
?? ??? ?處理鼠標(biāo)按鍵彈起事件
?? ??? ??? ?顯示鼠標(biāo), 位置設(shè)置為上次鼠標(biāo)隱藏時(shí)所處的位置
?? ??? ??? ?其根窗口調(diào)用 releaseInput函數(shù), 表示不再?gòu)拇翱诓蹲捷斎?
?? ??? ??? ?
?? ?函數(shù) handleMouseButtonDown
?? ??? ?處理鼠標(biāo)按鍵按下事件
?? ??? ??? ?隱藏鼠標(biāo), 保存鼠標(biāo)位置
?? ??? ??? ?根窗口調(diào)用captureInput()函數(shù), 捕捉窗口的輸入
?? ?函數(shù) handleMouseWheelEvent
?? ??? ?處理鼠標(biāo)滾輪, 設(shè)置對(duì)象的前后移動(dòng)
?? ?函數(shù) handleKeyDownEvent, handleKeyUpEvent
?? ??? ?處理按鍵, 判斷是否移動(dòng)對(duì)象
?? ?函數(shù) handelModelSpinChange
?? ??? ?根據(jù)選擇設(shè)置 mSpinModel變量
?? ?函數(shù) handelLightSpinChange
?? ??? ?設(shè)置 mSpinLight
?? ?
?? ?函數(shù) mouseMoved, mousePressed, mouseReleased
?? ??? ?注入CEGUI窗口中
?? ?函數(shù) keyPressed
?? ??? ?設(shè)置按鍵消息, 如退出, 截屏, 并注入CEGUI窗口
?? ?函數(shù) keyReleased
?? ??? ?注入CEGUI窗口
???
MaterialControls.h, MaterialControls.cpp文件分析
1. ShaderControl 結(jié)構(gòu)體
?? ?用來(lái)保存著色器的控制信息
?? ?三個(gè)接口:
?? ??? ?getRange - 得到范圍
?? ??? ?convertParamToScrollPosition - 程序參數(shù)轉(zhuǎn)化為滑動(dòng)條位置(函數(shù)參數(shù)減去最小值)
?? ??? ?convertScrollPositionToParam - 滑動(dòng)條位置轉(zhuǎn)化為程序參數(shù)(函數(shù)參數(shù)加上最小值)
?? ??? ?
2. ShaderControlsContainer 為 ShaderControl結(jié)構(gòu)體變量的vector容器類(lèi)型, ShaderControlIterator 為該容器類(lèi)型的迭代器類(lèi)型
3. MaterialControls 類(lèi)
?? ?該類(lèi)主要用于控制該材質(zhì)的所有著色器控制對(duì)象, 即所有的ShaderControl對(duì)象.
?? ?接口:
?? ??? ?getDisplayName - 返回用于顯示的名稱(chēng)
?? ??? ?getMaterialName - 使用的材質(zhì)名稱(chēng)
?? ??? ?getShaderControlCount - 該材質(zhì)的ShaderControl對(duì)象 數(shù)
?? ??? ?getShaderControl - 根據(jù)索引范圍特定的 ShaderControl對(duì)象
?? ??? ?addControl - 添加 ShaderControl對(duì)象
?? ??? ?
4. MaterialControlsContainer 為 MaterialControls對(duì)象的vector容器, MaterialControlsIterator 為該容器的迭代器類(lèi)型
5. ShaderControlGUIWidget 結(jié)構(gòu)體
?? ?該結(jié)構(gòu)體用于包含三個(gè)成員, 都為CEGUI的窗口, 其中一個(gè)為 Scrollbar
?? ?
6. loadMaterialControlsFile, loadAllMaterialControlFiles 函數(shù)
?? ?加載.control文件
?? ?每一節(jié)如果含有material的設(shè)置, 就創(chuàng)建一個(gè)新的MaterialControls對(duì)象, 然后壓入MaterialControlsContainer容器中
?? ??? ?而后遍歷該節(jié), 如果有control的設(shè)置, 該MaterialControls對(duì)象就添加新的ShaderControl對(duì)象
重要類(lèi)與函數(shù)
Ogre
?? ?RenderTarget 類(lèi)
?? ??? ?RenderTarget::FrameStats 結(jié)構(gòu)體
?? ??? ?其成員存儲(chǔ)關(guān)于FPS的信息
?? ??? ?
?? ??? ?函數(shù) getStatistics
?? ??? ??? ?// 返回 當(dāng)前渲染性能的細(xì)節(jié), 保存于 RenderTarget::FrameStats 結(jié)構(gòu)體中
?? ??? ??? ?備注: 如果使用者的應(yīng)用程序希望顯示自己的性能信息, 或者用于其他的方面, 這個(gè)方法可以返回一些有用的數(shù)據(jù)
?? ??? ?函數(shù) getCustomAttribute
?? ??? ??? ?// 得到一自定義屬性(該屬性可能是平臺(tái)設(shè)定的)
?? ??? ??? ?備注: 這個(gè)函數(shù)可以滿足任意API的需要, 可以查看平臺(tái)特定的細(xì)節(jié). 渲染窗口的"WINDOW"屬性, 可以得到窗口句柄
?? ??? ?函數(shù) writeContentsToFile
?? ??? ??? ?將渲染目標(biāo)的當(dāng)前內(nèi)容寫(xiě)入文件中
?? ??? ??? ?
?? ?GpuProgramParametersSharedPtr 類(lèi)型
?? ??? ?同 SharedPtr<GpuProgramParameters>
?? ??? ?
?? ?SharedPtr<T> 類(lèi)模板
?? ??? ?關(guān)聯(lián)計(jì)數(shù)的共享指針, 用于當(dāng)需要的時(shí)候銷(xiāo)毀指針
?? ??? ?備注: 這是一個(gè)標(biāo)準(zhǔn)的共享指針實(shí)現(xiàn), 用于當(dāng)刪除對(duì)象時(shí), 計(jì)算出其關(guān)聯(lián)數(shù).
?? ??? ??? ?如果 OGRE_THREAD_SUPPORT 定義為1, 使用該類(lèi)是線程安全的.
?? ??? ??? ?
?? ?GpuProgramParameters 類(lèi)
?? ??? ?將用于GpuProgram的程序參數(shù)收集在一起.
?? ??? ?備注: GPU程序狀態(tài)包含用于程序的常量參數(shù), 或者引擎根據(jù)需要自動(dòng)將生成的渲染系統(tǒng)狀態(tài)綁定到常量上去.
?? ??? ?GpuProgramParameters 對(duì)象通過(guò)GpuProgram創(chuàng)建, 可能有多個(gè)Pass實(shí)例共享, 正因?yàn)榇? 一般使用共享指針來(lái)管理這些對(duì)象, 以便當(dāng)沒(méi)有任何Pass使用它們的時(shí)候自動(dòng)刪除
?? ??? ?高級(jí)程序使用參數(shù)(一致變量), 低級(jí)程序使用索引常量(indexed constants), 該類(lèi)支持兩者, 但你可以通過(guò)調(diào)用hasNamedParameters()得知是否支持命名常量.
?? ??? ?在文檔中, 有位于'logical'和'phsical'索引之下的關(guān)聯(lián), 邏輯索引為使用低級(jí)程序的索引, 表現(xiàn)為一float4數(shù)組. 其中的一部分可能為可設(shè)置的, 一部分可能為程序中預(yù)定義的常量.
?? ??? ?我們只存儲(chǔ)那些被設(shè)置的常量, 在我們的緩存中, 如果使用邏輯索引, 則緩存中可以有間隙,? 而后我們映射這些緩存的邏輯索引至物理索引.
?? ??? ?當(dāng)使用高級(jí)程序時(shí), 邏輯索引不需要存在, 當(dāng)然, 如果高級(jí)程序擁有直接的從參數(shù)名稱(chēng)到邏輯索引的映射, 則也許存在邏輯索引.
?? ??? ?另外, 高級(jí)語(yǔ)言也許或也許不將元素的數(shù)組打包, 打包的話則將比連續(xù)的float4所占空間更小.
?? ??? ?ConstantDefinition 結(jié)構(gòu)體可以保存這些信息, 以便于高級(jí)程序語(yǔ)言的需要. 你不必?fù)?dān)心這些, 除非你想要從該結(jié)構(gòu)讀出參數(shù), 而不是設(shè)置它們.
?? ??? ?
?? ?TextureFilterOptions 類(lèi)型
?? ??? ?這是一個(gè)枚舉類(lèi)型, 可以快速設(shè)置縮小倍率, 放大倍率和mip過(guò)濾器的高級(jí)過(guò)濾選項(xiàng).
?? ??? ?枚舉值:
?? ??? ??? ?TFO_NONE?? ??? ??? ?等同于 min = FO_POINT, mag = FO_POINT, mip = FO_NONE
?? ??? ??? ?TFO_BILINEAR?? ??? ?等同于 min = FO_LINEAR, mag = FO_LINEAR, mip = FO_POINT
?? ??? ??? ?TFO_TRILINEAR?? ??? ?等同于 min = FO_LINEAR, mag = FO_LINEAR, mip = FO_LINEAR
?? ??? ??? ?TFO_ANISOTROPIC?? ??? ?等同于 min = FO_ANISOTROPIC, mag = FO_ANISOTROPIC, mip = FO_LINEAR
?? ??? ??? ?
?? ?StringUtil 類(lèi)
?? ??? ?函數(shù) split
?? ??? ??? ?// 將該字符串根據(jù)分隔符分割成數(shù)組
?? ??? ?函數(shù) parseInt
?? ??? ??? ?// 將該字符轉(zhuǎn)換成整數(shù)
?? ??? ??? ?
?? ?ResourceGroupManager 類(lèi)
?? ??? ?函數(shù) findResourceNames
?? ??? ??? ?// 在資源組中查找匹配的所有文件和文件夾
?? ??? ??? ?
CEGUI
?? ?UVector2 類(lèi)
?? ??? ?一個(gè)二維向量類(lèi)建立統(tǒng)一尺寸. 該類(lèi)對(duì)象常用于表示位置和大小.
?? ?Window 類(lèi)
?? ??? ?函數(shù) captureInput
?? ??? ??? ?// 捕捉窗口的輸入
?? ?Scrollbar 類(lèi)
?? ??? ?函數(shù) setDocumentSize
?? ??? ??? ?// 設(shè)置文檔或者數(shù)據(jù)的大小
?? ??? ??? ?這個(gè)文檔大小必須看成當(dāng)滾動(dòng)時(shí)數(shù)據(jù)的總大小(即一文本文件的行數(shù))
http://www.cppblog.com/summericeyl/archive/2009/11/08/100411.html
總結(jié)
以上是生活随笔為你收集整理的OGRE关于 Demo_Ocean 例子的分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 以太网交换机的工作原理
- 下一篇: allow php templates,