• <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>

            維爾福

            游戲開發者
            隨筆 - 26, 文章 - 0, 評論 - 10, 引用 - 0
            數據加載中……

            2012年3月9日

            D3D資源管理

            摘要

            受管貼圖(Managed textures,也就是我們通常所謂的“自動管理貼圖”),在DX6中首次被引入,經過一系列的改進和增強,在DX9中自動管理的資源類型增加到貼圖,頂點緩沖,頂點索引緩沖,所有這些資源使用統一的公共接口。通過使用D3D資源管理器,應用程序可以輕松的處理設備丟失、處理稍微過量的顯存使用。

            有時開發者在使用受管資源會遇到一些困難,這部分歸咎與系統的抽象特性。在大多數情況下使用受管對象是不錯的選擇,但有時出于性能考慮也會使用非托管資源。這篇文章將討論一般情況下如何處理資源,受管與非受管資源的行為差別。

             

            內容

            l         顯示內存

            l         受管資源

            l         驅動管制資源

            l         默認資源

            l         系統內存資源

            l         一般性的建議

             

            顯示內存

            為了使得資源可以利用顯存,GPU需要通過內存訪問定位他。GPU訪問(Local video memory)顯存是非常高效的,并且某些資源(例如RenderTarget,深度、模板緩沖)必須在本地顯存(Local video memory)定位。由于AGP的出現,GPU可以直接訪問部分系統內存,而這部分系統內存區域就是所謂的非本地顯存(non-local video memory),當然這部分內存(顯存)也是不能挪做它用的。非本地顯存僅能被GPU訪問,與訪問本地顯存相比,其效率低一些。需要明確的是,所有AGP內存在設備丟失時都會失效,都需要在恢復他們。

            一些集成顯卡使用統一內存結構(Unified Memory Architecture),這樣主內存可以被系統任何一個設備尋址。D3D支持UMA而不需要修改任何代碼,這樣我們把系統內存配置為本地顯存,硬件確保資源的定位就像傳統的結構一樣進行工作。

            受管資源

            大部分資源應該使用POOL_MANAGED方式創建,即受管資源。所有受管資源將被創建在系統內存,在需要的時候復制到顯存。當發生設備丟失時會自動copy系統內存到顯存。既然不是所有受管資源都需要一次送入顯存,這樣你可以提交超過渲染每幀所必須使用的最小內存容量,但是這樣會使得大量顯存內容因為分頁操作而寫到磁盤上,這是非常耗時的。這也是為什么恢復設備如此耗時,因為需要將大量磁盤數據復制到顯存。

            DX會為每份資源在最后一次使用時加上時間戳,這樣當顯存分配失敗時,它會釋放那些最近最少使用的資源(LRU算法)。使用SetPriority函數可以標記資源的重要程度,重要的資源優于時間戳的判斷,所以那些比較常用的資源應該設置高優先級,而不用擔心因為時間戳過期而導致資源被釋放。在DX9中,驅動程序提供的顯存管理信息是非常有限的,運行時可能不得不清除大量資源用于分配足夠的內存。設置適合的優先級是非常有用的,這樣D3D不會清除那些馬上又需要使用的資源。應用程序可以強制調用EvictManagedResources清除所有受管資源,但是如果下一幀又需要重新加載這些資源,這將是非常耗時的,不過這個函數在那些場景明顯需要改變(比如進入下一個關卡)的情況下,還是非常有用的。

            如果“當前幀”內需要非常多資源用于渲染,這將是件麻煩的事情,用前面的LRU方式調度資源效率就不太理想了,這個時候使用MRU資源調度方式取代,即優先清理那些比較活躍的資源。注意,這里“當前幀”的概念是指BeginSceneEndScene之間的需要渲染的幀。

            開發人員如果想得到關于受管資源的更多信息,可以通過IDirect3DQuery9接口查詢,但是這個接口僅能用于調試模式(debug runtimes),在發布版本中,應用程序不能依靠改接口的信息做任何假定。

            了解資源管理如何工作可以幫助我們調試、調整程序,重要的是應用程序不要太過依賴當前的運行庫(或者驅動程序)的資源管理方式,驅動更新有可能導致其行為發生變化,將來的D3D將會有套久經考驗的資源管理方式。

            驅動程序管理的資源

            D3D驅動可以自由的實現“由驅動管理貼圖”的特性,通過D3DCAPS2_CANMANAGERESOURCE段可以查詢硬件驅動是否支持這個特性,這樣驅動將代替D3D運行庫管理資源。對于級少數的硬件是支持這個特性的,對于大多數硬件則不盡相同,你可以咨詢你的產品提供商獲得這方面信息。一般情況下,你可是使用D3DCREATE_DISABLE_DRIVER_MANAGEMENT方式創建設備,這樣將由D3D運行庫來管理資源。

            缺省資源管理(非受管資源)

            雖然受管資源非常簡單,容易使用,高效,但是有時我們希望直接往顯存里寫東西,這種情況下我們需要使用POOL_DEFAULT方式創建資源。使用這種方式會增加程序的復雜性,代碼需要應付所有設備丟失的情況,并需要謹慎考慮何時復制數據到顯存。錯誤的指定USAGE_WRITEONLY標記或者鎖定渲染目標(Render Target)將嚴重影響性能。

            鎖定POOL_DEFAULT類型的資源很可能導致GPU停止運轉,這與POOL_MANAGED類型的資源是不同的,除非使用一些特性的指示標記。根據資源當前的位置不同,鎖定后得到的指針也不相同,可能是一塊臨時的系統內存,也可能直接指向AGP內存。如果是臨時的系統內存,Unlock后將把這段數據送入顯存,這是因為如果顯卡資源不是只寫的(write-only),Lock的時候數據將不得不被送入一段臨時的內存;如果指向的AGP內存區域,臨時的拷貝是可以避免的,但是cache的行為將會降低性能。

            為了避免在寫入一整行數據(a full cache line of data)進入AGP內存區導致write-combing性能下降(一般是由于發生了一次讀寫周期),順序的訪問AGP內存是推薦的做法,如果你的程序需要隨機的訪問AGP內存,而你又不希望使用受管資源,那么你可以使用系統內存作為替代方案,這樣當你生成了數據之后,可以lock后拷貝,這樣不會帶來太大的性能損失,這里的性能損失一般是由緩沖的“寫搜索”操作引起。(注,這里關于詞匯cache write-combing譯者也不知道對應的中文含義,只能按照字面意思翻譯,見諒)

            對于某些類型的資源,使用LOCK_NOOVERWRITE標記會使添加數據比較有效率,但是多次的LockUnlock同一資源還是需要盡量避免的,適當的利用多種不同的鎖定標記對于效率優化使非常重要的,就像填充鎖定內存區域最好使用cache友好的(cache-friendly)數據訪問方式一樣。

            受管資源和缺省資源混合使用

            受管資源與非受管資源的混合分配使用可能導致顯存碎塊,并且擾亂受管資源使用的內存區域。最好在使用受管資源前使用非受管資源,或者使用受管資源后使用EvictManagedResources函數清除那些受管資源再使用非受管資源。記住,所有非受管資源都會常駐顯存,這樣其他內存需求就不能使用了。

            注意,與以往的DX版本不同,在顯存缺乏時,如果分配非受管資源失敗,DX9會自動清除受管資源,這有可能導致潛在的顯存碎塊,甚至把資源放入不適當的地方(比如非本地內存的靜態貼圖區)。所以,最好在使用受管資源之前分配全部的非受管資源。

            動態缺省資源

            如果數據需要很高頻率更新,那最好使用非受管資源,并使用USAGE_DYNAMIC標記,這樣驅動會決定最適合的地方放置這些需要經常更新的數據。這通常意味著放置在非本地顯存中,這樣對于GPU來說,訪問速度可能相對要慢一些。而對于UMA架構,驅動將會選擇CPU訪問效率較高的特殊地方放置這些數據。

            這種用法(動態缺省資源類型)一般用于軟蒙皮和基于CPU計算的粒子系統的頂點/頂點索引的Buffer填充,LOCK_DISCARD標記可以保證資源仍被使用的時候,鎖定操作不會導致系統停止暫停工作。在這種情況下,使用受管資源會更新系統內存,然后拷貝到顯存。對于系統的非本地內存,多余拷貝是不需要的。

            標準的貼圖是不允許鎖定的,僅僅可以通過UpdateSurfaceUpdateTexture函數更新。一些系統支持動態貼圖,它可以通過配合使用LOCK_DISCARD標記進行鎖定,但這需要檢查D3DCAPS2_DYNAMICTEXTURES硬件能力。對于高動態貼圖(如視頻、程序生成貼圖),最好使用非受管資源和系統內存資源,并且通過UpdateTexture函數更新貼圖。對于高頻度的粒子更新,UpdateTexture函數可能是最好的選擇。

            在有限的總線-內存帶寬下,靜態貼圖資源應該使用POOL_MANAGED方式,這樣可以確保它最好的利用本地顯存,并有較好的效率。對于“半靜態”資源,使用動態類型資源有時會獲得更好的效率。

            系統內存資源

            資源可以使用POOL_SYSTEMMEM方式創建。但他們不能用于圖形管線,他們僅能做為源數據用于更新POOL_DEFAULT類型的資源,這是通過UpdateSurfaceUpdateTexture函數完成的。他們的鎖定操作也非常簡單,盡管他們同樣可能因為前面提到的原因導致系統停止運轉。

            雖然是在系統內存中創建資源,但POOL_SYSTEMMEM所支持的資源格式和能力(比如最大尺寸)是受硬件、驅動限制的。同樣是在系統內存中創建資源的POOL_SCRATCH則沒有這方面限制,它支持所有格式和能力,但設備卻不能直接訪問它。SCRATCH類型資源一般用于內容創建工具。

            一般性的建議

            了解資源管理的技術實現細節對達成你的程序的性能目標是有非常大的幫助的,規劃你的資源如何交給D3D并設計好的結構以便能及時加載必要的數據是一件非常復雜的工作,為此我們給出一些好的實踐經驗做為一般性的原則:

            l         預處理你的資源。不要將耗時的加載資源、資源轉換、資源優化丟給用戶去做,雖然這樣便于開發,但確讓用戶無法忍受。預處理這些資源可以加快加載,更快使用,你的用戶也會發現你的程序跑的更快了。

            l         避免在每幀創建過多的資源。對于過多的資源加載,可以把他們分到多幀里完成或者不要急于釋放那些暫時不用的資源。

            l         確保在一幀結束時已經斷開了所有資源通道。(比如,頂點流,texture stages,頂點索引)。

            l         對于貼圖,建議使用壓縮貼圖(DXTn)格式,建議使用mip-map或者將小貼圖拼接為大貼圖使用。

            l         建議使用頂點索引,這將減少數據傳輸量。

            l         對于過渡的優化資源管理是需要謹慎的。如果你的程序過分依賴驅動、硬件和操作系統的某些特征,那么這些程序、硬件的修改將會導致潛在的性能問題。
            http://www.shnenglu.com/richardhe/articles/69204.html

            posted @ 2012-03-09 15:33 weierfu 閱讀(415) | 評論 (0)編輯 收藏

            2010年11月7日

            ubuntu 安裝smb共享文件夾

                #sudo apt-get install samba
                #sudo apt-get install smbfs

                安裝完畢,從菜單進入 系統 -> 系統管理 -> 共享的文件夾,打開如下圖所示的界面:

               

            ubuntu 安裝smb共享文件夾 - 仙人掌 - 聆聽寧靜的聲音

                添加準備共享的文件夾。

                1. XP匿名訪問Ubuntu共享文件
                使用samba不進行任何設置時,winXP機器可以連接到Ubuntu機器但提示輸入用戶名密碼,此時不論輸入什么都不能訪問,要實現匿名訪問需要做如下設置:

                1) 修改配置文件smb.conf:
                   sudo vim /etc/samba/smb.conf
                   將security=user那一行前的注釋符";"去掉,然后把user改為share。
                2) 重啟samba:
                   #sudo /etc/init.d/samba restart

                2. WinXP下用用戶名和密碼訪問Ubuntu共享文件
                下面我們來共享群組可讀寫文件夾,假設你要共享的文件夾為: /home/ray/share首先創建這個文件夾
                代碼:
                   #mkdir /home/ray/share
                   #chmod 777 /home/ray/share

                備份并編輯smb.conf允許網絡用戶訪問
                代碼:
                sudo cp /etc/samba/smb.conf /etc/samba/smb.conf_backup
                sudo gedit /etc/samba/smb.conf

                搜尋這一行文字
                代碼:
                ; security = user

                用下面這幾行取代
                代碼:
                security = user
                username map = /etc/samba/smbusers

                將下列幾行代碼添加到文件的最后面,假設允許訪問的用戶為:newsfan。而文件夾的共享名為 Share
                代碼:
                [Share]
                comment = Shared Folder with username and password
                path = /home/ray/share
                public = yes
                writable = yes
                valid users = newsfan
                create mask = 0700
                directory mask = 0700
                force user = nobody
                force group = nogroup
                available = yes
                browseable = yes

                然后順便把這里改一下,找到[global]把 workgroup = MSHOME 改成
                代碼:
                workgroup = WORKGROUP
                display charset = UTF-8
                unix charset = UTF-8
                dos charset = cp936

                后面的三行是為了防止出現中文目錄亂碼的情況。其中根據你的local,UTF-8 有可能需要改成 cp936。自己看著辦吧?,F在要添加newsfan這個網絡訪問帳戶。如果系統中當前沒有這個帳戶,那么
                代碼:
                sudo useradd newsfan

                要注意,上面只是增加了newsfan這個用戶,卻沒有給用戶賦予本機登錄密碼。所以這個用戶將只能從遠程訪問,不能從本機登錄。而且samba的登錄密碼可以和本機登錄密碼不一樣?,F在要新增網絡使用者的帳號:
                代碼:
                #sudo smbpasswd -a newsfan
                #sudo gedit /etc/samba/smbusers

                在新建立的文件內加入下面這一行并保存
                代碼:
                newsfan = “network username”

                如果將來需要更改newsfan的網絡訪問密碼,也用這個命令更改
                代碼:
                #sudo smbpasswd -a newsfan

                刪除網絡使用者的帳號的命令把上面的 -a 改成 -x
                代碼:
                #sudo testparm
                #sudo /etc/init.d/samba restart

            posted @ 2010-11-07 23:46 weierfu 閱讀(1259) | 評論 (0)編輯 收藏

            Ubuntu 下配置 C/C++ 開發環境

            1、配置GCC

              其實剛裝好的系統中已經有GCC了,但是這個GCC什么文件都不能編譯,因為沒有一些必須的頭文件,所以要安裝build-essential這個軟件包,安裝了這個包會自動安裝上g++,libc6-dev,linux-libc-dev,libstdc++6-4.1-dev等一些必須的軟件和頭文件的庫。

            輸入命令

            Ubuntu命令
            1. sudo apt-get install build-essential  

            安裝完成后寫一個 C 語言程序 hello.c 測試一下

            C 代碼
            1. #include<stdio.h>   
            2. int main()   
            3. {   
            4.    printf("Hello Ubuntu!\n");   
            5.    return 0;   
            6. }  

            在終端輸入

            Ubuntu命令
            1. $ gcc hello.c -o hello   
            2. $ ./hello  

            顯示 
            Hello Ubuntu!
            這樣,C 語言編譯器就安裝成功了!

            2、安裝 GTK 環境

            Ubuntu命令
            1. sudo apt-get install gnome-core-devel   
            2. sudo apt-get install libglib2.0-doc libgtk2.0-doc   
            3. sudo apt-get install devhelp   
            4. sudo apt-get install glade-gnome glade-common glade-doc  

            這樣,就可以在 Ubuntu 下進行 C/C++ 程序的圖形界面設計了。

            http://www.baiba.net/blog/?action=show&id=56


            安裝完成后我們也同樣做個測試程序
            代碼:
            #include<gtk/gtk.h>
            void hello(GtkWidget *widget,gpointer data)
            {
            g_print("Hello Ubuntu!\n");
            }
            gint delete_event(GtkWidget *widget,GdkEvent *event,gpointer data)
            {
            g_print ("delete event occurred\n");
            return(TRUE);
            }
            void destroy(GtkWidget *widget,gpointer data)
            {
            gtk_main_quit();
            }
            int main( int argc, char *argv[] )
            {
            GtkWidget *window;
            GtkWidget *button;
            gtk_init (&argc, &argv);
            window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
            gtk_signal_connect (GTK_OBJECT(window),"delete_event",GTK_SIGNAL_FUNC(delete_event),NULL);
            gtk_signal_connect (GTK_OBJECT (window), "destroy",GTK_SIGNAL_FUNC (destroy), NULL);
            gtk_container_set_border_width (GTK_CONTAINER (window), 10);
            button = gtk_button_new_with_label ("Hello Ubuntu!");
            gtk_signal_connect (GTK_OBJECT (button), "clicked",GTK_SIGNAL_FUNC (hello), NULL);
            gtk_signal_connect_object (GTK_OBJECT (button), "clicked",GTK_SIGNAL_FUNC (gtk_widget_destroy),GTK_OBJECT (window));
            gtk_container_add (GTK_CONTAINER (window), button);
            gtk_widget_show (button);
            gtk_widget_show (window);   /*顯示一個窗口*/
            gtk_main();   /*進入主循環*/
            return(0);
            }


            用下面命令編譯運行
            代碼:
            $ gcc gtkhello.c -o gtktest `pkg-config --cflags --libs gtk+-2.0`
            $ ./gtktest

            會顯示一個帶有一個按鈕的窗口,點擊按鈕以后窗口關閉,命令行顯示Hello Ubuntu!


            附件:
            文件注釋: GTK測試
            s2.png
            s2.png [ 4.79 KiB | 被瀏覽 34134 次 ] 
            文件注釋: C語言測試
            s1.png

            posted @ 2010-11-07 23:26 weierfu 閱讀(404) | 評論 (0)編輯 收藏

            Ubuntu安裝OpenSSH

            Ubuntu缺省沒有安裝SSH Server,使用以下命令安裝: 

            sudo apt-get install openssh-server openssh-client 

            不過Ubuntu缺省已經安裝了ssh client。 

            可以通過編輯 /etc/ssh/sshd_config 文件來配置 OpenSSH 
            udo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original 
            sudo chmod a-w /etc/ssh/sshd_config.original 

            配置完成后重起: 
            sudo /etc/init.d/ssh restart

            posted @ 2010-11-07 23:19 weierfu 閱讀(526) | 評論 (0)編輯 收藏

            2010年10月7日

            【圖】Ogre渲染系統


            posted @ 2010-10-07 02:11 weierfu 閱讀(246) | 評論 (0)編輯 收藏

            2010年5月3日

            人際交往的3大定律

            人際交往的3大定律

            http://www.sina.com.cn  2010年04月30日 11:52  藍心心理網
            人際交往的3大定律
            人際交往的3大定律

              人之不同, 一如其面。各種不同的人都有適合自己的交往方式和自己的交往原則,不論其本人是否能夠意識得到。所以,如果想找出一種放之四海而皆準的、和任何脾氣任何性格的人交往都適用的程序,就像劇本一樣,先說哪句話,后說哪句話,什么話應該配什么動作,什么心情配什么表情,這肯定是不現實的。

              但是,人與人之間的交往,可以有一種規則,讓自己和他人溝通得更加順暢,更加自如。根據多年咨詢的經驗,總結出一種心理調適的新思路,姑且稱作人際交往的3大定律。

              定律一:“每一個人都比你累”

              它的核心是這樣兩點,一是在于你能否體諒到,別人的勞動是一種辛苦;二是你能否理解別人對你的態度。

              比如夫妻之間,同樣是下班之后,丈夫往往寧可倒在沙發里看電視,也不愿意把家里的東西收拾整齊,妻子卻看不慣屋子里亂七八糟的樣子,就要自己收拾。但是呢,妻子就難免會心里埋怨:我忙了一天,回到家里還要在這里收拾,你居然在沙發上賴著看電視,怎么就不說來幫一把手呢?可是丈夫也在想了,一天上班我累死累活的,到了家我就沒有一點勁兒了,哪像你上班那么輕閑。要不然,怎么還有精力收拾屋子。要是兩人都這么想,看著吧,過不了多大會兒,肯定吵起來。

              可是,如果兩人都能換一種思路,又會是什么情況呢?

              妻子會覺得,他都辛苦一天了,每天上班這么累,還是讓他好好休息一會兒吧。家嘛,家不就是讓他休息放松的地方嘛。丈夫會想到,她上了一天班,下班回家還要收拾屋子,真是辛苦。這么著吧,反正我收拾過的屋子她也看不上,干脆,我去廚房把飯熱了吧。

              在做家務的不經意中,夫妻間就產生了一種默契和溫馨。

              到父母家聚會,如果想起這一條,你會主動干許多事兒,而且不至于和自己的親人心生芥蒂;和朋友一齊出游,如果心里常想著這句話,你就會興高采烈滿心輕松地成為一個受朋友們歡迎的人。

              明白了第一定律的含義,自然會容易理解下面兩個推論:

              推論一:如果有人能體諒你的累,這個人必定愛護你,心疼你;如果有人愿意替你累,替你辛苦,說明這個人愛你。

              推論二:如果你能體會到其他人的累,體會到其他人的辛苦和不容易,說明你是個善良的人;如果你愿意去替別人累,去替別人承擔辛苦,說明你愛這個人。

              定律二:每一個人都比你干得活兒多掙得錢少

              定律二適用在你的日常工作之中,或者說,它或許應該是你在通過自己努力獲得相應的物質或精神報酬時的一條準則。

              相信你在工作中肯定會有對別人羨慕的時候:“還是張主任的工作輕松,每天看他不是請客吃飯,就是打球鍛煉,上班的時候還可以一個人關在辦公室里想干什么就干什么,錢也不少拿,多好?。?#8221;可是,你想過沒有,你羨慕的對象會不會也在心里面羨慕你呢?

              說不定哪一天,你就會聽到張主任親切地和你嘮嘮家常:“小劉啊,還是你們舒服啊,我每天都要陪別人吃飯,連和家里人一起吃晚飯的時間都沒有;上班吧,一個人在辦公室,也沒有人說說話,不像你們還可以說說笑笑的。哎,工作壓力太大了。真羨慕你們啊,要是跟你的工作換一換,我就知足了。”你會不會覺得這是領導在貓哭耗子假慈悲呢?其實不然,這絕對是對方的真實感受。

              心理學研究發現,人們都有一種把自己的工作和付出以及別人的獲得和收入看得比實際情況要多,把自己的獲得和收入以及別人的工作和付出看得比實際情況要少的心理趨勢。

              每個人都是一樣,會覺得自己的付出太多,自己的獲得太少,于是由此而生出許多的不滿或是抱怨。其實,想想看,假如每個人都這么想的時候,你的想法與別人不同,你覺得自己的付出相對少,別人的付出比較多,那么,你自然就會不斷地自勉,還會真誠地對待別人。

              第二定律也有兩條推論:

              推論一:理解別人干得活多,或者理解別人收入少,都能使別人感動,而且惠而不費。

              推論二:不要再抱怨自己的收入。因為,當你抱怨的時候,你肯定沒有在工作。

              定律三:每一個人都沒有義務幫助你

              這句話聽起來十分冷酷,難道我們身邊的每個人都是這樣冷漠嗎?在我們需要別人援手的時候,我們竟然那么孤立無援?

              事實上并不是這個樣子,這個世界上永遠不缺乏好心人和熱心人,但是有些時候,可能你所遇到的困難沒有被有能力幫助你的好心人看到而已。

              前些年,某個城市發生了這樣一件事兒:一個小姑娘上學途中被人撞倒,傷得很嚴重,圍觀的人群中走出一個小伙子,說愿意把姑娘送到醫院,但要求小姑娘先出一些辛苦費。小姑娘拿出身上所有的零錢還是不夠,答應對方只要通知了自己的父母,肯定會把錢給他。趕到醫院的父母在把孩子送進手術室后轉身要付錢,小伙子不僅不要,還把零花錢還給了孩子的父母。原來他只是用這種方法證明自己不是肇事者而已。這個小伙子的擔心也正反映了一般人的看法:要不是你撞了孩子,你干嗎要把孩子送到醫院來呢?你沒有這個義務???

              與不相識的人交往,人們都會有一種戒備心理,一般地,禮下于人則必有所求,素昧平生那就應該無功不受祿。對于沒來由地熱心幫助自己的人,有時候難免心里會問個為什么。這也就造成了每個人都充滿熱心但卻擔心被拒絕而表現的冷漠。如果你能理解大多數人的這種心理,你就會理解別人為什么沒有對你伸出援助之手;如果你相信這個世界早晚會了解你的為人,那么你在出手助人的時候自然落落大方。

              第三定律的推論是:

              推論一:如果有人在沒有義務的情況下幫助你,那么,這個家伙,可以做,朋友。

              推論二:如果你幫助了別人,心里的快樂就是最大的酬謝,不要計較對方是否會知道,會記住,或者會回報。

              其實,第一定律說的是家庭和朋友之間的相處之道,第二定律說的是在單位的工作態度和處事方法,第三定律則是講與陌生人之間的應對。

              很可能,熱情的你會覺得這三條定律看上去太冷,太沒有人情味兒,可是,做人,固然要熱血酬知己,也應該冷眼觀世情。(藍心網)

            posted @ 2010-05-03 00:27 weierfu 閱讀(415) | 評論 (0)編輯 收藏

            2009年11月26日

            DX的渲染管道圖


            http://p.blog.csdn.net/images/p_blog_csdn_net/yanonsoftware/288542/o_pipeline-9.0.png

            posted @ 2009-11-26 12:21 weierfu 閱讀(336) | 評論 (0)編輯 收藏

            2009年9月12日

            模型編輯器1

            posted @ 2009-09-12 12:47 weierfu 閱讀(248) | 評論 (0)編輯 收藏

            2009年1月5日

            【原創】貼幾張最近的工作文檔








            未完。。。

            posted @ 2009-01-05 16:53 weierfu 閱讀(1282) | 評論 (3)編輯 收藏

            2008年12月28日

            【原創】【OGRE人門教程】OGRE源碼成功編譯記081227

             

            OGRE源碼成功編譯記081227

            Made by welflau

            1 下載最新的OGRE源碼包1.6.0

             

             2 直接解壓到D盤根目錄下


             

            3 打開sln 我裝是的VS2005

             

            打開后

            4 編譯生成OgreMain


               

            5 會出錯,還沒下Dependencies

            因為鏈接器中顯示了有附加庫



             

            6 下載ogre-dependencies 注意要下載最新版

            下載地址:

            http://sourceforge.net/project/showfiles.php?group_id=2997




            下一個頁面選擇


             

            7 解壓到D:\ogre-l.6.0\ogre




             

            解壓完后,再重新編譯生成

            OgreMain編譯得要一段時間

            而且編譯后Obj文件有1.6G左右的大小,所以編譯之前要保證你的硬盤有足夠的空間

            【注意】還有一個Samples文件夾也要覆蓋到Ogre目錄下



             

            里面是執行時所需的dll文件

            終于編譯完后,不過還是有錯,少文件

             

            我去 Dependencies\include\zzip 目錄下看的確沒這個文件

            我又下了Dependencies其他版本OgreDependencies_VC8SP1_Eihort_20070323

            發現有該文件



            8
            可能是版本不對再到OGRE官方網站
            http://www.ogre3d.org/index.php?option=com_content&task=view&id=412&Itemid=132


             

            下載紅框所示那個包:OgreDependencies_VC8SP1_Eihort_20071227.zip

            解壓到OGRE目錄D:\ogre-l.6.0\ogre下到重新覆蓋一遍

            再編譯生成

            終于成功生成



            生成的libdll如下圖



             

            其中OgreMain生成的目標文件有1.53G


             

            【游戲開發】【原創教程連載】WelfGame【第7講】(08120803按鈕顏色可控)

            【游戲開發】【原創教程連載】WelfGame【第6講】(08120702加入皮膚對話框)

            【游戲開發】【原創教程連載】WelfGame【第5講】(WelfGame(08120302三維操作)

            【游戲開發】【原創教程連載】WelfGame【第4講】(08120301導入三維數據文件 .x)

            【游戲開發】WelfGame【第3講】(08120203圖像透明及顏色)

            【游戲開發】WelfGame【第2講】(08120202繪制文字和圖像)

            【游戲開發】原創:我的游戲開發學習過程(連載中...)(第一講)

            posted @ 2008-12-28 17:54 weierfu 閱讀(4943) | 評論 (7)編輯 收藏

            久久e热在这里只有国产中文精品99 | 亚洲国产一成人久久精品| 18禁黄久久久AAA片| 人妻无码中文久久久久专区| 国产精品无码久久久久久| 66精品综合久久久久久久| 久久婷婷色香五月综合激情| 热re99久久6国产精品免费| 国内精品久久久久久久影视麻豆 | 97超级碰碰碰久久久久| 国产香蕉97碰碰久久人人| 少妇人妻综合久久中文字幕| 久久综合狠狠色综合伊人| 久久久无码精品亚洲日韩蜜臀浪潮 | 狼狼综合久久久久综合网| 精品久久久久久无码人妻热| 日日躁夜夜躁狠狠久久AV| 久久人人爽人人爽AV片| 精品国产VA久久久久久久冰| 性做久久久久久久久| 情人伊人久久综合亚洲| 少妇久久久久久被弄高潮| 欧美与黑人午夜性猛交久久久 | 香蕉久久夜色精品国产尤物| 伊人久久综合热线大杳蕉下载| 精品熟女少妇AV免费久久| 性欧美大战久久久久久久 | 国产成人精品三上悠亚久久| 久久国产三级无码一区二区 | 久久午夜无码鲁丝片午夜精品| 99久久99这里只有免费的精品| 欧美伊人久久大香线蕉综合| 人妻无码久久精品| 久久精品?ⅴ无码中文字幕| 91精品婷婷国产综合久久| 97精品伊人久久大香线蕉app| 亚洲AV无码一区东京热久久| 国产成人久久精品一区二区三区 | 亚洲国产精品无码久久青草| 久久国产精品免费一区| 久久九九久精品国产|