Пишу движок, остановился на DirectX'е всё компилируются без ошибок, но добавить вершинные буферы не получается... инициализацию я взял с какого то сайта
//============================================== WNDCLASSEX windowsclass; //структура, содержащая различные параметры окна MSG msg; //идентификатор сообщения HWND hWnd; //дескриптор LPDIRECT3D9 pDirect3D = 0; //указатель на самый главный интерфейс в DirectX LPDIRECT3DDEVICE9 pDirect3DDevice = 0; //указатель на устройство, если сильно упростить, то можно считать что это наша видеокарта //===============================================================================================================
#include <C:\Users\Morglod\Documents\Visual Studio 2008\Projects\MoRealEngine\MoRealEngine\include\MoRealRender.h>
while(msg.message!=WM_QUIT) // Цикл обработки сообщений { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { Render(); //Функция рендера } } } }
вот код MoRealRender.h
Code
//MoRealRender //
struct vertex // структура для хранения вершин { float x,y,z; unsigned long color; };
HRESULT SetRenderState( D3DRENDERSTATETYPE State, DWORD Value );
//========================================= инициализация DirectX================================================= HRESULT InitialDX(HWND hWnd); // Функция инициализации DIRECTX void Render(); // Функция рендеринга(отрисовки) void ReleaseDX(); // Функция освобождения устройств.
HRESULT InitialDX(HWND hWnd) // инициализация DirectX { if(NULL==(pDirect3D=Direct3DCreate9(D3D_SDK_VERSION))) //создание основного интерфейса return E_FAIL; D3DDISPLAYMODE Display; // структура с настройками монитора if (FAILED(pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&Display))) // получение настроек монитора. return E_FAIL; IDirect3DVertexBuffer9* vb = NULL; //Интерфейс вершинного буфера
D3DPRESENT_PARAMETERS Direct3DParametr; // Структура с настройками ZeroMemory(&Direct3DParametr,sizeof(Direct3DParametr)); // Обнуление структуры Direct3DParametr.Windowed=TRUE; // Рeжим отображения приложения(true - оконное, false -полноэкранное) Direct3DParametr.SwapEffect=D3DSWAPEFFECT_DISCARD; // Метод переключения буферов Direct3DParametr.BackBufferFormat=Display.Format; // Формат пикселя(колличество разрядов цвета) Direct3DParametr.EnableAutoDepthStencil=TRUE; // Управление буфером глубины Direct3DParametr.AutoDepthStencilFormat=D3DFMT_D16; // Формат буфера глубины Direct3DParametr.BackBufferWidth=Display.Width; // Ширина буфера Direct3DParametr.BackBufferHeight=Display.Height; // Высота буфера // Direct3DParametr.FullScreen_RefreshRateInHz=Display.RefreshRate; //Частота обновления экрана(только в полноэкранном режиме)
if (FAILED(pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, // используемая видеокарта D3DDEVTYPE_HAL, // тип устройства hWnd, // дескриптор родительского окна D3DCREATE_HARDWARE_VERTEXPROCESSING, //режим обработки шейдеров &Direct3DParametr, // структура с настройками &pDirect3DDevice))) // указатель на устройство
return E_FAIL;
return S_OK; }
void Render() // отрисовка сцены { pDirect3DDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,255),1.0f,0); //Очистка вторичного буфера pDirect3DDevice->BeginScene(); //Начало рендеринга // Код отрисовки сцены pDirect3DDevice->EndScene(); //Конец рендеринга pDirect3DDevice->Present(NULL,NULL,NULL,NULL); // копирование вторичного буфера в первичный }
исправьте пожалуйста код и добавьте отрисовку полигона с меня +++++++++++++++++++++++
Добавлено (22.02.2011, 17:46) --------------------------------------------- среда разработки microsoft visual studio 2008 express edition windows 7 x86
Добавлено (22.02.2011, 18:50) --------------------------------------------- немного дописал MoRealRender.h (взял код отсюда http://shatalov.su/directx_primer/vertex_buffer.php ) вот что получилось
Code
//MoRealRender // struct vertex // структура для хранения вершин { float x,y,z; unsigned long color; };
//========================================= инициализация DirectX================================================= HRESULT InitialDX(HWND hWnd); // Функция инициализации DIRECTX void Render(); // Функция рендеринга(отрисовки) void ReleaseDX(); // Функция освобождения устройств.
HRESULT InitialDX(HWND hWnd) // инициализация DirectX { if(NULL==(pDirect3D=Direct3DCreate9(D3D_SDK_VERSION))) //создание основного интерфейса return E_FAIL; D3DDISPLAYMODE Display; // структура с настройками монитора if (FAILED(pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&Display))) // получение настроек монитора. return E_FAIL; IDirect3DVertexBuffer9* vb = NULL; //Интерфейс вершинного буфера
D3DPRESENT_PARAMETERS Direct3DParametr; // Структура с настройками ZeroMemory(&Direct3DParametr,sizeof(Direct3DParametr)); // Обнуление структуры Direct3DParametr.Windowed=TRUE; // Рeжим отображения приложения(true - оконное, false -полноэкранное) Direct3DParametr.SwapEffect=D3DSWAPEFFECT_DISCARD; // Метод переключения буферов Direct3DParametr.BackBufferFormat=Display.Format; // Формат пикселя(колличество разрядов цвета) Direct3DParametr.EnableAutoDepthStencil=TRUE; // Управление буфером глубины Direct3DParametr.AutoDepthStencilFormat=D3DFMT_D16; // Формат буфера глубины Direct3DParametr.BackBufferWidth=Display.Width; // Ширина буфера Direct3DParametr.BackBufferHeight=Display.Height; // Высота буфера // Direct3DParametr.FullScreen_RefreshRateInHz=Display.RefreshRate; //Частота обновления экрана(только в полноэкранном режиме)
if (FAILED(pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, // используемая видеокарта D3DDEVTYPE_HAL, // тип устройства hWnd, // дескриптор родительского окна D3DCREATE_HARDWARE_VERTEXPROCESSING, //режим обработки шейдеров &Direct3DParametr, // структура с настройками &pDirect3DDevice))) // указатель на устройство
вот исходники, немного дописал и добавил комменты для верности MoRealEngine.cpp
Code
//MoRealEngine // Created by Morglod // Основы DirectX http://gcup.ru/forum/7-1588-1 //===================================== // Для directx //==================================== #include <windows.h> // работа с окнами #include <dinput.h> #pragma comment (lib, "d3dx9.lib") #pragma comment (lib, "d3d9.lib") #pragma comment (lib, "DXGuid.lib") #pragma comment (lib, "dinput8.lib") #include <d3dx9core.h> #include <d3d9.h> #include <d3dx9.h> #include <d3dx9tex.h> //=================================
//внимание ! код приведённый ниже, ВСЕГДА должен находиться здесь!============================================== WNDCLASSEX windowsclass; //структура, содержащая различные параметры окна MSG msg; //идентификатор сообщения HWND hWnd; //дескриптор LPDIRECT3D9 pDirect3D = 0; //указатель на самый главный интерфейс в DirectX LPDIRECT3DDEVICE9 pDirect3DDevice = 0; //указатель на устройство, если сильно упростить, то можно считать что это наша видеокарта //===============================================================================================================
// #include "SDL.h" // sdl (render) /*#include <iostream> // cin, out #include <clocale> // поддержка русского языка #include <conio.h> // _getch() #include <stdlib.h> // поддержка функции очистки экрана system("cls")*/ #include <C:\Users\Morglod\Documents\Visual Studio 2008\Projects\MoRealEngine\MoRealEngine\include\MoRealObjects.h> #include <C:\Users\Morglod\Documents\Visual Studio 2008\Projects\MoRealEngine\MoRealEngine\include\MoRealRender.h> #include <C:\Users\Morglod\Documents\Visual Studio 2008\Projects\MoRealEngine\MoRealEngine\include\MoRealFunctions.h> #include <C:\Users\Morglod\Documents\Visual Studio 2008\Projects\MoRealEngine\MoRealEngine\include\MoRealInput.h> #include <C:\Users\Morglod\Documents\Visual Studio 2008\Projects\MoRealEngine\MoRealEngine\include\MoRealEngineManager.h>
struct vertex // структура для хранения вершин { float x,y,z; unsigned long color; };
//========================================= инициализация DirectX================================================= HRESULT InitialDX(HWND hWnd); // Функция инициализации DIRECTX void Render(); // Функция рендеринга(отрисовки) void ReleaseDX(); // Функция освобождения устройств.
HRESULT InitialDX(HWND hWnd) // инициализация DirectX { if(NULL==(pDirect3D=Direct3DCreate9(D3D_SDK_VERSION))) //создание основного интерфейса return E_FAIL; D3DDISPLAYMODE Display; // структура с настройками монитора if (FAILED(pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&Display))) // получение настроек монитора. return E_FAIL; IDirect3DVertexBuffer9* vb = NULL; //Интерфейс вершинного буфера
D3DPRESENT_PARAMETERS Direct3DParametr; // Структура с настройками ZeroMemory(&Direct3DParametr,sizeof(Direct3DParametr)); // Обнуление структуры Direct3DParametr.Windowed=TRUE; // Рeжим отображения приложения(true - оконное, false -полноэкранное) Direct3DParametr.SwapEffect=D3DSWAPEFFECT_DISCARD; // Метод переключения буферов Direct3DParametr.BackBufferFormat=Display.Format; // Формат пикселя(колличество разрядов цвета) Direct3DParametr.EnableAutoDepthStencil=TRUE; // Управление буфером глубины Direct3DParametr.AutoDepthStencilFormat=D3DFMT_D16; // Формат буфера глубины Direct3DParametr.BackBufferWidth=Display.Width; // Ширина буфера Direct3DParametr.BackBufferHeight=Display.Height; // Высота буфера // Direct3DParametr.FullScreen_RefreshRateInHz=Display.RefreshRate; //Частота обновления экрана(только в полноэкранном режиме)
if (FAILED(pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, // используемая видеокарта D3DDEVTYPE_HAL, // тип устройства hWnd, // дескриптор родительского окна D3DCREATE_HARDWARE_VERTEXPROCESSING, //режим обработки шейдеров &Direct3DParametr, // структура с настройками &pDirect3DDevice))) // указатель на устройство
И вопрос от меня: для отоборажения двухмерной графики целесообразнее использовать преобразованные или непреобразованные вершины? Знаю, вопрос странный, но от ответа на него зависит следующий.
И вопрос от меня: для отоборажения двухмерной графики целесообразнее использовать преобразованные или непреобразованные вершины?
Уточни, что имеется в виду под "преобразованными" и "непреобразованными" вершинами? Если речь про RHW, то однозначно лучше без него. C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)