Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Инициализация Direct3D MVS2008

63K
19 марта 2011 года
burime
5 / / 19.03.2011
Доброго ремени суток.
У меня возникла проблема и как камень перегородила дорогу на моем пути :mad:
Цель: осваиваю азы и пытаюсь создать устройство, как я понял просто для отоброжения окна
Использую: MVS 2008 и Microsoft DirectX 9 SDK (June 2010)
Проблема: Выдает две ошибки и понятия не имею, что и как исправить:

1>
 
Код:
dxfunc.obj : error LNK2019: unresolved external symbol _D3DXMatrixPerspectiveFovLH@20 referenced in function "long __cdecl DX3DInit(struct IDirect3D9 * *,struct IDirect3DDevice9 * *,struct HWND__ *,unsigned long,unsigned long,int)" (?DX3DInit@@YAJPAPAUIDirect3D9@@PAPAUIDirect3DDevice9@@PAUHWND__@@KKH@Z)


2>
 
Код:
dxfunc.obj : error LNK2019: unresolved external symbol _Direct3DCreate9@4 referenced in function "long __cdecl DX3DInit(struct IDirect3D9 * *,struct IDirect3DDevice9 * *,struct HWND__ *,unsigned long,unsigned long,int)" (?DX3DInit@@YAJPAPAUIDirect3D9@@PAPAUIDirect3DDevice9@@PAUHWND__@@KKH@Z)


Я пока что только пытаюсь освоить как программировать в DirectX, но в итоге что бы я не делал, в конце я прихожу к этим ошибкам :(
В самом коде ошибок нет, но на всякий случай выкладываю:
Код:
#include <windows.h> //В программировании для Windows необходим только один заголовочный файл с именем windows.h.

#include "d3d9.h"
#include "d3dx9.h"





// Функция инициализации Direct3D
HRESULT DX3DInit(IDirect3D9 **ppiD3D9,
                IDirect3DDevice9 **ppiD3DDevice9,
                HWND hWnd,
                DWORD iWidth,
                DWORD iHeight,
                BOOL bFullScreen)
{
  // Инициализация
  if((*ppiD3D9 = Direct3DCreate9(D3D_SDK_VERSION)) == NULL)
    return E_FAIL;

  // Заполняем основные параметры представления
  D3DPRESENT_PARAMETERS d3dpp;
  ZeroMemory(&d3dpp, sizeof(d3dpp));

  d3dpp.BackBufferWidth = iWidth;
  d3dpp.BackBufferHeight = iHeight;

  // Запрос на отображение в полноэкранном режиме
  int  iRes;
  if (!bFullScreen)
      iRes=MessageBox(hWnd, "Use fullscreen mode?", "Screen", MB_YESNO | MB_ICONQUESTION);
  else
      iRes = IDYES;


  if(iRes == IDYES)
  {
      //////////////////////////////////////////////////////////
      // Полноэкранный режим
      //////////////////////////////////////////////////////////
      // Установка параметров полноэкранного режима
      d3dpp.BackBufferFormat = D3DFMT_R5G6B5;
      d3dpp.SwapEffect       = D3DSWAPEFFECT_FLIP;
      d3dpp.Windowed         = FALSE;
      d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
      d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
  }
  else
  {
      //////////////////////////////////////////////////////////
      // Оконный режим
      //////////////////////////////////////////////////////////
      RECT wndRect;
      RECT clientRect;
      GetWindowRect(hWnd, &wndRect);
      GetClientRect(hWnd, &clientRect);  

      iWidth  = iWidth + (wndRect.right-wndRect.left)  - (clientRect.right-clientRect.left);
      iHeight = iHeight + (wndRect.bottom-wndRect.top) - (clientRect.bottom-clientRect.top);

      MoveWindow(hWnd, wndRect.left, wndRect.top, iWidth, iHeight, TRUE);

      // Получить формат пикселя
      D3DDISPLAYMODE d3ddm;
      (*ppiD3D9)->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);

      // Установка параметров
      d3dpp.BackBufferFormat = d3ddm.Format;
      d3dpp.SwapEffect       = D3DSWAPEFFECT_DISCARD;
      d3dpp.Windowed         = TRUE;
  }
 
  DWORD Flags= D3DCREATE_MIXED_VERTEXPROCESSING;

  // Создать 3D устройство
  HRESULT hRes;
  if(FAILED(hRes = (*ppiD3D9)->CreateDevice(
      D3DADAPTER_DEFAULT,
      D3DDEVTYPE_HAL, hWnd, Flags,
      &d3dpp, ppiD3DDevice9)))
      return hRes;

  // Установить перспективу
  float Aspect = (float)d3dpp.BackBufferWidth / (float)d3dpp.BackBufferHeight;
  D3DXMATRIX matProjection;
  D3DXMatrixPerspectiveFovLH(&matProjection, D3DX_PI/4.0f, Aspect, 0.1f, 1000.0f);
  (*ppiD3DDevice9)->SetTransform(D3DTS_PROJECTION, &matProjection);

  (*ppiD3DDevice9)->SetRenderState(D3DRS_LIGHTING, FALSE);

  return S_OK;
}

