青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 14,  comments - 57,  trackbacks - 0
  最近游戲又要封測了,工作比較緊張,晚上下班了比較累,回家懶得寫代碼了,不過順便倒是繼續完成了對 新劍俠情緣(和月影傳說的資源格式相同)的資源逆向。完成了資源逆向后,突然興致來了,寫了個簡單的地圖查看器,到目前為止,一切運行正常。后來做了個簡單的Demo,實現了基本的尋路和技能動畫播放,其實新劍俠情緣原本的技能效果以今天的眼光看起來也還可以,即便如此,我還是集成了hge的粒子系統進去,試了下效果,還是挺奇怪的。
做完了這些之后,本想為我的PSP山寨一個新劍俠情緣。不料后來連續加了好幾天班,加了幾天班之后,人也懶了,山寨游戲的事情也就無疾而終了。
前面寫過幾篇逆向工程的文章,前幾天翻出來看了下,感覺像是另一個人寫的天書,我自己看自己的文章尚且如此,別人就更不用說了,其實對大部分人而言,關心的只是逆向的成果。對新劍俠情緣的資源和相關渲染感興趣的朋友可以單獨Email我。
  開始閱讀Ogre代碼正是在這百無聊賴的狀態下開始的,Ogre推出來很多年了,貌似05年就聽說朋友說起過這個項目,不過我一向是專注服務端開發,對客戶端開發經驗不是很多,在3D領域就完全是的新手了,所以一直也沒仔細研究。這幾天拿起原來下載的一個版本,簡單讀了下代碼。
Ogre的結構還是很清晰的,和手冊上說的一樣,主要就是那幾個對象,Demo大部分也很簡單,代碼量不多,看起來很振奮人心。
但是對我這樣的新手來說,首先想了解的當然是渲染流程。 Ogre的渲染流程確實會讓3D新手不適應,它是從RenderTarget開始的,一個RenderTarget可以有幾個ViewPort,每個ViewPort都有一個獨立的攝像機,這可以實現同屏幕多個渲染。
通過ViewPort對象的update調用
 mCamera->_renderScene(this, mShowOverlays);
來執行場景渲染,而場景渲染里,最重要的要算_findVisibleObjects了,
這個函數將可見的物體添加到渲染隊列里,這個函數非常的繞,里面還用到了Vistor,精神不好容易被繞暈,好在我挺住了,熬過來了。
熟悉了大致的渲染流程后,我覺得該寫點東西來實戰了。
3D教程的開始一般會教大家畫三角形,所以我也想用Ogre畫個三角形玩玩,
一開始,我也想從像那些Demo一樣從ExampleApplication繼承,不過我發現這樣啟動太慢了,而且我不需要加載那么多的材質,
所以自己手動Configure了,代碼如下:
Ogre::LogManager* pLogManager = new Ogre::LogManager;
    Ogre::Log* pLog = pLogManager->createLog("ogreLearn1.log");
    pLog->setDebugOutputEnabled(true);

    Ogre::Root* pRootObject = new Ogre::Root;
    pRootObject->loadPlugin("RenderSystem_Direct3D9_d.dll");
    pRootObject->loadPlugin("Plugin_OctreeSceneManager_d.dll");
    
    Ogre::RenderSystem* pRenderSystem = pRootObject->getRenderSystemByName("Direct3D9 Rendering Subsystem");
    pRenderSystem->setConfigOption("Full Screen", "False");
    pRootObject->setRenderSystem(pRenderSystem);   
    Ogre::RenderWindow* pRenderWindow = pRootObject->initialise(true);

編譯測試了下,可以正常運行,不過發現屏幕是花的,我還沒有創建場景呢,繼續添加攝像機和ViewPort以及場景
// 創建場景和攝像機以及ViewPort
    Ogre::SceneManager* pSceneManager = pRootObject->createSceneManager(Ogre::ST_GENERIC, "OgreLearn1");
    Ogre::Camera* pCamera = pSceneManager->createCamera("MainCamara");
    pCamera->setPosition(0.0, 0.0, -20.0);
    pCamera->lookAt(0, 0, 0);
    pCamera->setNearClipDistance(2);

    Ogre::Viewport* pViewPort = pRenderWindow->addViewport(pCamera);
    pViewPort->setBackgroundColour(Ogre::ColourValue(0, 0, 0, 1.0f) );
    pCamera->setAspectRatio(pViewPort->getActualWidth()/pViewPort->getActualHeight() );

最后加上pRootObject->startRendering();
編譯運行,一切正常,屏幕顏色也變成了想要的黑色,恩,下一步該添加三角形了,我不太喜歡用OgreManualObject,一堆的繁瑣操作。這里用自定義的Mesh來繪制3角形。
pSceneManager->setAmbientLight(Ogre::ColourValue(0.2, 0.2, 0.2) );
        Ogre::MeshPtr pMeshData = Ogre::MeshManager::getSingleton().createManual("Learn", Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
        Ogre::SubMesh* pSubMesh = pMeshData->createSubMesh();
        pSubMesh->useSharedVertices = false;
        pSubMesh->vertexData = new Ogre::VertexData;
        pSubMesh->vertexData->vertexStart = 0;
        pSubMesh->vertexData->vertexCount = 3;

先設置了環境光(其實沒啥用,我后面會禁止),然后創建了一個自定義的Mesh,
緊接著的是創建一個SubMesh,要知道Ogre中最小的網格就是SubMesh,創建好SubMesh后,要填充網格結構了,
創建了一個VertexData,設置頂點數目為3(也就是一個三角形),下面該定義頂點格式了,
Ogre::VertexDeclaration* pDecle = pSubMesh->vertexData->vertexDeclaration;
        size_t sOffset = 0;
        pDecle->addElement(0, sOffset, Ogre::VET_FLOAT3, Ogre::VES_POSITION);
        sOffset += Ogre::VertexElement::getTypeSize(Ogre::VET_FLOAT3);
        pDecle->addElement(0, sOffset, Ogre::VET_COLOUR, Ogre::VES_DIFFUSE);
        sOffset += Ogre::VertexElement::getTypeSize(Ogre::VET_COLOUR);

上述代碼定義了頂點格式,只有基本的坐標和顏色。
下一步將是申請顯存,填充頂點結構。
Ogre::HardwareVertexBufferSharedPtr vBuf = Ogre::HardwareBufferManager::getSingleton().createVertexBuffer(sOffset, 3, Ogre::HardwareBuffer::HBU_STATIC_WRITE_ONLY);
        float* pReal = static_cast<float*>(vBuf->lock(Ogre::HardwareBuffer::HBL_DISCARD));
        Ogre::RGBA* pColor = NULL;

        *pReal++ = -2.0f;
        *pReal++ = 0.0f;
        *pReal++ = 0.0f;
        pColor = (Ogre::RGBA*)pReal;
        pRenderSystem->convertColourValue(Ogre::ColourValue(1.0f, 0.0, 0, 0.0f), pColor);
        pReal = (float*)(pColor+1);
        
        *pReal++ = 0.0f;
        *pReal++ = 2.0f;
        *pReal++ = 0.0f;
        pColor = (Ogre::RGBA*)pReal;
        pRenderSystem->convertColourValue(Ogre::ColourValue(0.0f, 0, 1.0, 1.0f), pColor);
        pReal = (float*)(pColor+1);


        *pReal++ = 2.0f;
        *pReal++ = 0.0f;
        *pReal++ = 0.0f;
        pColor = (Ogre::RGBA*)pReal;
        pRenderSystem->convertColourValue(Ogre::ColourValue(1.0f, 0, 0, 1.0f), pColor);
        pReal = (float*)(pColor+1);
        vBuf->unlock();
        pSubMesh->vertexData->vertexBufferBinding->setBinding(0, vBuf);
       
        pMeshData->load();
        pMeshData->_setBounds(Ogre::AxisAlignedBox(-2, 0, -1, 2, 2, 1) );
填充頂點后,設置網格包圍盒,這樣一個自定義的網格就創建好了,接下來要創建一個使用該網格的實體了
    Ogre::Entity* pEntity = pSceneManager->createEntity("TestEntity", "Learn");
        pEntity->setMaterialName("BaseWhiteNoLighting");

        pSceneManager->getRootSceneNode()->createChildSceneNode()->attachObject(pEntity);
        pEntity->getParentNode()->setPosition(3, 0, 0);
        pEntity->getParentNode()->rotate(Ogre::Quaternion(1.0f, 1.0f, 0, 1.0f) );

好了,這樣實體也創建好了,接下來執行渲染吧:
pRootObject->startRendering();

遇到的問題

  上述代碼是運行正常的,但是一開始,我執行的結果是看不到任何東西,跟蹤了下,發現實體每次都被攝像機裁剪了,才發覺自定義Mesh要自己設置包圍盒子,
設置可包圍盒子。
 設置了包圍盒后,數據已經進入了D3D的渲染管道,但是還是沒看到三角形,仔細觀察,原來攝像機對著的是三角形的背面。。。
調整攝像機后,終于能看到一個三角形了,不過是白色的。。。
從這個癥狀看,應該是沒有關閉光照導致的,但是我明明主動調用RenderSystem關閉光照了啊,仔細跟蹤了下原來是材質在搗亂,
默認的材質是開啟了光照的,所以在渲染前的SceneManager::_setPass 的時候,開啟了光照。
這好辦,主動設置了關閉光照的材質"BaseWhiteNoLighting" 后,終于看到了彩色三角形了。


posted on 2010-09-25 21:44 feixuwu 閱讀(1909) 評論(2)  編輯 收藏 引用 所屬分類: 游戲開發

FeedBack:
# re: Ogre初體驗
2010-09-25 22:21 | Joy1792
太帥了,以后跟你混了,我們也剛接觸OGRE,老師說我們進度很快,但是學了兩個星期還是不知道自己在學什么,能指點一下嗎?  回復  更多評論
  
# re: Ogre初體驗[未登錄]
2013-04-26 16:17 | albert
咋這么牛叉,看代碼,一看就看到本質,我老照著例子抄了,沒有自己的東西~  回復  更多評論
  
<2010年9月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

文章轉載請注明出處

常用鏈接

留言簿(11)

隨筆分類

隨筆檔案

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美激情五月| 久久精品国产一区二区三| 欧美黄污视频| 一区二区精品在线观看| 99精品视频免费观看| 国产精品magnet| 欧美一级播放| 久久激情网站| 日韩手机在线导航| 亚洲图色在线| 禁断一区二区三区在线| 欧美激情精品久久久久久黑人 | 欧美亚洲一区二区在线观看| 国产精品99久久久久久久vr| 国产主播精品| 亚洲精品乱码久久久久| 国产精品久久久久久久久动漫| 久久不见久久见免费视频1| 久久在精品线影院精品国产| 妖精成人www高清在线观看| 亚洲影院免费观看| 亚洲巨乳在线| 午夜视频在线观看一区二区三区 | 欧美日本中文| 久久久久成人精品免费播放动漫| 欧美高清视频一区| 久久久午夜电影| 欧美日韩1区2区| 久久国产精品72免费观看| 亚洲视频一区在线观看| 亚洲每日在线| 激情视频一区二区三区| 夜夜精品视频一区二区| 雨宫琴音一区二区在线| 国产精品99久久久久久白浆小说| 亚洲国产精品电影在线观看| 亚洲自拍偷拍福利| 日韩亚洲精品视频| 美女999久久久精品视频| 欧美一区二区视频在线观看2020 | 久久久999国产| 亚洲专区在线| 欧美精品一区三区在线观看| 蜜桃av噜噜一区| 国产手机视频精品| 中日韩在线视频| 亚洲精品资源| 蜜臀99久久精品久久久久久软件| 欧美在线影院| 国产精品欧美久久久久无广告| 亚洲精品影视在线观看| 亚洲国产高清一区| 久久深夜福利免费观看| 久久精品一二三| 国产视频亚洲| 亚洲欧美日韩综合国产aⅴ| 亚洲性夜色噜噜噜7777| 欧美乱大交xxxxx| 欧美激情小视频| 亚洲经典在线看| 欧美 日韩 国产在线| 欧美成人中文字幕| 亚洲国产精品精华液2区45| 久久久久高清| 久久综合一区二区| 精品999久久久| 久久久亚洲国产天美传媒修理工| 久久午夜国产精品| 激情久久一区| 久久综合色天天久久综合图片| 久久欧美肥婆一二区| 在线观看中文字幕不卡| 欧美v日韩v国产v| 亚洲黄色大片| 在线视频亚洲| 国产精品激情偷乱一区二区∴| 99riav国产精品| 亚洲女性裸体视频| 国产一区二区日韩| 久久av一区二区三区亚洲| 欧美成人精品1314www| 亚洲精品在线二区| 欧美日韩直播| 久久不射网站| 最近看过的日韩成人| 亚洲综合精品自拍| 精久久久久久久久久久| 欧美激情第五页| 亚洲欧美韩国| 亚洲第一福利社区| 亚洲一区免费观看| 激情五月婷婷综合| 欧美久久一级| 久久电影一区| 亚洲久久一区| 久久久九九九九| 亚洲欧美国产一区二区三区| 欧美一区二区三区啪啪| 在线日韩中文| 欧美亚州在线观看| 欧美主播一区二区三区| 亚洲黄色免费| 久久免费视频在线观看| 一区二区三区国产| 国内精品视频在线播放| 欧美日韩亚洲视频| 久久久久久久久久久久久9999| 亚洲精品日韩在线| 噜噜噜在线观看免费视频日韩| 日韩亚洲欧美高清| 韩国av一区二区三区四区| 欧美日韩国产麻豆| 免费在线日韩av| 欧美在线91| 亚洲一区二区三区高清 | 欧美激情亚洲激情| 久久久人成影片一区二区三区| 亚洲午夜视频| 亚洲激情二区| 在线成人av网站| 国产精品亚洲综合| 欧美日韩一区成人| 欧美极品在线播放| 久久在线免费观看| 久久电影一区| 午夜亚洲视频| 亚洲欧美日韩精品久久久| 99精品福利视频| 亚洲激情午夜| 欧美国产亚洲另类动漫| 久久一区激情| 久久亚洲综合色| 久久久久国产免费免费| 亚洲欧美色一区| 亚洲伊人久久综合| 中文成人激情娱乐网| 9色国产精品| 亚洲美女精品久久| 一本大道久久a久久综合婷婷| 亚洲精品看片| 在线视频日韩精品| 亚洲一区二区三区在线视频| 一区二区三区欧美激情| 亚洲图片欧洲图片日韩av| 亚洲精品男同| 亚洲天堂视频在线观看| 中文国产成人精品| 亚洲亚洲精品三区日韩精品在线视频| 一区二区三区高清| 亚洲一区二区三区视频播放| 午夜一级久久| 久久久噜噜噜久噜久久| 欧美/亚洲一区| 欧美激情精品久久久久| 亚洲破处大片| 在线综合亚洲| 午夜精品久久久久久99热| 欧美一区二区在线播放| 久久亚洲精品一区二区| 欧美精品激情在线| 欧美性大战久久久久久久蜜臀| 国产欧美日韩一区| 在线免费观看欧美| 一本色道久久综合亚洲91| 校园春色综合网| 另类春色校园亚洲| 亚洲精品久久久久久久久| 亚洲视频在线视频| 久久久久国产精品午夜一区| 欧美大片一区二区| 国产精品日日摸夜夜添夜夜av| 极品中文字幕一区| 一区二区三区精品视频| 欧美一区二区精品| 玖玖玖国产精品| 国产精品国产三级国产a| 韩国美女久久| 亚洲私人影院在线观看| 久久精品国产一区二区三| 欧美激情性爽国产精品17p| 亚洲图片欧洲图片av| 裸体丰满少妇做受久久99精品 | 亚洲一本视频| 可以看av的网站久久看| 国产精品夫妻自拍| 最新日韩精品| 久久久久在线观看| 亚洲另类视频| 久久免费高清| 国产精品久久7| 亚洲精品男同| 猫咪成人在线观看| 亚洲视频图片小说| 欧美大片在线看| 伊人久久噜噜噜躁狠狠躁| 欧美亚洲免费| 99国产精品久久久| 欧美精品电影在线| 亚洲国产成人在线视频| 久久九九久久九九|