Форум программистов, компьютерный форум CyberForum.ru

Инициализация Direct3D на С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.83
vlad_ltd
3 / 3 / 0
Регистрация: 30.04.2011
Сообщений: 51
30.05.2011, 02:27     Инициализация Direct3D на С++ #1
Столкнулся с проблемами при изучении DirectX. Останавился на инициализации Direct3D, потому что
1. Пробую пример из самплов SDK - все работает, если что то изменяю, запускаю (выдается ошибка), отменяю действие и опять запускаю, ошибка остается, пример становится не рабочим. Первый раз переустановил SDK, потом стал делать копии примеров.

2. Примеры из книг Frank D. Luna и Фленова, с моими знаниями не отредоктировать под MVC2008

3. Нашел пример DirectX API: Инициализация Direct3D на сайте, но он тоже не запускался и ошибка была для меня не понятная(номер строки не был указан). Методом тыка понял что загвоздка на 34ой строчке. Цитата с сайта:
Итак, программа использующая Direct3D начинается с получения указателя на интерфейс IDirect3D9. С помощью полученного объекта можно создать нужный нам объект IDirect3DDevice9. Получить указатель на IDirect3D9 можно с помощью одной из немногих функций Direct3D:

d3d = Direct3DCreate9(D3D_SDK_VERSION);
но компилятор говорит, аргумент функции Direct3DCreate9 не приемлем.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include<d3d9.h>
#include<windows.h>
 
LRESULT __stdcall WndProc(HWND, UINT, WPARAM, LPARAM); 
 
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE,
                       LPSTR , int nCmdShow)
{
    int iii=1;
   WNDCLASS wc;
   wc.style = CS_OWNDC;
   wc.lpfnWndProc = WndProc;
   wc.cbClsExtra = 0;
   wc.cbWndExtra = 0;
   wc.hbrBackground = (HBRUSH)(6);
   wc.hCursor = LoadCursor(0, IDC_ARROW);
   wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
   wc.hInstance = hInstance;
   wc.lpszClassName = L"class";
   wc.lpszMenuName = NULL; 
 
   RegisterClass(&wc); 
 
   HWND hWnd = CreateWindow(L"class",L"Инициализация Direct3D",
                            WS_OVERLAPPEDWINDOW,200,100,
                            500,500,NULL,NULL,hInstance,NULL); 
 
   ShowWindow(hWnd,nCmdShow);
   UpdateWindow(hWnd); 
 
   IDirect3D9* d3d = 0;       // объект Direct3D
   IDirect3DDevice9* dev = 0; // устройство (видеокарта) 
 
//   d3d = Direct3DCreate9(D3D_SDK_VERSION); 
 
   D3DPRESENT_PARAMETERS pp;
   ZeroMemory(&pp,sizeof(pp)); 
 
   pp.BackBufferWidth = 500;
   pp.BackBufferHeight = 500;
   pp.BackBufferFormat = D3DFMT_X8R8G8B8;
   pp.BackBufferCount = 1;
   pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
   pp.hDeviceWindow = hWnd;
   pp.Windowed = true; 
 
   d3d->CreateDevice(D3DADAPTER_DEFAULT,
                     D3DDEVTYPE_REF,hWnd,
                     D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                     &pp, &dev);
   MSG msg;
   while (iii)
   {
     if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
     {
       if (msg.message == WM_QUIT)
         break;
       TranslateMessage(&msg);
       DispatchMessage(&msg);
     } 
 
     dev->Clear(0,NULL,D3DCLEAR_TARGET,
                D3DCOLOR_XRGB(255,255,255),1.0f,0); 
 
     dev->BeginScene();
     dev->EndScene(); 
 
     dev->Present(NULL,NULL,NULL,NULL);
     } 
 
   if (dev != NULL)
     dev->Release();
   if (d3d != NULL)
     d3d->Release();
   return 0;
} 
 
 LRESULT __stdcall WndProc (HWND hWnd, UINT msg,
                            WPARAM wParam, LPARAM lParam)
{
   switch (msg)
   {
   case WM_DESTROY:
     PostQuitMessage(0);
     return 0;
   }
   return DefWindowProc(hWnd,msg,wParam,lParam);
}
4 Так и не понял чем отличаются главные функции
C++
1
2
3
4
5
6
7
8
9
10
int WINAPI WinMain(HINSTANCE hinstance,
                   HINSTANCE prevInstance, 
                   PSTR cmdLine,
                   int showCmd)
 
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE,
                       LPSTR , int nCmdShow)
 
 
INT WINAPI wWinMain( HINSTANCE hInst, HINSTANCE, LPWSTR, INT )
Если есть возможность, выложите пожалуйста код инициализированого Direct3D с заполниными структурами и интерфейсами. Тоесть каркас, в котором можно будет делать визуализацию.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2011, 02:27     Инициализация Direct3D на С++
Посмотрите здесь:

C++ DirectX9 Direct3D
C++ Инициализация вектора
Класс Time для работы с временем в формате «час:минута:секунда» C++
Инициализация указателей C++
C++ Правильная инициализация ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vlad_ltd
3 / 3 / 0
Регистрация: 30.04.2011
Сообщений: 51
31.05.2011, 13:53  [ТС]     Инициализация Direct3D на С++ #2
Вопрос все еще актуален
slice
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
31.05.2011, 14:43     Инициализация Direct3D на С++ #3
В DX SDK правильные, 100% рабочие примеры. Если у тебя они не работают, то ты что-то делаешь не так.
DeadRipper
64 / 70 / 3
Регистрация: 25.06.2009
Сообщений: 244
31.05.2011, 18:43     Инициализация Direct3D на С++ #4
лучше текст ошибки приведите
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
31.05.2011, 18:52     Инициализация Direct3D на С++ #5
Горнаков "DirectX9 уроки программирования на c++". Основы там более или менее внятно даны. Опечатки в коде правда есть, но для общего понимания вполне неплохо написано. Да и к слову мало людей помнят наизусть, как инициализировать интерфейсы, если специально этим не занимаются. Лучше чем в документации, сэмплах и книгах хоть как не скажут(да и у вас читать код невозможно).
Yandex
Объявления
31.05.2011, 18:52     Инициализация Direct3D на С++
Ответ Создать тему
Опции темы

Текущее время: 14:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru