C++ DirectX背景图像
我试图按照我的3D directx书中的教程进行一些修改。我遇到的问题是,我想画一个图像,但无法让它工作。这个例子使用的是相机,因为它基于一个小游戏,但我只想加载图像,而不需要任何奇特的相机变换。(按原样绘制图像,无需调整大小+alpha混合) 这是我的代码,应该包含相关部分 h .cpp 编辑:差点忘了:C++ DirectX背景图像,c++,directx,C++,Directx,我试图按照我的3D directx书中的教程进行一些修改。我遇到的问题是,我想画一个图像,但无法让它工作。这个例子使用的是相机,因为它基于一个小游戏,但我只想加载图像,而不需要任何奇特的相机变换。(按原样绘制图像,无需调整大小+alpha混合) 这是我的代码,应该包含相关部分 h .cpp 编辑:差点忘了: #define ReleaseCOM(x) { if(x){ x->Release(); x = 0; } } 调用函数“Begin”时,应该使用D3DXSPRITE_ALPHABL
#define ReleaseCOM(x) { if(x){ x->Release(); x = 0; } }
调用函数“Begin”时,应该使用D3DXSPRITE_ALPHABLEND而不是D3DXSPRITE_DONOTMODIFY_RENDERSTATE,指定D3DXSPRITE_ALPHABLEND并不意味着必须使用alpha blend,如果不调用Screen::onResetDevice(),alpha blend将无法工作,因此D3DXSPRITE_ALPHABLEND此处只是一个使“Begin”工作的参数。如果在调用函数“Begin”时不想指定任何标志,可以将0传递给它
m_Sprite->Begin(0);
m_Sprite->Draw(m_BGImage, 0, &D3DXVECTOR3(256.0f, 256.0f, 0.0f), 0, D3DCOLOR_XRGB(255, 255, 255));
m_Sprite->Flush();
m_Sprite->End();
参考资料:不太熟悉DX,因此如果这不符合标准,我深表歉意,但有一件事可能值得研究:如果您没有进行任何对象到视图的转换,则对象是相对于视图空间定义的。。这意味着您通常需要使用Z偏移来定义它,以便它实际上位于视图平锥中,否则它将被剔除。例如,如果您的近剪裁平面位于z=1,则以视图空间原点为中心的半个单位立方体将不会渲染。因为在接下来的视图日中,我甚至还没有接近带编译器的pc,所以我无法对其进行测试,但我一回来就会进行测试。
#define ReleaseCOM(x) { if(x){ x->Release(); x = 0; } }
m_Sprite->Begin(0);
m_Sprite->Draw(m_BGImage, 0, &D3DXVECTOR3(256.0f, 256.0f, 0.0f), 0, D3DCOLOR_XRGB(255, 255, 255));
m_Sprite->Flush();
m_Sprite->End();