Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Помогите


Автор: Stas96 28.10.2009, 21:23
Помогите пожайлусто!!!!!Изучаю книгу "Френк Д. Луна - Программирование трехмерных игр с DirectX 9"
Ну у меня проблемма вот код представленный в книги для "инициализацию Direct3D-приложения и очистки экрана, заполнив его черным цветом "

d3dUtility.h
Код

// Включение основного заголовочного файла Direct3DX. В нем осуществляется
// включение других, необходимых нам заголовочных файлов Direct3D.
#include <d3dx9.h>

namespace d3d
{
    bool InitD3D(
        HINSTANCE hInstance,  // [in] Экземпляр приложения.
        int width,int height, // [in] Размеры вторичного буфера.
        bool windowed,       // [in] Оконный (true) или
                             //      полноэкранный (false) режим.
       D3DDEVTYPE deviceType,// [in] HAL или REF
       IDirect3DDevice9** device);// [out] Созданное устройство.
 
    int EnterMsgLoop(
        bool (*ptr_display)(float timeDelta));


LRESULT CALLBACK WndProc(
                         HWND hwnd,
                         UINT msg,
                         WPARAM wParam,
                         LPARAM lParam);

template<class T> void Release(T t)
{
    if(t)
    {
        t->Release();
        t = 0;
    }
}




template<class T> void Delete(T t)
{
    if(t)
    {
        delete t;
        t = 0;
    }
  }
}
int d3d::EnterMsgLoop(bool(*ptr_display)(float timeDelta))
{
    MSG msg;
    ::ZeroMemory(&msg, sizeof(MSG));

    static float lastTime = (float)timeGetTime();
    while(msg.message != WM_QUIT)
    {
        if(::PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
        {
            ::TranslateMessage(&msg);
            ::DispatchMessage(&msg);
        }
        else
        {
            float currTime = (float)timeGetTime();
            float timeDelta = (currTime - lastTime) * 0.001f;
            ptr_display(timeDelta); // вызов функции визуализации
            lastTime = currTime;
        }
     }
return msg.wParam;
}


d3dUtility.cpp
Код

#include "d3dUtility.h"



IDirect3DDevice9* Device = 0;

bool Setup()
{
    return true;
}
void Cleanup()
{

}

bool Display(float timeDelta)
{
    if(Device)
    {
        Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
                      0x00000000, 1.0f, 0);
        Device->Present(0, 0, 0, 0); // показ вторичного буфера
    }
    return true;
}
HRESULT IDirect3DDevice9::Clear(
     DWORD Count,
     const D3DRECT* pRects,
     DWORD Flags,
     D3DCOLOR Color,
     float Z,
     DWORD Stencil
);





LRESULT CALLBACK d3d::WndProc(HWND hwnd, UINT msg, WPARAM wParam,
                              LPARAM lParam)
{
    switch( msg )
    {
    case WM_DESTROY:
         ::PostQuitMessage(0);
         break;

    case WM_KEYDOWN:
         if( wParam == VK_ESCAPE )
             ::DestroyWindow(hwnd);
         break;
    }
    return ::DefWindowProc(hwnd, msg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hinstance,
                   HINSTANCE prevInstance,
                   LPSTR cmdLine,
                   int showCmd)
{
    if(!d3d::InitD3D(hinstance, 800, 600,
                  true, D3DDEVTYPE_HAL, &Device))
    {
        ::MessageBox(0, L"InitD3D() - FAILED", 0, 0);
        return 0;
    }

    if(!Setup())
    {
        ::MessageBox(0, L"Setup() - FAILED", 0, 0);
        return 0;
    }

    d3d::EnterMsgLoop( Display );

    Cleanup();

    Device->Release();

    return 0;
}





Выдает ошибку:"HRESULT IDirect3DDevice9::Clear(DWORD,const D3DRECT *,DWORD,D3DCOLOR,float,DWORD): повторное объявление функции не разрешается"

Автор: Alexeis 28.10.2009, 22:02

M
Alexeis
Модератор: Название темы должно отражать ее суть!


Или предлагайте новый вариант заголовка или делайте новую тему.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)