HRESULT DX3DInitZ(IDirect3D9 **ppiD3D9,
                IDirect3DDevice9 **ppiD3DDevice9,
                HWND hWnd,
                DWORD iWidth,
                DWORD iHeight,
                BOOL bFullScreen)
{
  // Инициализация
  if((*ppiD3D9 = Direct3DCreate9(D3D_SDK_VERSION)) == NULL)
    return E_FAIL;

  // Заполняем основные параметры представления
  D3DPRESENT_PARAMETERS d3dpp;
  ZeroMemory(&d3dpp, sizeof(d3dpp));

  d3dpp.BackBufferWidth = iWidth;
  d3dpp.BackBufferHeight = iHeight;
  d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
  d3dpp.EnableAutoDepthStencil = TRUE;
 
  // Запрос на отображение в полноэкранном режиме
  int  iRes;
  if (!bFullScreen)
      iRes=MessageBox(hWnd, "Use fullscreen mode?", "Screen", MB_YESNO | MB_ICONQUESTION);
  else
      iRes = IDYES;

  if(iRes == IDYES)
  {
      //////////////////////////////////////////////////////////
      // Полноэкранный режим
      //////////////////////////////////////////////////////////
      // Установка параметров полноэкранного режима
      d3dpp.BackBufferFormat = D3DFMT_R5G6B5;
      d3dpp.SwapEffect       = D3DSWAPEFFECT_FLIP;
      d3dpp.Windowed         = FALSE;
      d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
      d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT;
  }
  else
  {
      //////////////////////////////////////////////////////////
      // Оконный режим
      //////////////////////////////////////////////////////////
      RECT wndRect;
      RECT clientRect;
      GetWindowRect(hWnd, &wndRect);
      GetClientRect(hWnd, &clientRect);  

      iWidth  = iWidth + (wndRect.right-wndRect.left)  - (clientRect.right-clientRect.left);
      iHeight = iHeight + (wndRect.bottom-wndRect.top) - (clientRect.bottom-clientRect.top);

      MoveWindow(hWnd, wndRect.left, wndRect.top, iWidth, iHeight, TRUE);

      // Получить формат пикселя
      D3DDISPLAYMODE d3ddm;
      (*ppiD3D9)->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);

      // Установка параметров
      d3dpp.BackBufferFormat = d3ddm.Format;
      d3dpp.SwapEffect       = D3DSWAPEFFECT_DISCARD;
      d3dpp.Windowed         = TRUE;
  }
 
  DWORD Flags= D3DCREATE_MIXED_VERTEXPROCESSING;

  // Создать 3D устройство
  HRESULT hRes;
  if(FAILED(hRes = (*ppiD3D9)->CreateDevice(
      D3DADAPTER_DEFAULT,
      D3DDEVTYPE_HAL, hWnd, Flags,
      &d3dpp, ppiD3DDevice9)))
      return hRes;

   //Установить перспективу
 float Aspect = (float)d3dpp.BackBufferWidth / (float)d3dpp.BackBufferHeight;
 D3DXMATRIX matProjection;
  D3DXMatrixPerspectiveFovLH(&matProjection, D3DX_PI/4.0f, Aspect, 2.0f, 1000.0f);
  (*ppiD3DDevice9)->SetTransform(D3DTS_PROJECTION, &matProjection);

 (*ppiD3DDevice9)->SetRenderState(D3DRS_LIGHTING, FALSE);

  return S_OK;
}



