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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инициализацию Direct3D-приложения и очистки экрана, нициализацию Direct3D-приложения  
V
    Опции темы
Stas96
Дата 28.10.2009, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 13.9.2009
Где: Дом

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



Помогите пожайлусто!!!!!Изучаю книгу "Френк Д. Луна - Программирование трехмерных игр с 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): повторное объявление функции не разрешается" 
PM MAIL   Вверх
EgoBrain
Дата 29.10.2009, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Эй, эй, стоп! Попридержи лошадей  smile 
Как у тебя с программированием на С++? Видимо не очень раз ты такое пытаешься запрограммировать.
Настоятельно рекомендую сначала поучить базовый уровень и попробовать писать более простые программы (по сравнению с этой).
Во-первых смотри: сразу хочу обратить внимание на то, что функции Setup(), Cleanup(), Display() а так же оконная процедура и главная функция программы рабоатют в отдельном модуле (по задумке автора) а не в модуле d3dUtility.h/cpp.
Во-вторых: в модуле d3dUtility.cpp ты должен описать реализацию функции d3dInit(). Вот EnterMassegeLoop и шаблоны освобождения ресурсов правельно вставил.
В-третих (касательно самого вопроса): 
Цитата

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

Ты пытаешься объявить описание бибилотечной функции IDirect3DDevice9::Clear(), которая содержится в DirectX, то есть ты пользуешь  готовую библиотеку а не пишешь сам. На будущее запомни что зачастую авторы приводят в литературе описание функций, чтоб ты мог сразу посмотреть ее аргументы с пояснением специалиста не отвлекаясь на справку.
PM MAIL ICQ Skype   Вверх
Stas96
Дата 29.10.2009, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 13.9.2009
Где: Дом

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



А попроще программы это в консоле я так понял...или посоветуй книг  чтобы войти в это дело пожайлусто..а то для меня эта книга уже непонятна)Спасибо за ответ!
А с программированием на С++ у меня начальный уровень коннсольных приложений в DOS-Окне)


Это сообщение отредактировал(а) Stas96 - 29.10.2009, 09:42
PM MAIL   Вверх
EgoBrain
Дата 30.10.2009, 03:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Извини, к сожалению не могу посоветовать книг других, так как сам С++ не изучал. Если есть опыть в ООП языках (Delphi, C#), то можно посоветовать начать на них DirectX изучать, а затем уже на С++ переходить. Я на С# пробовал, терь на С++ пробую...
PM MAIL ICQ Skype   Вверх
Stas96
Дата 30.10.2009, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 13.9.2009
Где: Дом

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



Спасибо большое за помощь...Я уже кажись нашел книгу по изучению DirectX вот автор и название:"Фленов - DirectX и C++ Искусство программирования"-В этой книги описывается все доступным языком на мой взгляд.Все понятно и просто)В отличии от :"Горнаков - DirectX 9 - Уроки программирования на C++"Если изучаешь DirectX на С++ То могу посоватовать книги Фленова.
Еще раз Спасибо)
PM MAIL   Вверх
EgoBrain
Дата 31.10.2009, 03:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Фленова я тоже сомтрел, но уверяю тебя книга Фрэнка Д. Луна намного лучше, там мат. часть объясняется подробно (имхо это очень нужная вещь для книг такого рода), так кстати не один я считаю  smile 
А вообще идеальный вариант смотреть сразу несколько книг (к примеру Д. Луна и Фленова) и выбирать подход наиболее приемлемый для тебя или который ты считаешь более логичным и т.п.
PM MAIL ICQ Skype   Вверх
Sfate
Дата 2.12.2009, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Angry Beaver
*


Профиль
Группа: Участник
Сообщений: 111
Регистрация: 7.9.2008
Где: mov AL, BL

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



спасибо всем за подсказанную литературу... вот решил тоже начать с++, после c# непривычно))
--------------------
"Начинающий программист твердо уверен, что в 1 кбайте 1000 байт, а опытный точно знает, что в 1 километре 1024 метра..." © Unknown
PM MAIL WWW ICQ   Вверх
Stas96
Дата 6.12.2009, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 13.9.2009
Где: Дом

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



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

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

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


 




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


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

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