星期四, 8月 08, 2013

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;
};

記憶一下

除了本來工作上的東西 ,還有些啥技術有瞭解到?

先是  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

memo

#define _USE_ANSI_CPP #define _STATIC_CPPLIB #define _DISABLE_DEPRECATE_STATIC_CPPLIB

星期一, 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
就簽上了

星期二, 4月 03, 2012

mac小記

macports
brew

星期四, 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 了 真囧

星期四, 8月 11, 2011

工具小計

工具小計


Inter Parallel Studio 2011
office
 AMD compressoncator
CMake
PDF View
Fraps
HG
NViDIA corporation-nv6193
pgAdmin

Xtreme
3d max
FileZilla
Netepad++
xnview
putty




星期三, 8月 10, 2011

星期四, 3月 31, 2011

寫C++ 這 麼多年

寫C++ 這 麼多年

我終於知道 "\r" 的功用了 真囧


回到第一行

星期一, 1月 17, 2011

速記

ildasm .net 反組

星期二, 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.

星期四, 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

星期四, 3月 26, 2009

在Release 產生 code dump on windows

在Linux 上寫程式時很方便的會使用gdb 然後配合一下 core檔來Deubg,windows也是該有才對。
MSDN上也有說名
首先打開專案資料夾
屬性選項
c/c++
啟用c/c++ 例外狀況
我選了 是,但有 SEH 例外狀況 (/EHa)



再配合MiniDumper catch dump之後
HMODULE hDll = ::LoadLibrary( TEXT("DBGHELP.DLL") );
MiniDumpWriteDump

產生之後,用VS開起dmp 配合設定一下/(指定偵錯符號檔)就可以找出當的位置了。以前還在那邊算map-_-

星期一, 1月 12, 2009

Struct 小記

struct MsgStruct
{
int m_nprotocol;
int nSize;
char myData[0];
};

可變長度 只要把
myData 用隨意的記憶體蓋過就是長在MsgStruct之後隨之送出即可,比較要注意的是,加上的記憶體長度。

星期四, 10月 30, 2008

win api

comctl32.lib list control

#include

INITCOMMONCONTROLSEX icex;
TOOLINFO ti;

// Load the tooltips class from the DLL.
icex.dwSize = sizeof(icex);
icex.dwICC = ICC_BAR_CLASSES;

if(!InitCommonControlsEx(&icex))
return;

星期三, 8月 27, 2008

List BOx

小計一下
LB_ADDSTRING

LB_GETCURSEL

LB_DELETESTRING

LB_GETITEMDATA

LB_GETTEXT

LB_GETCOUNT

LB_FINDSTRING

星期三, 8月 20, 2008

轉換型態


struct A
{

char a;
};

char *kkkk={"123456789"};

A * =(A*)kkkk;
A->a
結果是
1


struct A
{
int b;
char a;
};
A * =(A*)kkkk;
A->a
結果是 5

星期日, 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。

星期二, 8月 05, 2008

越來越無痛了

當裝好了該有的

mysql-server
phpmyadmin

最後到了開發期就還要裝 mysqllib 不然玩啥?

sudo apt-get install libmysql++-dev

星期三, 7月 09, 2008

TraceWin

http://dilascia.com/TraceWin.htm


選用30版


try ing


可以得到外部的測試碼 MFC 限定




TRACE() 是給程式編寫員做 debug 用途的
在 Release build 的時候, 這個 macro 就變成 NOP (no-op), 所以它不會佔 Release build 的空間.

非MFC可以用 ATLTRACE()