IDirect3D9       *pD3D       = NULL;
IDirect3DDevice9 *pD3DDevice = NULL;


int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,
                    int iCmdShow)
{
   HWND         hWnd;
   MSG          msg;
   WNDCLASSEX   wndclass;

   wndclass.cbSize        = sizeof(WNDCLASSEX);

   wndclass.style         = CS_HREDRAW | CS_VREDRAW;

   wndclass.lpfnWndProc   = fnMessageProcessor;

   wndclass.cbClsExtra    = 0;

   wndclass.cbWndExtra    = 0;

   wndclass.hInstance     = hInstance;

   wndclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);

   wndclass.hCursor       = LoadCursor(NULL, IDC_CROSS);

   wndclass.hbrBackground = (HBRUSH) GetStockObject (DKGRAY_BRUSH);

   wndclass.lpszMenuName  = NULL;

   wndclass.lpszClassName = "Window Class"; // Имя класса
 
   wndclass.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);


   if(RegisterClassEx(&wndclass) == 0)
   {

       // Сбой программы, выход
       exit(1);

   }
 
   hWnd = CreateWindowEx(
      WS_EX_OVERLAPPEDWINDOW,
      "Window Class",            // Имя класса
      "Create Window Example",   // Текст заголовка
      WS_OVERLAPPEDWINDOW,
      0,
      0,
      320,
      200,
      NULL,
      NULL,
      hInstance,
      NULL);

   if(DX3DInit(&pD3D, &pD3DDevice, hWnd, 800, 600, FALSE)!=S_OK)
{
    MessageBox(hWnd, "Ошибка инициализации DirectX", "ERROR", MB_OK);
    return FALSE;
}
   ShowWindow(hWnd, iCmdShow);


   while(GetMessage (&msg, NULL, 0, 0))
   {
      TranslateMessage(&msg);

      DispatchMessage(&msg);
   }

   return (msg.wParam);
}

LRESULT CALLBACK fnMessageProcessor (HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
   switch(iMsg)
   {
      case WM_CREATE:
         return(0);
      case WM_PAINT:
         return(0);
      case WM_DESTROY:
         PostQuitMessage(0);
         return(0);
      default:
         return DefWindowProc(hWnd, iMsg, wParam, lParam);
   }
}
8.2K
21 марта 2011 года
user1
71 / / 16.03.2007
unresolved external symbol
oshibki, pokazivauschie otsutstvie podklucheniya DLL cherez LIB fail.
Ili v nastroikax proekta zadaetsya - Project/Properties/Linker/Input/Additional Dependencies
ili pragma comment.

#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")

Izuchai literaturu 'Osnovi C,C++'
63K
21 марта 2011 года
burime
5 / / 19.03.2011
все так просто ппц, знал же что собака зарыта где-то рядом, а искал гораздо глубже, огромное тебе спасибо добрый человек...
Но немогу понять меня ввело в заблуждение, что подключение
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")
тоже самое, что если в ручную добавить их Tools-options-Project and Solutions-и указать либы и инклуды, что я как бэ и сделал, но почему то не работает или это просто я не так понял на одном из форумов...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог