bug01: 在創建窗口的時候的width/height跟初始化D3D的時候的后緩沖區width/height不一致,致使在CreateDevice的時候返回D3DERR_INVALIDCALL的錯誤報告.
bug02:
static LRESULT CALLBACK WindowProc(HWND window, UINT msg, WPARAM wParam, LPARAM lParam); // 回調函數
wnd.lpfnWndProc = WindowProc;
這里使用static的原因
error C3867: 'WinWrapper::WindowProc': function call missing argument list; use '&WinWrapper::WindowProc' to create a pointer to member
e:\dx beginner\d3dinit\d3dinit\winwrapper.cpp(46) : error C2440: '=' : cannot convert from 'LRESULT (__stdcall WinWrapper::* )(HWND,UINT,WPARAM,LPARAM)' to 'WNDPROC'
bug03: D3DXCOLOR_XRGB(255.0f,0.0f,0.0f).就會出現這樣的錯誤
error C2296: '&' : illegal, left operand has type 'float',而將浮點型轉換為整數型就可以通過了.
bug04:
Direct3D9: (ERROR) :Current vertex shader declaration doesn't match VB's FVF
這里是因為創建的時候使用不同的fvf,我這里的出錯是因為我在工程里面用到了兩個頂點緩沖器,而在渲染之前的操作都基于緩沖器A,而在渲染的時候卻采用緩沖器B,這樣就出現了這樣的問題,并且兩個頂點緩沖器采用的FVF都是不同的.
bug05:
很多次的時候,都發現了基本圖元都有繪制成功的,但是就是顯示不出來,跟了很久,后來發現是相機的位置問題.
// 設置相機坐標和相關信息
D3DXMATRIX matCamera;
D3DXVECTOR3 eye(-10.0f,3.0f,-15.0f); // 相機坐標(eye)
D3DXVECTOR3 lookAt(0.0f,0.0f,0.0f); // 相機觀察的坐標位置(look at)
D3DXVECTOR3 up(0.0f,1.0f,0.0f); // 相機的向上變量
D3DXMatrixLookAtLH(&matCamera,
&eye,
&lookAt,
&up);
pD3DDevice->SetTransform(D3DTS_VIEW,&matCamera);
這個函數很重要,很多時候調整一下eye之后就好了.
另外在光源的位置設置上面也存在同樣的問題,如果光源的direction和position沒有設置好的,就只能看到物體的背面,而重新調整之后就可以看到物體的原貌了.
directInput.
directInput里面采用了鉤子處理,這樣鉤子是直接作用windows消息的,這樣會帶來不必要的麻煩,而win32 api或者windows message就不要,直接用windows message或許還好些, 另外directInput也存在很多麻煩問題。
1) 創建了多余的線程僅僅是用原始輸入從鍵盤讀取數據(實際上你可用win32自己讀取)
2) 不支持控制面板里面用戶設置的鍵盤重復率,
3) 不支持大寫字母和shift后的字母,必須檢查大寫鍵是否開啟或者關閉以及常規字母。
4) 不支持非英語國家的鍵映射。
5) 不支持輸入法編輯器(比如漢語)。
6) 不支持可訪問性鍵盤和其它,比如需要特殊驅動的聲音控制。
在國外都不用這個directInput而轉用windows message或者win32 api,GetKeyBoardState,以及GetMouseState之類的。
在使用directInput和windows消息上面應該采用這樣的方式來處理.
今天遇到一個錯誤,他在釋放空間的時候出錯,錯誤提示為
DAMAGE: after normal block(#78493) at 0x015EBADB.
后來查詢出來了,是因為申請的空間太小,這樣的話,只要把申請的空間大小加大就好了.
tweening:Short for in-betweening, the process of generating intermediate frames between two images to give the appearance that the first image evolves smoothly into the second image. Tweening is a key process in all types of animation, including computer animation. Sophisticated animation software enables you to identify specific objects in an image and define how they should move and change during the tweening process.