Модераторы: Rickert, Alexeis, BorisVorontsov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не хочет запускаться программа, DirectX 
:(
    Опции темы
stat007
Дата 3.10.2009, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: нет
Всего: -4



Всем привет..
Начал изучение DirectX, Написал программу, которая приведена в книге "Михаила Фленова: DirectX и C++, искоство программирования", вроде бы всё правильно, но компилятор выдаёт 4 ошибки, и не показывает где, (т.е. F4 не показывает строку с ошибкой). Кстате пишу в программе Visual Studio 6.0

Вот исходный код:
Код

//Файл dxfunc.h

#ifndef _DXFUNC_H_
#define _DXFUNC_H_
#include "d3d9.h"
#include "d3dx9.h"

HRESULT DX3DInit(IDirect3D9 **ppiD3D9,
                 IDirect3DDevice9 **ppiDDevice9,
                 HWND hWnd,
                 DWORD iWidth,
                 DWORD iHeight,
                 BOOL bFullScreen);
#endif


Код

//Файл dxfunc.cpp

#include "dxfunc.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, 2000.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;
}


А вот что выдаёт компилятор:
Цитата

--------------------Configuration: First - Win32 Debug--------------------
Compiling...
dxfunc.cpp
Linking...
dxfunc.obj : error LNK2001: unresolved external symbol _D3DXMatrixPerspectiveFovLH@20
dxfunc.obj : error LNK2001: unresolved external symbol _Direct3DCreate9@4
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/First.exe : fatal error LNK1120: 3 unresolved externals
Error executing link.exe.

First.exe - 4 error(s), 0 warning(s)


PM MAIL   Вверх
Alexeis
Дата 4.10.2009, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



  Либы дирекиксовкие не подключены к проекту. Линкер не знает как разрешить ссылки на функции директикса.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
stat007
Дата 4.10.2009, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: нет
Всего: -4



Скорее всего, в книге написано подключить в С++ к папкам в DirectX .h и .lib - это я сделал!
Далее ещё написано подключить (добавить) 2 библиотеки ("d3d9.lib" и "d3dx9.lib"), как это делается в среде Visual Studio .Net там написано:
Цитата

Project -> Properties -> Configuration Properties -> Linker -> Input

А вот как это делается в среде Visual Studio 6.0 - ненашол.  smile 
И кстате посоветуйте где можно скачать эту самую среду С++Visual Studio .Net. И лучше ли она Visual Studio 6.0?? Просто привык уже к шестой версии...)
PM MAIL   Вверх
Alexeis
Дата 4.10.2009, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



stat007, подключить можно универсальным способом.
Код

#pragma comment(lib, <libname>)



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
kemiisto
Дата 4.10.2009, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 1
Всего: 160



Цитата(stat007 @  4.10.2009,  09:44 Найти цитируемый пост)
И кстате посоветуйте где можно скачать эту самую среду С++Visual Studio .Net. И лучше ли она Visual Studio 6.0?? Просто привык уже к шестой версии...)

Скачать нужно Visual C++ Express 2008 с официального сайта. Google подскажет. smile Лучше, потому что прогресс, как известно, на месте не стоит.

У Alexeis'а, в коде очепатка. #pragma.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Rickert
Дата 5.10.2009, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Цитата(Alexeis @  4.10.2009,  22:10 Найти цитируемый пост)
Код

#prsgma comment(lib, <libname>)

Наверное ты хотел написать
Код
#pragma comment(lib, <libname>)

smile


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
stat007
Дата 5.10.2009, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: нет
Всего: -4



вроде настроел я систему как надо для DirectX, программа компилируется, но выдаёт 1 ошибку в строке со звёздочкой:
Код

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

Компилятор ругается на второй параметр в MessageBox, пишет:
Цитата

error C2664: MessageBoxW: невозможно преобразовать параметр 2 из 'const char [21]' в 'LPCWSTR'

Что это значит??
PM MAIL   Вверх
Rickert
Дата 5.10.2009, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



stat007, почитай что такое wide char, тип wchar_t и чем он отличается от char'а.
А лечить надо так:
Код
iRes=MessageBox(hWnd, L"Use fullscreen mode?", L"Screen", MB_YESNO | MB_ICONQUESTION);



--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
Alexeis
Дата 5.10.2009, 09:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 5
Всего: 459



Цитата(Rickert @  5.10.2009,  08:22 Найти цитируемый пост)
А лечить надо так:

  Либо в настройках снять галочку о том что проект юникодный.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rickert
Дата 5.10.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



А вообще, уважаемый stat007, прошу не лениться и пользоваться поиском - этот вопрос поднимался  сто пятьсот раз smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
stat007
Дата 5.10.2009, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 521
Регистрация: 9.10.2008

Репутация: нет
Всего: -4



Отлично, данная ошибка устронена в 3 местах:
Код

iRes=MessageBox(hWnd, L"Use fullscreen mode?", L"Screen", MB_YESNO | MB_ICONQUESTION);

Теперь компилятор выдаёт ещё 1 ошибку, но непоказывает где, и ещё одну подозрительную строку...
Цитата

ОШИБКА:

MSVCRTD.lib(crtexew.obj) : error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в функции ___tmainCRTStartup

Цитата

И ещё такая строка:

C:\Documents and Settings\Admin\Мои документы\Visual Studio 2008\Projects\First\Debug\First.exe : fatal error LNK1120: 1 неразрешенных внешних элементов

PM MAIL   Вверх
Rickert
Дата 6.10.2009, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



stat007, по всей видимости вы пытаетесь в консольном приложении вызывать WinMain функцию? Вам надо сменить тип проекта на win32 project.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
pirat77
Дата 6.10.2009, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 10.11.2008

Репутация: нет
Всего: нет



Такая же ошибка как и у автора топика,проект создан как win32 project, все варианты которые нашёл, перепробывал. Ничего не помогает. Как решить данный вопрос? 

PS: использую VS 2008 С++
Код

MSVCRTD.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
C:\Documents and Settings\Blackfox\Мои документы\Visual Studio 2008\Projects\DirectX\Debug\DirectX.exe : fatal error LNK1120: 1 unresolved externals
Build log was saved at "file://c:\Documents and Settings\UserName\Мои документы\Visual Studio 2008\Projects\DirectX\Debug\BuildLog.htm"

PM MAIL   Вверх
Rickert
Дата 7.10.2009, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



Приведите полный листинг кода.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
pirat77
Дата 7.10.2009, 06:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 10.11.2008

Репутация: нет
Всего: нет



//dxfunc.cpp
Код

#include "dxfunc.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, 2000.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;
}


//dxfunc.h
Код

#ifndef _DXFUNC_H_
#define _DXFUNC_H_

#include <d3d9.h>
#pragma comment ( lib, "d3d9.lib")
#include <d3dx9.h>
#pragma comment ( lib, "d3dx9.lib")

HRESULT DX3DInit(IDirect3D9 **ppiD3D9,
                 IDirect3DDevice9 **ppiDDevice9,
                 HWND hWnd,
                 DWORD iWidth,
                 DWORD iHeight,
                 BOOL bFullScreen);
#endif



PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0992 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.