• <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>
            天地之靈學(xué)習(xí)小組
            我們學(xué)習(xí)小組的OpenGL學(xué)習(xí)筆記 大家一定要互相折磨呀~~
            posts - 150,  comments - 156,  trackbacks - 0
            首先決定暫時(shí)不考慮DX9/OGL了,我不可能在不了解一個(gè)庫(kù)的時(shí)候就給它留好接口。耽誤我挺多時(shí)間了,雖然有重大收獲……
            今天的成就是把Shader啟動(dòng)起來(lái)了,做了一個(gè)花的三角形。
            不管怎么說(shuō),拋棄Framework不談,本周完成界面顯示還是沒(méi)什么大問(wèn)題的。剩下的時(shí)間我還是去讀讀ConfigSystem(DXSDK里一個(gè)很囧的小球Sample)的整體結(jié)構(gòu),還有讀讀DXUT的代碼了。
            如果順利的話,我也決定采用DXUT開(kāi)發(fā),因?yàn)槲覜](méi)有必要在對(duì)整體流程已經(jīng)了解的情況下,對(duì)每個(gè)細(xì)節(jié)了如指掌。我的關(guān)注點(diǎn)還是:資源管理、框架、Shader。不能偏離了學(xué)習(xí)DX的目的。

            沒(méi)弄明白怎么粘圖,那就不管了,反正一個(gè)破三角形也沒(méi)什么好看的……
            隨便改了改代碼,用RenderMonkey時(shí)寫的一些vs和ps的東西還記得。
            另外Dx10的用于輸出的一些Semantics的名字改了:
            Direct3D 10 Semantic Direct3D 9 Equivalent Semantic
            SV_Depth DEPTH
            SV_Position POSITION
            SV_Target COLOR

            不管怎么說(shuō)總是麻煩了一點(diǎn)。討厭的是RenderMonkey在我的電腦上沒(méi)裝起來(lái),不能方便的編輯shader然后輸出fx了。明天還是研究下如何輸出編譯的錯(cuò)誤信息。好歹編不過(guò)要能告訴我是哪行編不過(guò)才行……

            現(xiàn)在的Shader代碼:(就隨便搞了下,顯示出一個(gè)暗紅色的怪東西:)
            struct VS_OUTPUT
            {
             float4 Pos : SV_POSITION;
             float4 Color: COLOR0;
            };

            VS_OUTPUT VS( float4 Pos : POSITION )
            {
             VS_OUTPUT Output;
             Output.Pos = Pos;
             Output.Color = float4( 0.3f, Pos.y, Pos.x, 1.0f );
                return Output;
            }

            struct PS_OUTPUT
            {
                float4 RGBColor : SV_Target;  // Pixel color   
            };

            PS_OUTPUT PS( float4 Pos : SV_POSITION,
                float4 Color: COLOR0 )
            {
             PS_OUTPUT Output;
                Output.RGBColor = Color;
                return Output;
            }

            technique10 R0
            {
                pass P0
                {
                    SetVertexShader( CompileShader( vs_4_0, VS() ) );
                    SetGeometryShader( NULL );
                    SetPixelShader( CompileShader( ps_4_0, PS() ) );
                }
            }

            主要是把Tutorial2里的fx拿出來(lái),把兩個(gè)輸出從單純的float4變成了一個(gè)結(jié)構(gòu)體,然后給VS的輸出增加了一個(gè)Color,最后再把坐標(biāo)的一部分當(dāng)作顏色輸出了出去。

            posted @ 2008-11-14 00:30 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(298) | 評(píng)論 (0)編輯 收藏






            posted @ 2008-11-13 21:32 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(120) | 評(píng)論 (0)編輯 收藏
            我究竟是不太能接受這種不規(guī)則的學(xué)習(xí)方式,而且太心急太有壓力太怕完不成,只能退而求其次。我想如果用glut寫完還有剩余的時(shí)間,我會(huì)把它轉(zhuǎn)到win API。而且我相信FamilyBlock的邏輯并不難,我有信心快速完成它。
            posted @ 2008-11-13 21:15 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(136) | 評(píng)論 (0)編輯 收藏

            好吧,今晚有重大突破,那就是:窗口顯示出來(lái)老!v ~。~b
            就是DXSDK里那個(gè)藍(lán)藍(lán)的窗口,不過(guò)我為了搭建Frame,繞了好多彎,剛剛才終于顯示出來(lái)。
            目前完成了GraphicsDevice類的創(chuàng)建了,我正在考慮怎樣設(shè)計(jì)通用的點(diǎn)列表、材質(zhì)等等接口,得尋人咨詢下OpenGL的關(guān)于點(diǎn)列表的接口。如果大家都是自定義結(jié)構(gòu)體+參數(shù)那就沒(méi)什么好說(shuō)的老,把點(diǎn)列表做成一個(gè)點(diǎn)容器那么復(fù)雜似乎也沒(méi)有必要。唉,做到再說(shuō)吧!

            目前的主函數(shù)代碼:

            int _tmain(int argc, _TCHAR* argv[])
            {
             InitFramework();
             CComPtr<IGraphicsLibrary> pGL;
             if (FAILED(GetDefaultFrameworkLibrary(&pGL)))
             {
              wprintf(L"No default graphics library found.\n");
              ATLASSERT(false);
              return 1;
             }
             CComBSTR bsGLName;
             if (SUCCEEDED(pGL->GetLibraryName(&bsGLName)))
             {
              wprintf(L"Default graphics library is: %s\n", (BSTR)bsGLName);
             }

             pGL->EnumAdapters();

             CComPtr<IGraphicsDevice> pGraphicsDevice;
             if (FAILED(pGL->CreateGraphicsDevice(FALSE, 640, 480, L"Only a test", &pGraphicsDevice)))
             {
              ATLASSERT(false);
              return 1;
             }

             FrameworkSimpleMainLoop(pGraphicsDevice);
             return 0;
            }

            最后的FrameworkSimpleMainLoop就是近似傳說(shuō)中的glutMainLoop啦,不過(guò)為了避免全局變量,我把pGraphicsDevice給傳進(jìn)去了……
            然后想想貌似這里沒(méi)什么避免全局變量的必要(或者整個(gè)類,然后用靜態(tài)變量算了)。現(xiàn)在的話,如果想在MainLoop內(nèi)更換GraphicsDevice,原來(lái)的Device的引用計(jì)數(shù)也釋放不掉了。
            然后覺(jué)得一開(kāi)始的注冊(cè)可用庫(kù)之類的流程也要改,目前那個(gè)全局map也會(huì)把所有的DLL都保留著,沒(méi)有釋放掉。
            最好的辦法是,全局map里只保留創(chuàng)建函數(shù),在獲取Library。主程序可以Enum每個(gè)可用類(按接口),傳遞GUID進(jìn)去,獲得一個(gè)接口,也可以選擇創(chuàng)建默認(rèn)類,然后獲得一個(gè)接口。在InitFramework的時(shí)候,每個(gè)DLL只嘗試性連接,如果連接成功,可以立刻釋放。等到對(duì)應(yīng)的類被創(chuàng)建的時(shí)候再去重新連接。
            另外在ToggleDevice的方面還沒(méi)什么好的想法。或者干脆維護(hù)一個(gè)Device列表?列表內(nèi)的被Render。這也是需要改進(jìn)的。

            posted @ 2008-11-12 22:59 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(154) | 評(píng)論 (0)編輯 收藏
                  今天把瑪麗醫(yī)生的界面規(guī)劃了一下,規(guī)劃的是那么的美好。中午吃完飯連寢室都沒(méi)來(lái)得及回就趕來(lái)實(shí)驗(yàn)室寫代碼,但是萬(wàn)惡的XYLayout讓我寒心了。
                  以前只是聽(tīng)說(shuō)過(guò)XYLayout,但還是沒(méi)有用過(guò)。今天規(guī)劃界面的時(shí)候我想到了XYLayout,自己幻想XYLayout挺好的,對(duì)每個(gè)組建都固定一個(gè)位置,這樣做界面太好了。可是回來(lái)之后寫了代碼居然發(fā)現(xiàn)JDK里面竟然無(wú)法編譯,當(dāng)時(shí)那個(gè)心情啊。后來(lái)想想,還是先寫功能吧,屏幕上就先出來(lái)一個(gè)16*8的格子加上菜單,另外的界面就等等再說(shuō)吧。
            posted @ 2008-11-12 22:04 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(242) | 評(píng)論 (0)編輯 收藏
                 摘要:   閱讀全文
            posted @ 2008-11-12 19:40 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(270) | 評(píng)論 (2)編輯 收藏
            暈死了都,為什么<gl\gl.h>前面一定要加#include <windows.h>……………………崩潰的link error
            不就是一個(gè)小小的ReadBMP24函數(shù),我想里面就用了個(gè)GLubyte類型,沒(méi)用啥別的,go to definition一下,定義在gl\gl.h里,就把頭文件從glut換成了gl,于是出現(xiàn)了崩潰的link error。上帝啊,不帶這么折磨新手的。
            抓狂中……

            posted @ 2008-11-12 11:07 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(298) | 評(píng)論 (0)編輯 收藏

            今天早上意圖創(chuàng)建Device和SwapChain。這沒(méi)什么問(wèn)題,但是我意圖通過(guò)模板演繹和宏來(lái)簡(jiǎn)化對(duì)動(dòng)態(tài)鏈接的DLL中函數(shù)的調(diào)用時(shí),我寫的模板和宏不能正常工作。
            我寫的函數(shù)和宏如下:
            template <typename FuncType>
            FuncType __forceinline GetModuleFunc(HMODULE hModule, LPCSTR lpProcName, FuncType /*pFunc*/)
            {
             return reinterpret_cast<FuncType>(GetProcAddress(hModule, lpProcName));
            }

            #define CallModuleFunc(Module, ProcName, Args) (GetModuleFunc(Module, #ProcName, ProcName))?((GetModuleFunc(Module, #ProcName, ProcName)) Args) : E_FAIL

            思路是通過(guò)函數(shù)的聲明演繹出函數(shù)類型,進(jìn)行強(qiáng)轉(zhuǎn)然后調(diào)用。

            失敗原因是盡管沒(méi)有直接調(diào)用pFunc,但pFunc依然作為參數(shù)被引用了,因?yàn)槭莿?dòng)態(tài)鏈接的DLL,沒(méi)有引用對(duì)應(yīng)的lib,所以鏈接時(shí)提示找不到符號(hào)的錯(cuò)誤信息。

            想知道有沒(méi)有什么其他的辦法只通過(guò)函數(shù)聲明而不通過(guò)引用來(lái)獲得類型以實(shí)現(xiàn)對(duì)動(dòng)態(tài)鏈接的DLL中的函數(shù)的調(diào)用?vs2005還不支持typeof關(guān)鍵字,暫時(shí)沒(méi)有想到什么好辦法。

            調(diào)用方代碼大致如下:以CreateDXGIFactory(Direct10里的一個(gè)函數(shù)) 舉例:
            HRESULT ret = CallModuleFunc(m_hDXGIModule, CreateDXGIFactory, (__uuidof(IDXGIFactory), (void **)&pDXGIFactory) );
             if (FAILED(ret))
             {
              ATLASSERT(0);
              return E_FAIL;
             }

            后記:
            在偉大的叛叛的指導(dǎo)下,用boost搞定了這個(gè)問(wèn)題。
            一個(gè)test程序如下:
             BOOST_TYPEOF(Direct3DCreate9) *pDirect3DCreate9 = NULL;
             HMODULE hdx = LoadLibrary(_T("d3d9.dll"));

             pDirect3DCreate9 = reinterpret_cast<BOOST_TYPEOF(Direct3DCreate9) *>(GetProcAddress(hdx, "Direct3DCreate9"));
             if (pDirect3DCreate9 == NULL)
             {
              ATLASSERT(0);
             }
             else
             {
              IDirect3D9 * pD3D = pDirect3DCreate9(D3D_SDK_VERSION);
              if (pD3D == NULL)
              {
               ATLASSERT(0);
              }
             }

            按照這個(gè)思路已經(jīng)可以寫出通用的宏了。
            template <typename FuncType>
            FuncType __forceinline GetModuleFunc(HMODULE hModule, LPCSTR lpProcName)
            {
             FuncType fun = reinterpret_cast<FuncType>(GetProcAddress(hModule, lpProcName));
             return fun;
            }

            #define CallModuleFunc(Module, ProcName, Args) (GetModuleFunc<BOOST_TYPEOF(ProcName) *>(Module, #ProcName))?((GetModuleFunc<BOOST_TYPEOF(ProcName) *>(Module, #ProcName)) Args) : E_FAIL

            可惜的是boost::typeof的代碼我完全看不懂……學(xué)習(xí)C++的路漫漫其修遠(yuǎn)兮……

            posted @ 2008-11-12 09:11 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(442) | 評(píng)論 (1)編輯 收藏
            唉,我每天的業(yè)余時(shí)間都是被劈成兩半的,每一半只有兩個(gè)小時(shí)。
            今天晚間的成果是:成功的用動(dòng)態(tài)鏈接調(diào)用了DX10的函數(shù),鏈接失敗的情況程序也可以通過(guò)返回值給予一定的提示。
            通過(guò)這種方法拿到了IDXGIFactory接口,然后列舉了下我的顯卡和顯示輸出,還有在B8G8R8A8顯示模式下的所有可用分辨率和刷新率(PS: 我現(xiàn)在是單顯卡輸出兩個(gè)顯示器的。)

            運(yùn)行結(jié)果:
            Default graphics library is: Direct3D 10 Library
            Adapter NVIDIA GeForce 8600M GT    :
                    VendorId: 4318, DeviceId: 1031, SubSysId: 16321043, Revision: 161
                    DedicatedVideoMemory: 241M, DedicatedSystemMemory: 0M, SharedSystemMemor
            y: 767M
            Outputs:
                    \\.\DISPLAY1: 1024 * 768
                    Available display mode for B8G8R8A8_UNORM:
                            640*480 Refresh rate: 60Hz
                            640*480 Refresh rate: 70Hz
                            640*480 Refresh rate: 72Hz
                            640*480 Refresh rate: 75Hz
                            800*600 Refresh rate: 56Hz
                            800*600 Refresh rate: 60Hz
                            800*600 Refresh rate: 70Hz
                            800*600 Refresh rate: 72Hz
                            800*600 Refresh rate: 75Hz
                            1024*768 Refresh rate: 60Hz
                            1024*768 Refresh rate: 70Hz
                            1024*768 Refresh rate: 72Hz
                            1024*768 Refresh rate: 75Hz
                    \\.\DISPLAY2: 1280 * 800
                    Available display mode for B8G8R8A8_UNORM:
                            640*480 Refresh rate: 60Hz
                            640*480 Refresh rate: 60Hz
                            800*600 Refresh rate: 60Hz
                            800*600 Refresh rate: 60Hz
                            1024*768 Refresh rate: 60Hz
                            1024*768 Refresh rate: 60Hz
                            1280*800 Refresh rate: 60Hz

            目前依然是連窗口和圖形界面都沒(méi)有的-___,-
            慢慢來(lái),因?yàn)檫@些基礎(chǔ)的東西也是很重要的。
            另外,列舉顯示卡和顯示器的代碼暫時(shí)沒(méi)有返回給上層,主要是編碼一個(gè)枚舉類型還是挺耗時(shí)間的。暫時(shí)用硬編碼解決。
            posted @ 2008-11-12 00:51 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(327) | 評(píng)論 (0)編輯 收藏
             

            格子里的故事簡(jiǎn)介

             

            分內(nèi)核和外在兩部分來(lái)說(shuō)。先說(shuō)內(nèi)核的東西,也就是游戲的技術(shù)實(shí)現(xiàn)目標(biāo)。

            基于傳統(tǒng)的俄羅斯方塊游戲,在其基礎(chǔ)上設(shè)置游戲障礙及我們的游戲要求也就是過(guò)關(guān)條件。這個(gè)游戲的過(guò)關(guān)條件就是在我們指定的區(qū)域用同一種顏色填滿,而且指定的區(qū)域外必須是其他顏色的色塊,或背景或另外一種顏色。圖示說(shuō)明:

            采用俄羅斯方塊的經(jīng)典7元素,再配上顏色極為14種元素。目標(biāo)填充區(qū)域需要全被同色格子占據(jù),并且不能有同色突出,如圖反應(yīng)的兩種情況。大致就是這個(gè)意思。

             

             

             

             

             

            下面說(shuō)外在部分,初步設(shè)想把它設(shè)計(jì)為一棟大樓里發(fā)生的事情。背景是晚上的某棟大樓,M*N個(gè)格子構(gòu)成一關(guān),在外在表現(xiàn)為M*N個(gè)房間構(gòu)成一個(gè)樓層段。過(guò)關(guān)鏡頭向上走,也就是移向更上的一個(gè)樓層段。最開(kāi)始的時(shí)候背景只有目標(biāo)填充區(qū)域有微微光亮,周圍的房間偏黑,然后14種元素以望遠(yuǎn)鏡的鏡片形式下落,穩(wěn)定后它對(duì)應(yīng)的房間里就會(huì)變得更亮,如果這個(gè)房間屬于目標(biāo)填充區(qū)域,那么房間被點(diǎn)亮,我們可以透過(guò)鏡片看到里面發(fā)生的一個(gè)gif的故事,如果不屬于目標(biāo)填充區(qū)域,那么會(huì)顯示一個(gè)拉上窗簾的gif。游戲過(guò)關(guān)之后鏡頭移動(dòng)到更上層的一個(gè)樓層段,重復(fù)。但是每個(gè)樓層段每個(gè)目標(biāo)填充區(qū)域所包含的房間里的gif是不一樣的,也正是由這些不同來(lái)反映各個(gè)階層或者說(shuō)生活中的各個(gè)層次的人們的生存形態(tài)。格子里的故事這個(gè)題目也取自這里,同時(shí)想要表達(dá)的還有一種我們一直被禁錮的意思,活著的時(shí)候是在大大的盒子里,死后實(shí)在小小的盒子里。當(dāng)然這些都不要告訴玩家~~,你也可以不這么認(rèn)為。但這些確實(shí)是我想到的。而且我覺(jué)得游戲永遠(yuǎn)不只有一個(gè)目的,它畢竟是一種表達(dá)手段。哦,扯遠(yuǎn)了。下面跟上游戲進(jìn)度和工作分配。

             

            11.12——11.16 第一階段游戲功能實(shí)現(xiàn),包括基本俄羅斯方塊功能實(shí)現(xiàn)

            11.17          成果進(jìn)度匯報(bào)討論

            11.17——11.23 第二階段游戲功能實(shí)現(xiàn),包括特定區(qū)域顏色判定

            11.24           成果進(jìn)度匯報(bào)討論

            11.25——11.30 第三階段游戲功能實(shí)現(xiàn),包括選關(guān)、存檔功能實(shí)現(xiàn)

            12.1             成果進(jìn)度匯報(bào)討論

            12.1——12.7    后期測(cè)試優(yōu)化,包括圖片和聲音導(dǎo)入

            12.8             發(fā)布。

             

            以上責(zé)任人:PureMilk、糖糖、朱波

            Gif圖片制作:肖赤赤

            posted @ 2008-11-11 21:47 正牌的天地之靈和他的徒兒們肖赫_王婷婷_王冠_鄭燚_孫婷 閱讀(147) | 評(píng)論 (0)編輯 收藏
            僅列出標(biāo)題
            共15頁(yè): 1 2 3 4 5 6 7 8 9 Last 

            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            常用鏈接

            留言簿(6)

            隨筆分類(149)

            隨筆檔案(150)

            同道中人

            搜索

            •  

            積分與排名

            • 積分 - 49237
            • 排名 - 464

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            日本欧美国产精品第一页久久| 亚洲国产精品无码久久SM| 久久国产色AV免费看| 国产成人精品免费久久久久| 一本久久a久久精品综合夜夜 | 亚洲&#228;v永久无码精品天堂久久 | 国内精品人妻无码久久久影院导航| 久久免费99精品国产自在现线| 亚洲精品WWW久久久久久| 四虎影视久久久免费| 东京热TOKYO综合久久精品| 无码任你躁久久久久久老妇| 久久久国产精品福利免费| 久久久久久久久久久精品尤物| 国产A级毛片久久久精品毛片| 2021国内久久精品| 国产成人久久激情91| 99久久综合国产精品免费| 久久精品女人天堂AV麻| 久久精品国产只有精品2020| 亚洲精品无码久久久久| 久久久久亚洲av综合波多野结衣| 国产高清美女一级a毛片久久w| 狠狠精品久久久无码中文字幕| 亚洲乱亚洲乱淫久久| 久久精品亚洲一区二区三区浴池| 午夜视频久久久久一区 | 久久香蕉超碰97国产精品| 国产午夜精品久久久久九九| 久久国产成人精品麻豆| 激情伊人五月天久久综合| 日本久久久久亚洲中字幕| 久久狠狠爱亚洲综合影院| 亚洲国产另类久久久精品| 中文字幕人妻色偷偷久久| 久久WWW免费人成一看片| 一本色道久久HEZYO无码| 亚洲精品国产字幕久久不卡| 久久国产乱子伦免费精品| 久久AV高清无码| 久久国产福利免费|