w是齐次坐标,用于表示verctor代表一个点还是一个向量。\
w=1代表vector是个点,w=0代表vector是个向量,平移向量后,向量是没有变化的。
也就是w决定了一个变换中,平移部分是否有效。</span>
w=0就是只让属于线性变换的变换有效。
效果文件建失败,直接返回 E_fail,路径尝试改成绝对的,还是一样。\ 不但pEffect是0x0000,即获取不到值,\ 连errors也为0x0000,也获取不到错误消息,而且输出框也不显示编译 错误,\ 更何况,fx文件是肯定是没有问题的,因它在其它程序里都可以正确使用。\ fx 里compile 也本来就vs_2.0
可能是因为新版本的SDK默认使用DX10的HLSL编辑器引擎的问题,如果是这种情况,只要在调用D3DXCreateEffectFromFile时的flag
参数里面加上D3DXSHADER_USE_LEGACY_D3DX9_31_DLL这个值就可以了。
DX SDK的文档里面有说的,在D3DXSHADER Flags这个主题里面。 不过说的很隐晦,要两个地方结合起来看: 1)D3DXCreateEffectFromFile函数对Flags参数的描述里面说了这么一句: The Direct3D 10 HLSL compiler is now the default 也就是说默认使用D3D10的HLSL编译器 2)D3DXSHADER Flags对D3DXSHADER_USE_LEGACY_D3DX9_31_DLL的描述里面有这么一句: Enable the use of the original Direct3D 9 HLSL compiler. 也就是说加入这个值以后就使用D3D9的HLSL编译器了。
然后errorBuffer就可以报错了.
GetAsyncKeyState()& 0x8000f
GetAsyncKeyState函数功能:读取的是物理键状态,也是就是不管你怎么鼠标键盘映射,它只读取实际的按键状态。MSDN上给出了例子很恰当For example, the call GetAsyncKeyState(VK_LBUTTON) always returns the state of the left physical mouse button, regardless of whether it is mapped to the left or right logical mouse button.也就是说如果你重新设置了映射,GetAsyncKeyState还是只读取物理状态
GetAsyncKeyState的返回值:表示两个内容,一个是最高位bit的值,代表这个键是否被按下,按下为1,抬起为0;一个是最低位bit的值,在windowsCE下要忽略(参考自MSDNIf the most significant bit is set, the key is down. The least significant\ bit is not valid in Windows CE, and should be ignored.)
note:
GetAsyncKeyState('M')& 0x8000f要大写M