DirectX编程知识点集合

DirectX编程知识点集合

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.

你可能感兴趣的:(DirectX编程知识点集合)