摘要
受管貼圖(Managed textures,也就是我們通常所謂的“自動(dòng)管理貼圖”),在DX6中首次被引入,經(jīng)過一系列的改進(jìn)和增強(qiáng),在DX9中自動(dòng)管理的資源類型增加到貼圖,頂點(diǎn)緩沖,頂點(diǎn)索引緩沖,所有這些資源使用統(tǒng)一的公共接口。通過使用D3D資源管理器,應(yīng)用程序可以輕松的處理設(shè)備丟失、處理稍微過量的顯存使用。
有時(shí)開發(fā)者在使用受管資源會(huì)遇到一些困難,這部分歸咎與系統(tǒng)的抽象特性。在大多數(shù)情況下使用受管對(duì)象是不錯(cuò)的選擇,但有時(shí)出于性能考慮也會(huì)使用非托管資源。這篇文章將討論一般情況下如何處理資源,受管與非受管資源的行為差別。
內(nèi)容
l 顯示內(nèi)存
l 受管資源
l 驅(qū)動(dòng)管制資源
l 默認(rèn)資源
l 系統(tǒng)內(nèi)存資源
l 一般性的建議
顯示內(nèi)存
為了使得資源可以利用顯存,GPU需要通過內(nèi)存訪問定位他。GPU訪問(Local video memory)顯存是非常高效的,并且某些資源(例如RenderTarget,深度、模板緩沖)必須在本地顯存(Local video memory)定位。由于AGP的出現(xiàn),GPU可以直接訪問部分系統(tǒng)內(nèi)存,而這部分系統(tǒng)內(nèi)存區(qū)域就是所謂的非本地顯存(non-local video memory),當(dāng)然這部分內(nèi)存(顯存)也是不能挪做它用的。非本地顯存僅能被GPU訪問,與訪問本地顯存相比,其效率低一些。需要明確的是,所有AGP內(nèi)存在設(shè)備丟失時(shí)都會(huì)失效,都需要在恢復(fù)他們。
一些集成顯卡使用統(tǒng)一內(nèi)存結(jié)構(gòu)(Unified Memory Architecture),這樣主內(nèi)存可以被系統(tǒng)任何一個(gè)設(shè)備尋址。D3D支持UMA而不需要修改任何代碼,這樣我們把系統(tǒng)內(nèi)存配置為本地顯存,硬件確保資源的定位就像傳統(tǒng)的結(jié)構(gòu)一樣進(jìn)行工作。
受管資源
大部分資源應(yīng)該使用POOL_MANAGED方式創(chuàng)建,即受管資源。所有受管資源將被創(chuàng)建在系統(tǒng)內(nèi)存,在需要的時(shí)候復(fù)制到顯存。當(dāng)發(fā)生設(shè)備丟失時(shí)會(huì)自動(dòng)copy系統(tǒng)內(nèi)存到顯存。既然不是所有受管資源都需要一次送入顯存,這樣你可以提交超過渲染每幀所必須使用的最小內(nèi)存容量,但是這樣會(huì)使得大量顯存內(nèi)容因?yàn)榉猪摬僮鞫鴮懙酱疟P上,這是非常耗時(shí)的。這也是為什么恢復(fù)設(shè)備如此耗時(shí),因?yàn)樾枰獙⒋罅看疟P數(shù)據(jù)復(fù)制到顯存。
DX會(huì)為每份資源在最后一次使用時(shí)加上時(shí)間戳,這樣當(dāng)顯存分配失敗時(shí),它會(huì)釋放那些最近最少使用的資源(LRU算法)。使用SetPriority函數(shù)可以標(biāo)記資源的重要程度,重要的資源優(yōu)于時(shí)間戳的判斷,所以那些比較常用的資源應(yīng)該設(shè)置高優(yōu)先級(jí),而不用擔(dān)心因?yàn)闀r(shí)間戳過期而導(dǎo)致資源被釋放。在DX9中,驅(qū)動(dòng)程序提供的顯存管理信息是非常有限的,運(yùn)行時(shí)可能不得不清除大量資源用于分配足夠的內(nèi)存。設(shè)置適合的優(yōu)先級(jí)是非常有用的,這樣D3D不會(huì)清除那些馬上又需要使用的資源。應(yīng)用程序可以強(qiáng)制調(diào)用EvictManagedResources清除所有受管資源,但是如果下一幀又需要重新加載這些資源,這將是非常耗時(shí)的,不過這個(gè)函數(shù)在那些場(chǎng)景明顯需要改變(比如進(jìn)入下一個(gè)關(guān)卡)的情況下,還是非常有用的。
如果“當(dāng)前幀”內(nèi)需要非常多資源用于渲染,這將是件麻煩的事情,用前面的LRU方式調(diào)度資源效率就不太理想了,這個(gè)時(shí)候使用MRU資源調(diào)度方式取代,即優(yōu)先清理那些比較活躍的資源。注意,這里“當(dāng)前幀”的概念是指BeginScene和EndScene之間的需要渲染的幀。
開發(fā)人員如果想得到關(guān)于受管資源的更多信息,可以通過IDirect3DQuery9接口查詢,但是這個(gè)接口僅能用于調(diào)試模式(debug runtimes),在發(fā)布版本中,應(yīng)用程序不能依靠改接口的信息做任何假定。
了解資源管理如何工作可以幫助我們調(diào)試、調(diào)整程序,重要的是應(yīng)用程序不要太過依賴當(dāng)前的運(yùn)行庫(或者驅(qū)動(dòng)程序)的資源管理方式,驅(qū)動(dòng)更新有可能導(dǎo)致其行為發(fā)生變化,將來的D3D將會(huì)有套久經(jīng)考驗(yàn)的資源管理方式。
驅(qū)動(dòng)程序管理的資源
D3D驅(qū)動(dòng)可以自由的實(shí)現(xiàn)“由驅(qū)動(dòng)管理貼圖”的特性,通過D3DCAPS2_CANMANAGERESOURCE段可以查詢硬件驅(qū)動(dòng)是否支持這個(gè)特性,這樣驅(qū)動(dòng)將代替D3D運(yùn)行庫管理資源。對(duì)于級(jí)少數(shù)的硬件是支持這個(gè)特性的,對(duì)于大多數(shù)硬件則不盡相同,你可以咨詢你的產(chǎn)品提供商獲得這方面信息。一般情況下,你可是使用D3DCREATE_DISABLE_DRIVER_MANAGEMENT方式創(chuàng)建設(shè)備,這樣將由D3D運(yùn)行庫來管理資源。
缺省資源管理(非受管資源)
雖然受管資源非常簡(jiǎn)單,容易使用,高效,但是有時(shí)我們希望直接往顯存里寫東西,這種情況下我們需要使用POOL_DEFAULT方式創(chuàng)建資源。使用這種方式會(huì)增加程序的復(fù)雜性,代碼需要應(yīng)付所有設(shè)備丟失的情況,并需要謹(jǐn)慎考慮何時(shí)復(fù)制數(shù)據(jù)到顯存。錯(cuò)誤的指定USAGE_WRITEONLY標(biāo)記或者鎖定渲染目標(biāo)(Render Target)將嚴(yán)重影響性能。
鎖定POOL_DEFAULT類型的資源很可能導(dǎo)致GPU停止運(yùn)轉(zhuǎn),這與POOL_MANAGED類型的資源是不同的,除非使用一些特性的指示標(biāo)記。根據(jù)資源當(dāng)前的位置不同,鎖定后得到的指針也不相同,可能是一塊臨時(shí)的系統(tǒng)內(nèi)存,也可能直接指向AGP內(nèi)存。如果是臨時(shí)的系統(tǒng)內(nèi)存,Unlock后將把這段數(shù)據(jù)送入顯存,這是因?yàn)槿绻@卡資源不是只寫的(write-only),Lock的時(shí)候數(shù)據(jù)將不得不被送入一段臨時(shí)的內(nèi)存;如果指向的AGP內(nèi)存區(qū)域,臨時(shí)的拷貝是可以避免的,但是cache的行為將會(huì)降低性能。
為了避免在寫入一整行數(shù)據(jù)(a full cache line of data)進(jìn)入AGP內(nèi)存區(qū)導(dǎo)致write-combing性能下降(一般是由于發(fā)生了一次讀寫周期),順序的訪問AGP內(nèi)存是推薦的做法,如果你的程序需要隨機(jī)的訪問AGP內(nèi)存,而你又不希望使用受管資源,那么你可以使用系統(tǒng)內(nèi)存作為替代方案,這樣當(dāng)你生成了數(shù)據(jù)之后,可以lock后拷貝,這樣不會(huì)帶來太大的性能損失,這里的性能損失一般是由緩沖的“寫搜索”操作引起。(注,這里關(guān)于詞匯cache write-combing譯者也不知道對(duì)應(yīng)的中文含義,只能按照字面意思翻譯,見諒)
對(duì)于某些類型的資源,使用LOCK_NOOVERWRITE標(biāo)記會(huì)使添加數(shù)據(jù)比較有效率,但是多次的Lock,Unlock同一資源還是需要盡量避免的,適當(dāng)?shù)睦枚喾N不同的鎖定標(biāo)記對(duì)于效率優(yōu)化使非常重要的,就像填充鎖定內(nèi)存區(qū)域最好使用cache友好的(cache-friendly)數(shù)據(jù)訪問方式一樣。
受管資源和缺省資源混合使用
受管資源與非受管資源的混合分配使用可能導(dǎo)致顯存碎塊,并且擾亂受管資源使用的內(nèi)存區(qū)域。最好在使用受管資源前使用非受管資源,或者使用受管資源后使用EvictManagedResources函數(shù)清除那些受管資源再使用非受管資源。記住,所有非受管資源都會(huì)常駐顯存,這樣其他內(nèi)存需求就不能使用了。
注意,與以往的DX版本不同,在顯存缺乏時(shí),如果分配非受管資源失敗,DX9會(huì)自動(dòng)清除受管資源,這有可能導(dǎo)致潛在的顯存碎塊,甚至把資源放入不適當(dāng)?shù)牡胤剑ū热绶潜镜貎?nèi)存的靜態(tài)貼圖區(qū))。所以,最好在使用受管資源之前分配全部的非受管資源。
動(dòng)態(tài)缺省資源
如果數(shù)據(jù)需要很高頻率更新,那最好使用非受管資源,并使用USAGE_DYNAMIC標(biāo)記,這樣驅(qū)動(dòng)會(huì)決定最適合的地方放置這些需要經(jīng)常更新的數(shù)據(jù)。這通常意味著放置在非本地顯存中,這樣對(duì)于GPU來說,訪問速度可能相對(duì)要慢一些。而對(duì)于UMA架構(gòu),驅(qū)動(dòng)將會(huì)選擇CPU訪問效率較高的特殊地方放置這些數(shù)據(jù)。
這種用法(動(dòng)態(tài)缺省資源類型)一般用于軟蒙皮和基于CPU計(jì)算的粒子系統(tǒng)的頂點(diǎn)/頂點(diǎn)索引的Buffer填充,LOCK_DISCARD標(biāo)記可以保證資源仍被使用的時(shí)候,鎖定操作不會(huì)導(dǎo)致系統(tǒng)停止暫停工作。在這種情況下,使用受管資源會(huì)更新系統(tǒng)內(nèi)存,然后拷貝到顯存。對(duì)于系統(tǒng)的非本地內(nèi)存,多余拷貝是不需要的。
標(biāo)準(zhǔn)的貼圖是不允許鎖定的,僅僅可以通過UpdateSurface和UpdateTexture函數(shù)更新。一些系統(tǒng)支持動(dòng)態(tài)貼圖,它可以通過配合使用LOCK_DISCARD標(biāo)記進(jìn)行鎖定,但這需要檢查D3DCAPS2_DYNAMICTEXTURES硬件能力。對(duì)于高動(dòng)態(tài)貼圖(如視頻、程序生成貼圖),最好使用非受管資源和系統(tǒng)內(nèi)存資源,并且通過UpdateTexture函數(shù)更新貼圖。對(duì)于高頻度的粒子更新,UpdateTexture函數(shù)可能是最好的選擇。
在有限的總線-內(nèi)存帶寬下,靜態(tài)貼圖資源應(yīng)該使用POOL_MANAGED方式,這樣可以確保它最好的利用本地顯存,并有較好的效率。對(duì)于“半靜態(tài)”資源,使用動(dòng)態(tài)類型資源有時(shí)會(huì)獲得更好的效率。
系統(tǒng)內(nèi)存資源
資源可以使用POOL_SYSTEMMEM方式創(chuàng)建。但他們不能用于圖形管線,他們僅能做為源數(shù)據(jù)用于更新POOL_DEFAULT類型的資源,這是通過UpdateSurface和UpdateTexture函數(shù)完成的。他們的鎖定操作也非常簡(jiǎn)單,盡管他們同樣可能因?yàn)榍懊嫣岬降脑驅(qū)е孪到y(tǒng)停止運(yùn)轉(zhuǎn)。
雖然是在系統(tǒng)內(nèi)存中創(chuàng)建資源,但POOL_SYSTEMMEM所支持的資源格式和能力(比如最大尺寸)是受硬件、驅(qū)動(dòng)限制的。同樣是在系統(tǒng)內(nèi)存中創(chuàng)建資源的POOL_SCRATCH則沒有這方面限制,它支持所有格式和能力,但設(shè)備卻不能直接訪問它。SCRATCH類型資源一般用于內(nèi)容創(chuàng)建工具。
一般性的建議
了解資源管理的技術(shù)實(shí)現(xiàn)細(xì)節(jié)對(duì)達(dá)成你的程序的性能目標(biāo)是有非常大的幫助的,規(guī)劃你的資源如何交給D3D并設(shè)計(jì)好的結(jié)構(gòu)以便能及時(shí)加載必要的數(shù)據(jù)是一件非常復(fù)雜的工作,為此我們給出一些好的實(shí)踐經(jīng)驗(yàn)做為一般性的原則:
l 預(yù)處理你的資源。不要將耗時(shí)的加載資源、資源轉(zhuǎn)換、資源優(yōu)化丟給用戶去做,雖然這樣便于開發(fā),但確讓用戶無法忍受。預(yù)處理這些資源可以加快加載,更快使用,你的用戶也會(huì)發(fā)現(xiàn)你的程序跑的更快了。
l 避免在每幀創(chuàng)建過多的資源。對(duì)于過多的資源加載,可以把他們分到多幀里完成或者不要急于釋放那些暫時(shí)不用的資源。
l 確保在一幀結(jié)束時(shí)已經(jīng)斷開了所有資源通道。(比如,頂點(diǎn)流,texture stages,頂點(diǎn)索引)。
l 對(duì)于貼圖,建議使用壓縮貼圖(DXTn)格式,建議使用mip-map或者將小貼圖拼接為大貼圖使用。
l 建議使用頂點(diǎn)索引,這將減少數(shù)據(jù)傳輸量。
l 對(duì)于過渡的優(yōu)化資源管理是需要謹(jǐn)慎的。如果你的程序過分依賴驅(qū)動(dòng)、硬件和操作系統(tǒng)的某些特征,那么這些程序、硬件的修改將會(huì)導(dǎo)致潛在的性能問題。
http://www.shnenglu.com/richardhe/articles/69204.html
安裝完畢,從菜單進(jìn)入 系統(tǒng) -> 系統(tǒng)管理 -> 共享的文件夾,打開如下圖所示的界面:
添加準(zhǔn)備共享的文件夾。
1. XP匿名訪問Ubuntu共享文件
使用samba不進(jìn)行任何設(shè)置時(shí),winXP機(jī)器可以連接到Ubuntu機(jī)器但提示輸入用戶名密碼,此時(shí)不論輸入什么都不能訪問,要實(shí)現(xiàn)匿名訪問需要做如下設(shè)置:
1) 修改配置文件smb.conf:
sudo vim /etc/samba/smb.conf
將security=user那一行前的注釋符";"去掉,然后把user改為share。
2) 重啟samba:
#sudo /etc/init.d/samba restart
2. WinXP下用用戶名和密碼訪問Ubuntu共享文件
下面我們來共享群組可讀寫文件夾,假設(shè)你要共享的文件夾為: /home/ray/share首先創(chuàng)建這個(gè)文件夾
代碼:
#mkdir /home/ray/share
#chmod 777 /home/ray/share
備份并編輯smb.conf允許網(wǎng)絡(luò)用戶訪問
代碼:
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
將下列幾行代碼添加到文件的最后面,假設(shè)允許訪問的用戶為: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
后面的三行是為了防止出現(xiàn)中文目錄亂碼的情況。其中根據(jù)你的local,UTF-8 有可能需要改成 cp936。自己看著辦吧。現(xiàn)在要添加newsfan這個(gè)網(wǎng)絡(luò)訪問帳戶。如果系統(tǒng)中當(dāng)前沒有這個(gè)帳戶,那么
代碼:
sudo useradd newsfan
要注意,上面只是增加了newsfan這個(gè)用戶,卻沒有給用戶賦予本機(jī)登錄密碼。所以這個(gè)用戶將只能從遠(yuǎn)程訪問,不能從本機(jī)登錄。而且samba的登錄密碼可以和本機(jī)登錄密碼不一樣。現(xiàn)在要新增網(wǎng)絡(luò)使用者的帳號(hào):
代碼:
#sudo smbpasswd -a newsfan
#sudo gedit /etc/samba/smbusers
在新建立的文件內(nèi)加入下面這一行并保存
代碼:
newsfan = “network username”
如果將來需要更改newsfan的網(wǎng)絡(luò)訪問密碼,也用這個(gè)命令更改
代碼:
#sudo smbpasswd -a newsfan
刪除網(wǎng)絡(luò)使用者的帳號(hào)的命令把上面的 -a 改成 -x
代碼:
#sudo testparm
#sudo /etc/init.d/samba restart
1、配置GCC
其實(shí)剛裝好的系統(tǒng)中已經(jīng)有GCC了,但是這個(gè)GCC什么文件都不能編譯,因?yàn)闆]有一些必須的頭文件,所以要安裝build-essential這個(gè)軟件包,安裝了這個(gè)包會(huì)自動(dòng)安裝上g++,libc6-dev,linux-libc-dev,libstdc++6-4.1-dev等一些必須的軟件和頭文件的庫。
輸入命令
安裝完成后寫一個(gè) C 語言程序 hello.c 測(cè)試一下
在終端輸入
顯示
Hello Ubuntu!
這樣,C 語言編譯器就安裝成功了!
2、安裝 GTK 環(huán)境
這樣,就可以在 Ubuntu 下進(jìn)行 C/C++ 程序的圖形界面設(shè)計(jì)了。
http://www.baiba.net/blog/?action=show&id=56
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); /*顯示一個(gè)窗口*/
gtk_main(); /*進(jìn)入主循環(huán)*/
return(0);
}
用下面命令編譯運(yùn)行
$ ./gtktest
會(huì)顯示一個(gè)帶有一個(gè)按鈕的窗口,點(diǎn)擊按鈕以后窗口關(guān)閉,命令行顯示Hello Ubuntu!附件: 文件注釋: GTK測(cè)試
s2.png [ 4.79 KiB | 被瀏覽 34134 次 ] 文件注釋: C語言測(cè)試
人之不同, 一如其面。各種不同的人都有適合自己的交往方式和自己的交往原則,不論其本人是否能夠意識(shí)得到。所以,如果想找出一種放之四海而皆準(zhǔn)的、和任何脾氣任何性格的人交往都適用的程序,就像劇本一樣,先說哪句話,后說哪句話,什么話應(yīng)該配什么動(dòng)作,什么心情配什么表情,這肯定是不現(xiàn)實(shí)的。
但是,人與人之間的交往,可以有一種規(guī)則,讓自己和他人溝通得更加順暢,更加自如。根據(jù)多年咨詢的經(jīng)驗(yàn),總結(jié)出一種心理調(diào)適的新思路,姑且稱作人際交往的3大定律。
定律一:“每一個(gè)人都比你累”
它的核心是這樣兩點(diǎn),一是在于你能否體諒到,別人的勞動(dòng)是一種辛苦;二是你能否理解別人對(duì)你的態(tài)度。
比如夫妻之間,同樣是下班之后,丈夫往往寧可倒在沙發(fā)里看電視,也不愿意把家里的東西收拾整齊,妻子卻看不慣屋子里亂七八糟的樣子,就要自己收拾。但是呢,妻子就難免會(huì)心里埋怨:我忙了一天,回到家里還要在這里收拾,你居然在沙發(fā)上賴著看電視,怎么就不說來幫一把手呢?可是丈夫也在想了,一天上班我累死累活的,到了家我就沒有一點(diǎn)勁兒了,哪像你上班那么輕閑。要不然,怎么還有精力收拾屋子。要是兩人都這么想,看著吧,過不了多大會(huì)兒,肯定吵起來。
可是,如果兩人都能換一種思路,又會(huì)是什么情況呢?
妻子會(huì)覺得,他都辛苦一天了,每天上班這么累,還是讓他好好休息一會(huì)兒吧。家嘛,家不就是讓他休息放松的地方嘛。丈夫會(huì)想到,她上了一天班,下班回家還要收拾屋子,真是辛苦。這么著吧,反正我收拾過的屋子她也看不上,干脆,我去廚房把飯熱了吧。
在做家務(wù)的不經(jīng)意中,夫妻間就產(chǎn)生了一種默契和溫馨。
到父母家聚會(huì),如果想起這一條,你會(huì)主動(dòng)干許多事兒,而且不至于和自己的親人心生芥蒂;和朋友一齊出游,如果心里常想著這句話,你就會(huì)興高采烈滿心輕松地成為一個(gè)受朋友們歡迎的人。
明白了第一定律的含義,自然會(huì)容易理解下面兩個(gè)推論:
推論一:如果有人能體諒你的累,這個(gè)人必定愛護(hù)你,心疼你;如果有人愿意替你累,替你辛苦,說明這個(gè)人愛你。
推論二:如果你能體會(huì)到其他人的累,體會(huì)到其他人的辛苦和不容易,說明你是個(gè)善良的人;如果你愿意去替別人累,去替別人承擔(dān)辛苦,說明你愛這個(gè)人。
定律二:每一個(gè)人都比你干得活兒多掙得錢少
定律二適用在你的日常工作之中,或者說,它或許應(yīng)該是你在通過自己努力獲得相應(yīng)的物質(zhì)或精神報(bào)酬時(shí)的一條準(zhǔn)則。
相信你在工作中肯定會(huì)有對(duì)別人羨慕的時(shí)候:“還是張主任的工作輕松,每天看他不是請(qǐng)客吃飯,就是打球鍛煉,上班的時(shí)候還可以一個(gè)人關(guān)在辦公室里想干什么就干什么,錢也不少拿,多好啊!”可是,你想過沒有,你羨慕的對(duì)象會(huì)不會(huì)也在心里面羨慕你呢?
說不定哪一天,你就會(huì)聽到張主任親切地和你嘮嘮家常:“小劉啊,還是你們舒服啊,我每天都要陪別人吃飯,連和家里人一起吃晚飯的時(shí)間都沒有;上班吧,一個(gè)人在辦公室,也沒有人說說話,不像你們還可以說說笑笑的。哎,工作壓力太大了。真羨慕你們啊,要是跟你的工作換一換,我就知足了。”你會(huì)不會(huì)覺得這是領(lǐng)導(dǎo)在貓哭耗子假慈悲呢?其實(shí)不然,這絕對(duì)是對(duì)方的真實(shí)感受。
心理學(xué)研究發(fā)現(xiàn),人們都有一種把自己的工作和付出以及別人的獲得和收入看得比實(shí)際情況要多,把自己的獲得和收入以及別人的工作和付出看得比實(shí)際情況要少的心理趨勢(shì)。
每個(gè)人都是一樣,會(huì)覺得自己的付出太多,自己的獲得太少,于是由此而生出許多的不滿或是抱怨。其實(shí),想想看,假如每個(gè)人都這么想的時(shí)候,你的想法與別人不同,你覺得自己的付出相對(duì)少,別人的付出比較多,那么,你自然就會(huì)不斷地自勉,還會(huì)真誠地對(duì)待別人。
第二定律也有兩條推論:
推論一:理解別人干得活多,或者理解別人收入少,都能使別人感動(dòng),而且惠而不費(fèi)。
推論二:不要再抱怨自己的收入。因?yàn)椋?dāng)你抱怨的時(shí)候,你肯定沒有在工作。
定律三:每一個(gè)人都沒有義務(wù)幫助你
這句話聽起來十分冷酷,難道我們身邊的每個(gè)人都是這樣冷漠嗎?在我們需要?jiǎng)e人援手的時(shí)候,我們竟然那么孤立無援?
事實(shí)上并不是這個(gè)樣子,這個(gè)世界上永遠(yuǎn)不缺乏好心人和熱心人,但是有些時(shí)候,可能你所遇到的困難沒有被有能力幫助你的好心人看到而已。
前些年,某個(gè)城市發(fā)生了這樣一件事兒:一個(gè)小姑娘上學(xué)途中被人撞倒,傷得很嚴(yán)重,圍觀的人群中走出一個(gè)小伙子,說愿意把姑娘送到醫(yī)院,但要求小姑娘先出一些辛苦費(fèi)。小姑娘拿出身上所有的零錢還是不夠,答應(yīng)對(duì)方只要通知了自己的父母,肯定會(huì)把錢給他。趕到醫(yī)院的父母在把孩子送進(jìn)手術(shù)室后轉(zhuǎn)身要付錢,小伙子不僅不要,還把零花錢還給了孩子的父母。原來他只是用這種方法證明自己不是肇事者而已。這個(gè)小伙子的擔(dān)心也正反映了一般人的看法:要不是你撞了孩子,你干嗎要把孩子送到醫(yī)院來呢?你沒有這個(gè)義務(wù)啊?
與不相識(shí)的人交往,人們都會(huì)有一種戒備心理,一般地,禮下于人則必有所求,素昧平生那就應(yīng)該無功不受祿。對(duì)于沒來由地?zé)嵝膸椭约旱娜耍袝r(shí)候難免心里會(huì)問個(gè)為什么。這也就造成了每個(gè)人都充滿熱心但卻擔(dān)心被拒絕而表現(xiàn)的冷漠。如果你能理解大多數(shù)人的這種心理,你就會(huì)理解別人為什么沒有對(duì)你伸出援助之手;如果你相信這個(gè)世界早晚會(huì)了解你的為人,那么你在出手助人的時(shí)候自然落落大方。
第三定律的推論是:
推論一:如果有人在沒有義務(wù)的情況下幫助你,那么,這個(gè)家伙,可以做,朋友。
推論二:如果你幫助了別人,心里的快樂就是最大的酬謝,不要計(jì)較對(duì)方是否會(huì)知道,會(huì)記住,或者會(huì)回報(bào)。
其實(shí),第一定律說的是家庭和朋友之間的相處之道,第二定律說的是在單位的工作態(tài)度和處事方法,第三定律則是講與陌生人之間的應(yīng)對(duì)。
很可能,熱情的你會(huì)覺得這三條定律看上去太冷,太沒有人情味兒,可是,做人,固然要熱血酬知己,也應(yīng)該冷眼觀世情。(藍(lán)心網(wǎng))
Made by welflau
1 下載最新的OGRE源碼包
2 直接解壓到D盤根目錄下
3 打開sln 我裝是的VS2005
打開后
4 編譯生成OgreMain
5 會(huì)出錯(cuò),還沒下Dependencies
因?yàn)殒溄悠髦酗@示了有附加庫
6 下載ogre-dependencies 注意要下載最新版
下載地址:
http://sourceforge.net/project/showfiles.php?group_id=2997
下一個(gè)頁面選擇
7 解壓到D:\ogre-l.6.0\ogre
解壓完后,再重新編譯生成
OgreMain編譯得要一段時(shí)間
而且編譯后Obj文件有
【注意】還有一個(gè)Samples文件夾也要覆蓋到Ogre目錄下
里面是執(zhí)行時(shí)所需的dll文件
終于編譯完后,不過還是有錯(cuò),少文件
我去 Dependencies\include\zzip 目錄下看的確沒這個(gè)文件
我又下了Dependencies其他版本OgreDependencies_VC8SP1_Eihort_20070323
發(fā)現(xiàn)有該文件
8 可能是版本不對(duì)再到OGRE官方網(wǎng)站
http://www.ogre3d.org/index.php?option=com_content&task=view&id=412&Itemid=132
下載紅框所示那個(gè)包:OgreDependencies_VC8SP1_Eihort_20071227.zip
解壓到OGRE目錄D:\ogre-l.6.0\ogre下到重新覆蓋一遍
再編譯生成
終于成功生成
生成的lib和dll如下圖
其中OgreMain生成的目標(biāo)文件有
【游戲開發(fā)】【原創(chuàng)教程連載】WelfGame【第7講】(08120803按鈕顏色可控)
【游戲開發(fā)】【原創(chuàng)教程連載】WelfGame【第6講】(08120702加入皮膚對(duì)話框)
【游戲開發(fā)】【原創(chuàng)教程連載】WelfGame【第5講】(WelfGame(08120302三維操作)
【游戲開發(fā)】【原創(chuàng)教程連載】WelfGame【第4講】(08120301導(dǎo)入三維數(shù)據(jù)文件 .x)
【游戲開發(fā)】WelfGame【第3講】(08120203圖像透明及顏色)
【游戲開發(fā)】WelfGame【第2講】(08120202繪制文字和圖像)
【游戲開發(fā)】原創(chuàng):我的游戲開發(fā)學(xué)習(xí)過程(連載中...)(第一講)