Debug -> New BreakPoint -> add &SomePoint ;
http://www.technochakra.com/debugging-types-of-data-breakpoints-in-gdb/
星期二, 8月 27, 2013
星期四, 8月 08, 2013
從無到有 3D MMO 要做多少事
基本上會找一個現有 3D Engine 會比重新刻好,除非你是大師級的,因為要花的時間真的不少。
3D Game Engine要有些什麼 功能?
3d Max的plugin 轉換 Engine裡面所使用的 model檔
場景編輯器
遊戲事件編輯器
Cute scene 編輯器
UI 編輯器
動態編輯器
觀看物件的 Object View。
如果有網路就要 寫網路的部份
檔案Patch 機制 壓縮方法... 等 。
大概需要的框架就是這些,還不包括企劃需要的文件系統。
其實可以參考 OGRE http://www.ogre3d.org/
其實很多人不瞭解這東西到底做了什麼事,這邊來整理一下好了。
乾脆就把他分開變成 遊戲引擎 和 3D影擎。
3D的部份就管電腦圖學的部份 ,3D物件的演算使用、3D 物件Animation、Shader、地型、場景、燈光、影子、卡通效果...。
遊戲引擎就是 遊戲規則的編寫,遊戲內和3D物件互動的整合。
一款很完整的引擎,基本上會產出不少工具,使用不少技術,加上AI,這大概就是3D遊戲引擎。
比如說我要開始製做一款3D遊戲,一開始從建立3D model開始,從3D Max匯出物件檔就是工了。好的引擎會把建立物件的 Input output 最佳化,加上一些資訊,所以一開始會有3D Max的export。
把Model Load進Game後 你會需要 控制Model的資訊,所以要先製作些資料,比如說物件的大小、物件特效大小、物件特效顯示位置、物件可變換Avatar功能,走路的動作,受傷的動作,這時候第二個工具就會出現了,可能會叫做生物編輯器之類的。讓你可以編輯各種屬性和外觀。
有了生物但沒有場景,所以要有個場景編輯器,雖然可以用Max直接做整個場景出來,但如果要做出更多細部物件的控制,就要有個可以像拼拼圖一樣的編輯器,讓你能做出場景,加入場景的Model。
接下來你要能在地圖上編輯相關遊戲規則,所以又出現了一個新的工具。
然後有個正流行的cut scene 功能,可以製作遊戲內額外的表演。
以上為基本款。
接下來就要看需求方向加上更多東西。
3D Game Engine要有些什麼 功能?
3d Max的plugin 轉換 Engine裡面所使用的 model檔
場景編輯器
遊戲事件編輯器
Cute scene 編輯器
UI 編輯器
動態編輯器
觀看物件的 Object View。
如果有網路就要 寫網路的部份
檔案Patch 機制 壓縮方法... 等 。
大概需要的框架就是這些,還不包括企劃需要的文件系統。
其實可以參考 OGRE http://www.ogre3d.org/
其實很多人不瞭解這東西到底做了什麼事,這邊來整理一下好了。
乾脆就把他分開變成 遊戲引擎 和 3D影擎。
3D的部份就管電腦圖學的部份 ,3D物件的演算使用、3D 物件Animation、Shader、地型、場景、燈光、影子、卡通效果...。
遊戲引擎就是 遊戲規則的編寫,遊戲內和3D物件互動的整合。
一款很完整的引擎,基本上會產出不少工具,使用不少技術,加上AI,這大概就是3D遊戲引擎。
比如說我要開始製做一款3D遊戲,一開始從建立3D model開始,從3D Max匯出物件檔就是工了。好的引擎會把建立物件的 Input output 最佳化,加上一些資訊,所以一開始會有3D Max的export。
把Model Load進Game後 你會需要 控制Model的資訊,所以要先製作些資料,比如說物件的大小、物件特效大小、物件特效顯示位置、物件可變換Avatar功能,走路的動作,受傷的動作,這時候第二個工具就會出現了,可能會叫做生物編輯器之類的。讓你可以編輯各種屬性和外觀。
有了生物但沒有場景,所以要有個場景編輯器,雖然可以用Max直接做整個場景出來,但如果要做出更多細部物件的控制,就要有個可以像拼拼圖一樣的編輯器,讓你能做出場景,加入場景的Model。
接下來你要能在地圖上編輯相關遊戲規則,所以又出現了一個新的工具。
然後有個正流行的cut scene 功能,可以製作遊戲內額外的表演。
以上為基本款。
接下來就要看需求方向加上更多東西。
3d 選取物件
通常都會是長這樣
Point3 Origin; 點選投射點
Point3 Dir; 點選向量
MousePos 滑鼠座標
GetCamera()->WindowPointToRay( MousePos.x, MousePos.y, Origin, Dir );
去換到 投攝的點 和向量之後在拿去和物件 算碰撞,有碰到的物件就可以選取
在利用 BoundObject去check
當然還可以拿到目前的距離
攝影機範圍
class Frustum
{
float m_fLeft;
float m_fRight;
float m_fTop;
float m_fBottom;
float m_fNear;
float m_fFar;
bool m_bOrtho;
};
Point3 Origin; 點選投射點
Point3 Dir; 點選向量
MousePos 滑鼠座標
GetCamera()->WindowPointToRay( MousePos.x, MousePos.y, Origin, Dir );
去換到 投攝的點 和向量之後在拿去和物件 算碰撞,有碰到的物件就可以選取
在利用 BoundObject去check
當然還可以拿到目前的距離
攝影機範圍
class Frustum
{
float m_fLeft;
float m_fRight;
float m_fTop;
float m_fBottom;
float m_fNear;
float m_fFar;
bool m_bOrtho;
};
記憶一下
除了本來工作上的東西 ,還有些啥技術有瞭解到?
先是 Data-Driven 還有 Event-Driven ,我書讀的少,真的看完了有這些Model的東西後,才瞭解啥是啥?
拿走路來講講,Event-Driven 的方事是當你有走動時的操作時才將Event 丟到你控制移動的功能,比如說你在畫面上 有一個點在(0,0),你點下座標(100,100)時,他接收到Event之後開始走過去;Data-Driven則是,你去控制你的點的座標,讓他到達(100,100),所以走路應該是兩個系統整合起來,而達到自動行走。
有些FPS的Game ,在移動時就是用Data-Driven,client端會一直向Server去詢求更改位置的固定 protocol之後,Server確認ok後回傳給Client新座標,Clien收到procotol 改變移動需要的動作,並設定新座標。所以如果client送protocol的速度很快Server又沒去擋掉不合理的部份,別人看起來就會像飛一樣。
我知道的MMO RPG,這邊就是Event-Driven,當你在畫面上點選了座標給Server,client自動的移動過去,這時候client固定會和server在ckeck position,確定可行走後繼續移動,到達目的地之後就不會再送資料給server。並不完全精準,有可能發生client 先到Server還沒通知別的client。
兩個系統有各自需求的部份,用太多Data-Driven對Server來說是負擔,用Event-Driven,誤差就必需去算回來。
認真來講 Timer也是一種Data-Drivern,而Mouse Click則是Event-Driven。
先是 Data-Driven 還有 Event-Driven ,我書讀的少,真的看完了有這些Model的東西後,才瞭解啥是啥?
拿走路來講講,Event-Driven 的方事是當你有走動時的操作時才將Event 丟到你控制移動的功能,比如說你在畫面上 有一個點在(0,0),你點下座標(100,100)時,他接收到Event之後開始走過去;Data-Driven則是,你去控制你的點的座標,讓他到達(100,100),所以走路應該是兩個系統整合起來,而達到自動行走。
有些FPS的Game ,在移動時就是用Data-Driven,client端會一直向Server去詢求更改位置的固定 protocol之後,Server確認ok後回傳給Client新座標,Clien收到procotol 改變移動需要的動作,並設定新座標。所以如果client送protocol的速度很快Server又沒去擋掉不合理的部份,別人看起來就會像飛一樣。
我知道的MMO RPG,這邊就是Event-Driven,當你在畫面上點選了座標給Server,client自動的移動過去,這時候client固定會和server在ckeck position,確定可行走後繼續移動,到達目的地之後就不會再送資料給server。並不完全精準,有可能發生client 先到Server還沒通知別的client。
兩個系統有各自需求的部份,用太多Data-Driven對Server來說是負擔,用Event-Driven,誤差就必需去算回來。
認真來講 Timer也是一種Data-Drivern,而Mouse Click則是Event-Driven。
星期一, 12月 10, 2012
星期一, 11月 12, 2012
jar add 數位簽章
jarsigner -verify xxx .jar
可以知道有沒有簽過章
message :
jar verified.
or
jar is unsigned.
keytool -list -storetype pkcs12 -keystore xxx.pfx
輸入密碼
xxxxx-xxxx-xxxx-xx
之後出現評證指紋上的一堆字
jarsigner -storetype pkcs12 -keystore xxx.pfx xxx.jar xxxx-xxx-xxx-xxx
就簽上了
可以知道有沒有簽過章
message :
jar verified.
or
jar is unsigned.
keytool -list -storetype pkcs12 -keystore xxx.pfx
輸入密碼
xxxxx-xxxx-xxxx-xx
之後出現評證指紋上的一堆字
jarsigner -storetype pkcs12 -keystore xxx.pfx xxx.jar xxxx-xxx-xxx-xxx
就簽上了
星期四, 12月 15, 2011
python and cegui
首先是 linux 流行 python qt 的問題 時代在進步,技術不停的衍化,純 C++的方式去寫code 漸漸的被更高階的語言所取代,當然 人力 分配變的 更多的階層。
python2.7 + cegui 0.8 + boost1_4_2 + cmake 2.8 還需要裝 pySide for QT 的環境 pyopenGl
之後就開始一連串的compiler 之旅 python 2.7 預設是使用 vs 2008 VC9
但是 CMake 產生出來的 cegui 又剛好可以是2005 所以這時候使用的版本就要小心
最後把相關的 dll
pycegui.pyd 都放一起
boost_python_vc80_mt_xxxx
才可以打開CEED-gui
我轉了一圈 也裝了 ubuntu 還去學了一下python call c++
最後終於可以開python ceed-gui 了 真囧
python2.7 + cegui 0.8 + boost1_4_2 + cmake 2.8 還需要裝 pySide for QT 的環境 pyopenGl
之後就開始一連串的compiler 之旅 python 2.7 預設是使用 vs 2008 VC9
但是 CMake 產生出來的 cegui 又剛好可以是2005 所以這時候使用的版本就要小心
最後把相關的 dll
pycegui.pyd 都放一起
boost_python_vc80_mt_xxxx
才可以打開CEED-gui
我轉了一圈 也裝了 ubuntu 還去學了一下python call c++
最後終於可以開python ceed-gui 了 真囧
星期四, 8月 11, 2011
星期三, 8月 10, 2011
星期四, 3月 31, 2011
星期二, 9月 08, 2009
postgresql 對應 mysql
For those coming from MySQL:
SHOW TABLES = \d
SHOW DATABASES = \l
SHOW COLUMNS = \d table
However the \* commands only work in psql and not via other interfaces, such as queries via PHP. Similar data can be retrieved with the following SQL commands:
SHOW TABLES (\d) = SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'
SHOW DATABASES (\l) = SELECT datname FROM pg_database;
SHOW COLUMNS FROM table (\d table) = SELECT column_name FROM information_schema.columns WHERE table_name ='table';
To get the column names in their "natural" order (as in, the order they were created), use:
SELECT column_name FROM information_schema.columns WHERE table_name ='< table >' ORDER BY ordinal_position;
Alternatively you could send psql metacommands to psql directly:
SHOW TABLES -> echo "\d" | psql "database"
Use "psql -tA" for script friendly format.
SHOW TABLES = \d
SHOW DATABASES = \l
SHOW COLUMNS = \d table
However the \* commands only work in psql and not via other interfaces, such as queries via PHP. Similar data can be retrieved with the following SQL commands:
SHOW TABLES (\d) = SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'
SHOW DATABASES (\l) = SELECT datname FROM pg_database;
SHOW COLUMNS FROM table (\d table) = SELECT column_name FROM information_schema.columns WHERE table_name ='table';
To get the column names in their "natural" order (as in, the order they were created), use:
SELECT column_name FROM information_schema.columns WHERE table_name ='< table >' ORDER BY ordinal_position;
Alternatively you could send psql metacommands to psql directly:
SHOW TABLES -> echo "\d" | psql "database"
Use "psql -tA" for script friendly format.
星期四, 4月 02, 2009
抓mmmmacaddress
IP_ADAPTER_INFO AdapterInfo[16]; // Allocate information
DWORD dwBufLen = sizeof(AdapterInfo); // Save memory size of buffer
DWORD dwStatus = GetAdaptersInfo( AdapterInfo, &dwBufLen);
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo; // Contains pointer to
do {
if(strcmp(pAdapterInfo->IpAddressList.IpAddress.String,"0.0.0.0")!=0)
{
int a=0;
}
pAdapterInfo = pAdapterInfo->Next; // Progress through
// linked list
}
while(pAdapterInfo); // Terminate if last adapter
DWORD dwBufLen = sizeof(AdapterInfo); // Save memory size of buffer
DWORD dwStatus = GetAdaptersInfo( AdapterInfo, &dwBufLen);
PIP_ADAPTER_INFO pAdapterInfo = AdapterInfo; // Contains pointer to
do {
if(strcmp(pAdapterInfo->IpAddressList.IpAddress.String,"0.0.0.0")!=0)
{
int a=0;
}
pAdapterInfo = pAdapterInfo->Next; // Progress through
// linked list
}
while(pAdapterInfo); // Terminate if last adapter
星期四, 3月 26, 2009
在Release 產生 code dump on windows
在Linux 上寫程式時很方便的會使用gdb 然後配合一下 core檔來Deubg,windows也是該有才對。
MSDN上也有說名
首先打開專案資料夾
再配合MiniDumper catch dump之後
HMODULE hDll = ::LoadLibrary( TEXT("DBGHELP.DLL") );
MiniDumpWriteDump
產生之後,用VS開起dmp 配合設定一下/(指定偵錯符號檔)就可以找出當的位置了。以前還在那邊算map-_-
MSDN上也有說名
首先打開專案資料夾
屬性選項
c/c++
啟用c/c++ 例外狀況
我選了 是,但有 SEH 例外狀況 (/EHa)
再配合MiniDumper catch dump之後
HMODULE hDll = ::LoadLibrary( TEXT("DBGHELP.DLL") );
MiniDumpWriteDump
產生之後,用VS開起dmp 配合設定一下/(指定偵錯符號檔)就可以找出當的位置了。以前還在那邊算map-_-
星期一, 1月 12, 2009
星期四, 10月 30, 2008
星期三, 8月 27, 2008
星期三, 8月 20, 2008
星期日, 8月 10, 2008
GCC G++
參數: -O (大寫)
說明: 在編譯過程做最佳化,以提升增快程式執行速度。
參數: -Idir_name
說明: 將目錄 'dir_name' 設定為搜尋標頭檔目錄之一。
簡化: -I
參數: -Ldir_name
說明: 將目錄 'dir_name' 設定為搜尋程式庫目錄之一。
簡化: -L
參數: -lname
說明: 聯結程式庫 libname.a 。
範例一:本例中假設你的程式檔名為test.c,數學函數如 sin等,所要聯結的程式庫為 libm.a。
gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test
範例二:本例中假設你的程式檔名為 test.c,使用到 X window 函數,所需的 include 檔放在 /usr/X11R6/include 中,所須聯結的程式庫放在 /usr/X11R6/lib,所要聯結的程式庫為 libX11.a。
gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test
提供進一步的資訊以便使用者找尋程式中的錯誤。
參數: -Wall
說明: 輸出較多的警告訊息,以便找出程式的錯誤。
參數: -g
說明: 在編譯出可執行檔時,附加執行時除錯資訊,以供 gdb 讀取 (若要使用 ABSoft 的除錯程式,則須將參數改為 -gdwarf )。
參數: -c
說明: 僅編譯成 object 檔而不進行程式庫聯結。
參數: -E
說明:展開程式中的巨集以便了解巨集是否依照預期方式展開。
聯結數個 object 成可執行檔。
參數: -o
範例: 將 'test1.o'、'test2.o' 和程式庫聯結後成為可執行檔 test。
gcc test1.o test2.o -o test
參數: -S
範例:編譯 test.c 產生對應的組合語言程式碼檔 test.s。
說明: 在編譯過程做最佳化,以提升增快程式執行速度。
參數: -Idir_name
說明: 將目錄 'dir_name' 設定為搜尋標頭檔目錄之一。
簡化: -I
參數: -Ldir_name
說明: 將目錄 'dir_name' 設定為搜尋程式庫目錄之一。
簡化: -L
參數: -lname
說明: 聯結程式庫 libname.a 。
範例一:本例中假設你的程式檔名為test.c,數學函數如 sin等,所要聯結的程式庫為 libm.a。
gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test
範例二:本例中假設你的程式檔名為 test.c,使用到 X window 函數,所需的 include 檔放在 /usr/X11R6/include 中,所須聯結的程式庫放在 /usr/X11R6/lib,所要聯結的程式庫為 libX11.a。
gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test
提供進一步的資訊以便使用者找尋程式中的錯誤。
參數: -Wall
說明: 輸出較多的警告訊息,以便找出程式的錯誤。
參數: -g
說明: 在編譯出可執行檔時,附加執行時除錯資訊,以供 gdb 讀取 (若要使用 ABSoft 的除錯程式,則須將參數改為 -gdwarf )。
參數: -c
說明: 僅編譯成 object 檔而不進行程式庫聯結。
參數: -E
說明:展開程式中的巨集以便了解巨集是否依照預期方式展開。
聯結數個 object 成可執行檔。
參數: -o
範例: 將 'test1.o'、'test2.o' 和程式庫聯結後成為可執行檔 test。
gcc test1.o test2.o -o test
參數: -S
範例:編譯 test.c 產生對應的組合語言程式碼檔 test.s。
訂閱:
文章 (Atom)