首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

无法打开源文件 d3dx9tex.h解决方法

2013-01-25 
无法打开源文件 d3dx9tex.h本帖最后由 jintuo 于 2012-07-19 10:17:52 编辑刚开始研究beginning directx9

无法打开源文件 d3dx9tex.h
本帖最后由 jintuo 于 2012-07-19 10:17:52 编辑 刚开始研究beginning directx9
第一个引用d3dx9tex.h的代码就报这个错误。

我已经在项目-》属性-》配置属性-》连接器-》常规-》附加库目录里面添加了“C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include”文件夹。而且我看到这个文件夹下面有“d3dx9tex.h”这个文件。
可是在vs2010“解决方案资源管理器”中的“外部依赖项”就是没有“d3dx9tex.h”。

debug就报错。

网上找了好久也没找到为什么。有哪位清楚的帮帮忙好么?

源码如下


#include <windows.h>
#include <d3d9.h>
#include <d3dx9tex.h>
#include <string>

HINSTANCE hInst;
HWND wndHandle;

bool initWindow(HINSTANCE hInstance);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

// DirectX functions and global variables
HRESULT                 lastResult;
LPDIRECT3D9             pD3D;
LPDIRECT3DDEVICE9       pd3dDevice;
IDirect3DSurface9*bkgrd;

bool initDirect3D(HWND hwnd);
IDirect3DSurface9* getSurfaceFromBitmap(std::string filename);
void Render(void);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
if (!initWindow(hInstance))
return false;

if (!initDirect3D(wndHandle))
return false;

bkgrd = getSurfaceFromBitmap("./background.bmp");
if (bkgrd == NULL)
{
MessageBox(NULL, "Make sure the file background.bmp is in the current directory", "ERROR", MB_OK);
return 0;
}

// Main message loop:
// Enter the message loop
    MSG msg; 
    ZeroMemory( &msg, sizeof(msg) );
    while( msg.message!=WM_QUIT )
    {
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
        {
TranslateMessage( &msg );
            DispatchMessage( &msg );
        }
else
{
// call our render function
Render();
}
    }

if( pd3dDevice != NULL) 
{
        pd3dDevice->Release();
pd3dDevice = NULL;
}
    if( pD3D != NULL)
{
        pD3D->Release();
pD3D = NULL;
}

return (int) msg.wParam;
}

bool initWindow(HINSTANCE hInstance)
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style= CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc= (WNDPROC)WndProc;
wcex.cbClsExtra= 0;
wcex.cbWndExtra= 0;
wcex.hInstance= hInstance;
wcex.hIcon= 0;
wcex.hCursor= LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName= NULL;
wcex.lpszClassName= "DirectXExample";
wcex.hIconSm= 0;
RegisterClassEx(&wcex);

wndHandle = CreateWindow("DirectXExample", 


 "DirectXExample", 
 WS_OVERLAPPEDWINDOW,
 CW_USEDEFAULT, 
 CW_USEDEFAULT, 
 640, 
 480, 
 NULL, 
 NULL, 
 hInstance, 
 NULL);
   if (!wndHandle)
      return false;
   
   ShowWindow(wndHandle, SW_SHOW);
   UpdateWindow(wndHandle);

   return true;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) 
{
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}

bool initDirect3D(HWND hwnd)
{
if( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
{
lastResult = E_FAIL;
return false;
}

D3DPRESENT_PARAMETERS d3dpp; 
    ZeroMemory( &d3dpp, sizeof(d3dpp) );
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.BackBufferCount  = 1;
d3dpp.BackBufferHeight = 480;
d3dpp.BackBufferWidth  = 640;
d3dpp.hDeviceWindow    = hwnd;

    if( FAILED( pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,
                                      D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                      &d3dpp, &pd3dDevice ) ) )
    {
lastResult = E_FAIL;
        return false;
    }

return true;
}

IDirect3DSurface9* getSurfaceFromBitmap(std::string filename)
{
HRESULT hResult;
IDirect3DSurface9* surface = NULL;
D3DXIMAGE_INFO imageInfo;

// Get the width and height info from this bitmap
hResult = D3DXGetImageInfoFromFile(filename.c_str(), &imageInfo);
if FAILED (hResult)
return NULL;

hResult = pd3dDevice->CreateOffscreenPlainSurface(imageInfo.Width, imageInfo.Height, D3DFMT_X8R8G8B8, D3DPOOL_DEFAULT, &surface, NULL);
if (FAILED(hResult))
return NULL;

hResult = D3DXLoadSurfaceFromFile(surface, NULL, NULL, filename.c_str(), NULL, D3DX_DEFAULT, 0, NULL);
if (FAILED(hResult))
return NULL;

return surface;
}

void Render(void)
{
if( NULL == pd3dDevice )
        return;

    // Clear the backbuffer to a blue color
    pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );



IDirect3DSurface9* backbuffer;
pd3dDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO, &backbuffer);

HRESULT hResult = pd3dDevice->StretchRect(bkgrd, NULL, backbuffer, NULL, D3DTEXF_NONE);
if (hResult != D3D_OK)
MessageBox(NULL,"failed", "error", MB_OK);

// Present the backbuffer contents to the display
    pd3dDevice->Present( NULL, NULL, NULL, NULL );
}


[解决办法]
C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include
把这个目录在配置中从最下面移到最上面试试看

热点排行