PMG

Форумы по созданию игр
Текущее время: 29 мар 2024 08:44

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Дирекс как класс
СообщениеДобавлено: 22 сен 2005 19:58 
Не в сети
Любитель

Зарегистрирован: 26 фев 2005 21:46
Сообщения: 29
Народ подскажите как зделать в приложение дирекс как класс, с помощью этого класса можна было инициализировать дирекс , рендерить сцены и т.д.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 23 сен 2005 16:25 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
В каком смысле как сделать? Что вроде этого:
class DX {
init
reset

start
stop

}

Или что-то другое?

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 сен 2005 21:17 
Не в сети
Любитель

Зарегистрирован: 26 фев 2005 21:46
Сообщения: 29
windows.cpp
// --- Обязательный включаемый файл
#include <windows.h>
#include"Include.h"
#include"Render.h"
DXRender MainRender;
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
// --- Глобальные переменные
HINSTANCE hInst; // Дескриптор экземпляра приложения
char ClassName[]="Window"; // Название класса окна
char AppTitle[]="Application Win32"; // Заголовок главного окна
bool fscreen=true;
MSG msg;
LPDIRECT3D9 pD3D = NULL; // Direct3D. Используется для создания Устройство рендеринга
LPDIRECT3DDEVICE9 pDevice = NULL; // Устройство рендеринга
D3DPRESENT_PARAMETERS d3dpp; // Параметры для создания Direct3D


void Render()
{
if(pDevice == NULL)
return;
// Очистка и закраска фона в красный цвет.
pDevice->Clear( 0, NULL, D3DCLEAR_TARGET,
D3DCOLOR_XRGB(255, 0, 0), 3.0f, 0 );
// Начало отрисовки сцены.
if(SUCCEEDED(pDevice->BeginScene()))
{
// Тут будем писать код для рисования.
//..
// Конец отрисовки сцены.
pDevice->EndScene();
}

// Вывод из следующего буфера на экран.
pDevice->Present( NULL, NULL, NULL, NULL );
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASS wc; // Структура для информации о класса окна
HWND hWnd; // Дескриптор главного окна приложения

hInst=hInstance;
// Заполнение структуры WNDCLASS для регистрации класса окна.
memset(&wc, 0, sizeof(wc));
wc.lpszClassName=ClassName; // Имя класса окон
wc.lpfnWndProc=(WNDPROC)WndProc; // Адрес оконной функции
wc.style=CS_HREDRAW|CS_VREDRAW; // Стиль класса окон
wc.hInstance=hInstance; // Экземпляр приложения
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION); // Пиктограмма для окон
wc.hCursor=LoadCursor(NULL,IDC_ARROW); // Курсор мыши для окон
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); // Кисть для окон
wc.lpszMenuName=NULL; // Ресурс меню окон
wc.cbClsExtra=0; // Дополнительная память
wc.cbWndExtra=0; // Дополнительная память

// Pегистрация класса окна.
RegisterClass(&wc);

// Создаем главное окно приложения.
hWnd=CreateWindow(
ClassName, // Имя класса окон
AppTitle, // Заголовок окна
WS_OVERLAPPEDWINDOW, // Стиль окна
CW_USEDEFAULT, // X-координаты
CW_USEDEFAULT, // Y-координаты
CW_USEDEFAULT, // Ширина окна
CW_USEDEFAULT, // Высота окна
NULL, // Дескриптор окна-родителя
NULL, // Дескриптор меню окна
hInst, // Дескриптор экземпляра приложения
NULL); // Дополнительная информация
if(!hWnd)
{
// Окно не создано, выдаем предупреждение.
MessageBox(NULL,"Create: error",AppTitle,MB_OK|MB_ICONSTOP);
return FALSE;
}

if(!SUCCEEDED(MainRender.InitD3D(hWnd,pD3D,pDevice,d3dpp)))
{
return 0;
}

// Отображаем окно.
ShowWindow(hWnd, nCmdShow);

// Обновляем содержимое клиентской области окна.
UpdateWindow(hWnd);


MSG msg;
while(GetMessage(&msg, NULL, 0, 0))
{
// Преобразование некоторых сообщений, полученных с помощью клавиатуры
TranslateMessage(&msg);

// Отправляем сообщение оконной процедуре
DispatchMessage(&msg);
}
return msg.wParam;
}

// --- Функция окна
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
char *str="First Windows aplication";

switch(msg)
{
// Необходимо обновить содержимое клиентской области окна.
case WM_PAINT:
{
Render();

};
break;

// Нажата левая клавиша мыши в клиентской области окна.
case WM_LBUTTONDOWN:
{


}; break;

// Пользователь удалил окно.
case WM_DESTROY:
{
// Если данная функция является оконной функцией главного окна, то
// следует в очередь сообщений приложения послать сообщение WM_QUIT
PostQuitMessage(0);
MainRender.ReleaseD3D(pD3D,pDevice);
}; break;

// Необработанные сообщения передаем в стандартную
// функцию обработки сообщений по умолчанию.
default: return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0l;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 сен 2005 21:18 
Не в сети
Любитель

Зарегистрирован: 26 фев 2005 21:46
Сообщения: 29
Render.cpp
#include"Render.h"
bool DXRender::InitD3D(HWND hWnd,LPDIRECT3D9 pD3D,LPDIRECT3DDEVICE9 pDevice,D3DPRESENT_PARAMETERS d3dpp)
{
// Создание необходимой для устройства переменной.
if((pD3D = Direct3DCreate9( D3D_SDK_VERSION ))==NULL)
return E_FAIL; // Выход в случае неудачи.

// Задание параметров для нашего устройства.
// Обнуление большинства параметров.
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE; // Устройство будет оконное.
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;

// Непосредственное создание устройства.
if( FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &pDevice)))
{
// Если не удалось создать устройство, то выходим.
return E_FAIL;
}

// Если устройство создалось нормально, то выходим.
return S_OK;

};

void DXRender::ReleaseD3D(LPDIRECT3D9 pD3D,LPDIRECT3DDEVICE9 pDevice)
{

if(pDevice)
pDevice->Release();
if(pD3D)
pD3D->Release();
};


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 сен 2005 21:19 
Не в сети
Любитель

Зарегистрирован: 26 фев 2005 21:46
Сообщения: 29
Render.h
#include <windows.h>
#include"Include.h"

class DXRender
{
public:
bool InitD3D(HWND hWnd,LPDIRECT3D9 pD3D,LPDIRECT3DDEVICE9 pDevice,D3DPRESENT_PARAMETERS d3dpp);
void ReleaseD3D(LPDIRECT3D9 pD3D,LPDIRECT3DDEVICE9 pDevice);
};


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 25 сен 2005 21:21 
Не в сети
Любитель

Зарегистрирован: 26 фев 2005 21:46
Сообщения: 29
Это моя попытка создать дирекс как класс, но при компляции появляется простое окно и ничего больше, не окрашывается в другой цвет ничего как бы инициализация и рендера дирекса ваше нет!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26 сен 2005 10:41 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
В отладчике смотрел - функция Render() вызывается?

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 30 сен 2005 08:48 
Не в сети
Любитель

Зарегистрирован: 26 фев 2005 21:46
Сообщения: 29
Вроде вызывается!
Лучше киньте исходник где дирекс как класс сделанный!
Если есть!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 30 сен 2005 16:51 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Вот такой движок тебя устроит? :
irrlicht.sourceforge.net

Инфо по нему: http://www.neogame.ru/articles/2/index.shtml

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 05 окт 2005 17:19 
Не в сети
Любитель

Зарегистрирован: 26 фев 2005 21:46
Сообщения: 29
А попроше исходник есть!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 окт 2005 09:02 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Проще не лучше.
Например, вот это не пойдет тебе:
http://www.codesampler.com/dx9src.htm
Там хоть не класс, но в принципе тоже самое ....

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 окт 2005 14:10 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 11 авг 2004 17:00
Сообщения: 283
Откуда: Москва
да бросьте вы изобретать велосипед: в Книге Трухильо "Быстродействующая графика для Windows средствами DirectDraw" есть обвязка для DitrectX, то же самое в книгах "Программирование трехмерной графики с Direct3d", Секреты программирования трехмерной графики для Windows 95, да и практически в любой книге пишется оболочка для вызовов DX.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 окт 2005 21:24 
Не в сети
Любитель

Зарегистрирован: 26 фев 2005 21:46
Сообщения: 29
да бросьте вы изобретать велосипед.Это всё правильно но хочется что самому изобрести что бы потом изобрести что то новое !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 06 янв 2006 11:22 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 11 дек 2004 22:33
Сообщения: 112
Откуда: Ханты-Мансийск
Могу сказать в чем ошибка. Раз делать DirectX в классах то надобы само устройство тоже в Private: установить:
class D3DDriver
{
public:
InitD3D();
SetScreenParam(BOOL Default, BOOL Mode, DWORD Width, DWORD Height, UINT RefreshRate);
SetFormatD3D(D3DFORMAT Format);
InitDevice();
private:
LPDIRECT3D9 pD3D;
LPDIRECT3DDEVICE9;
};
Мой способ класса DX9 все работает OK весь код есть в нете на моем сайте. Я писал письмо о вступлении в команду, если примите то с инициализацией проблем сильных не будет. 8)

_________________
С уважением, Владислав


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB