С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 25.08.2012
Сообщений: 4

Visual C++ и DirectX SDK не работает код

25.08.2012, 13:35. Показов 1578. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Окно появляется и сразу исчезает, хотя должно вывести спрайт, не могу понять в чём проблема...

Пишет Программа "[5464] Huntlier v0.1.exe" завершилась с кодом 0 (0x0).

Вот код
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
//Вывод спрайта на экран
 
#include <windows.h>
#include <d3d10.h>
#include <C:\directxsdk\Include\D3DX10.h>
 
#define WINDOW_WIDTH 640
#define WINDOW_HEIGHT 480
 
// Глобальные переменнные
 
HWND g_hWnd=NULL;
D3D10_DRIVER_TYPE g_driverType=D3D10_DRIVER_TYPE_NULL;
ID3D10Device* g_pd3dDevice=NULL;
IDXGISwapChain* g_pSwapChain=NULL;
ID3D10RenderTargetView* g_pRenderTergetView=NULL;
ID3D10ShaderResourceView* g_pShaderResource=NULL;
ID3DX10Sprite* g_pSprite=NULL;
 
// Прототипы функций
 
HRESULT InitWindow(HINSTANCE hInstance, int nCmdShow);
HRESULT InitDirect3D10();
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void Cleanup();
void RenderScene();
 
// Начало выполнения программы
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) {
    //Создание окна приложения
    if( FAILED( InitWindow( hInstance, nCmdShow)))
        return 0;
    //Инициализация Direct3D
    if( FAILED( InitDirect3D10())) {
        Cleanup();
        return 0;
    }
    //Цикл обработки сообщений
    MSG msg={0};
    while( WM_QUIT != msg.message ) {
        if ( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE)) {
            TranslateMessage( &msg);
            DispatchMessage( &msg);
        }
        else {
            RenderScene();
        }
    }
    Cleanup();
    return (int) msg.wParam;
}
 
// Регистрация класса и создание окна
 
HRESULT InitWindow(HINSTANCE hInstance, int nCmdShow ) {
    //Регистрируем класс окна
    WNDCLASSEX wc;
    wc.cbSize=sizeof(WNDCLASSEX);
    wc.style=CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc=WndProc;
    wc.cbClsExtra=0;
    wc.cbWndExtra=0;
    wc.hInstance=hInstance;
    wc.hIcon=LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor=LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground=(HBRUSH)COLOR_WINDOW;
    wc.lpszMenuName=NULL;
    wc.lpszClassName=L"SimpleWindowClass";
    wc.hIconSm=LoadIcon(NULL, IDI_APPLICATION);
    if (!RegisterClassEx(&wc))
        return E_FAIL;
 
    //Создаём окно
    g_hWnd=CreateWindow(
        L"SimpleWindowClass",
        L"Huntlier DirectX 10 Sprite",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        WINDOW_WIDTH,
        WINDOW_HEIGHT,
        NULL,
        NULL,
        hInstance,
        NULL
    );
    //Если не удалось создать окно - выходим из функции
    if (!g_hWnd)
        return E_FAIL;
    //Отображаем окно на экране
    ShowWindow(g_hWnd, nCmdShow);
    UpdateWindow(g_hWnd);
 
    return S_OK;
}
 
// Инициализация Direct3D
 
HRESULT InitDirect3D10() {
    HRESULT hr=S_OK;
    //Узнаём размеры клиентской области окна
    RECT rc;
    GetClientRect( g_hWnd, &rc);
    UINT width=rc.right-rc.left;
    UINT height=rc.bottom-rc.top;
    //Список возможных типов устройств
    D3D10_DRIVER_TYPE driverTypes[]=
    {
        D3D10_DRIVER_TYPE_HARDWARE,
        D3D10_DRIVER_TYPE_REFERENCE,
    };
    UINT numDriverTypes=sizeof(driverTypes)/sizeof(driverTypes[0]);
    //Заполянем структуру
    DXGI_SWAP_CHAIN_DESC sd;
    ZeroMemory( &sd, sizeof(sd));
    sd.BufferCount=1;
    sd.BufferDesc.Width=width;
    sd.BufferDesc.Height=height;
    sd.BufferDesc.Format=DXGI_FORMAT_R8G8B8A8_UNORM;
    sd.BufferDesc.RefreshRate.Numerator=60;
    sd.BufferDesc.RefreshRate.Denominator=1;
    sd.BufferUsage=DXGI_USAGE_RENDER_TARGET_OUTPUT;
    sd.OutputWindow=g_hWnd;
    sd.SampleDesc.Count=1;
    sd.SampleDesc.Quality=0;
    sd.Windowed=TRUE;
    //Пытаемся создать устройство и цепочку переключений, проходя по списку, как только получилось - выход из цикла
    for( UINT driverTypeIndex=0; driverTypeIndex < numDriverTypes; driverTypeIndex++) {
        g_driverType=driverTypes[driverTypeIndex];
        hr=D3D10CreateDeviceAndSwapChain( NULL, g_driverType, NULL, 0, D3D10_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice);
        if ( SUCCEEDED(hr))
            break;
    }
    if ( FAILED(hr))
        return hr;
    //Представление данных для буфера визуализации
    ID3D10Texture2D *pBackBuffer;
    //Получим доступ к вторичному буферу с индексом 0
    hr=g_pSwapChain->GetBuffer(0, __uuidof( ID3D10Texture2D), (LPVOID*)&pBackBuffer);
    if( FAILED(hr))
        return hr;
    //Создадим представление данных
    hr=g_pd3dDevice->CreateRenderTargetView(pBackBuffer, NULL, &g_pRenderTergetView);
    pBackBuffer->Release();
    if( FAILED(hr))
        return hr;
 
    //Свяжем буффер визуализации с графическим конвейером
    g_pd3dDevice->OMSetRenderTargets(1, &g_pRenderTergetView, NULL);
 
    //Настроим область отображения
    D3D10_VIEWPORT vp;
    vp.Width=width;
    vp.Height=height;
    vp.MinDepth=0.0f;
    vp.MaxDepth=1.0f;
    vp.TopLeftX=0;
    vp.TopLeftY=0;
    g_pd3dDevice->RSSetViewports( 1, &vp );
 
    D3DX10_IMAGE_INFO InfoFromFile;
    D3DX10_IMAGE_LOAD_INFO LoadImageInfo;
 
    ZeroMemory( &InfoFromFile, sizeof(InfoFromFile));
    ZeroMemory( &LoadImageInfo, sizeof(LoadImageInfo));
 
    //Читаем информацию об изображении из файла
    hr=D3DX10GetImageInfoFromFile(L"DirectX.bmp", NULL, &InfoFromFile, NULL);
 
    LoadImageInfo.Width=InfoFromFile.Width;
    LoadImageInfo.Height=InfoFromFile.Height;
    LoadImageInfo.Depth=InfoFromFile.Depth;
    LoadImageInfo.FirstMipLevel=1;
    LoadImageInfo.MipLevels=InfoFromFile.MipLevels;
    LoadImageInfo.Usage=D3D10_USAGE_DEFAULT;
    LoadImageInfo.BindFlags=D3D10_BIND_SHADER_RESOURCE;
    LoadImageInfo.CpuAccessFlags=0;
    LoadImageInfo.MiscFlags=0;
    LoadImageInfo.Format=InfoFromFile.Format;
    LoadImageInfo.Filter=D3DX10_FILTER_NONE;
    LoadImageInfo.pSrcInfo=&InfoFromFile;
 
    hr=D3DX10CreateShaderResourceViewFromFile( g_pd3dDevice, L"DirectX10.bmp", &LoadImageInfo, NULL, &g_pShaderResource, NULL);
    
    if( FAILED(hr))
        return hr;
    
    hr=D3DX10CreateSprite( g_pd3dDevice, 1, &g_pSprite);
 
    if( FAILED(hr))
        return hr;
 
    return S_OK;
}
 
//Прорисовка трёхмерной сцены
void RenderScene() {
    HRESULT hr;
    //Очистка вторичного буфера
    float ClearColor[4]={0.1f, 0.5f, 0.1f, 1.0f};
    g_pd3dDevice->ClearRenderTargetView(g_pRenderTergetView, ClearColor);
    
    D3DXMATRIX mWorld;
    D3DXMATRIX mView;
    D3DXMATRIX mProjection;
 
    D3DXMatrixTranslation(&mWorld, 0.0f, 0.0f, 0.0f);
    D3DXMatrixPerspectiveFovLH(&mProjection, (float)D3DX_PI/4, 1.333f, 0.0f, 1.0f);
 
    g_pSprite->SetProjectionTransform(&mProjection);
 
    D3DXVECTOR3 vEyePt(0.0f, 0.0f, -3.0f);
    D3DXVECTOR3 vLookatPt(0.0f, 0.0f, 0.0f);
    D3DXVECTOR3 vUpVec(0.0f, 1.0f, 0.0f);
    D3DXMatrixLookAtLH( &mView, &vEyePt, &vLookatPt, &vUpVec);
 
    g_pSprite->SetViewTransform(&mView);
 
    g_pSprite->Begin( D3DX10_SPRITE_SORT_TEXTURE);
 
    D3DX10_SPRITE SpriteToDraw;
 
    SpriteToDraw.matWorld=mWorld;
 
    SpriteToDraw.TexCoord.x=0.0f;
    SpriteToDraw.TexCoord.y=0.0f;
 
    SpriteToDraw.TexSize.x=1.0f;
    SpriteToDraw.TexSize.y=1.0f;
    SpriteToDraw.ColorModulate=D3DXCOLOR(1.0f, 1.0f, 1.0f, 1.0f);
    SpriteToDraw.pTexture=g_pShaderResource;
    SpriteToDraw.TextureIndex=0;
 
    hr=g_pSprite->DrawSpritesBuffered(&SpriteToDraw, 1);
    if( FAILED(hr))
        MessageBox(NULL, L"Ошибка при выводе спрайта", L"Error", 0);
 
    g_pSprite->Flush();
    g_pSprite->End();
 
    g_pSwapChain->Present( 0, 0);
 
}
 
//Обработка сообщений
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
    switch(message) {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    case WM_KEYDOWN:
        {
            if (wParam== VK_ESCAPE)
                PostQuitMessage(0);
            return 0;
        };
        break;
 
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
 
//Очистка памяти
void Cleanup() {
    if(g_pd3dDevice) g_pd3dDevice->ClearState();
 
    if(g_pRenderTergetView) g_pRenderTergetView->Release();
    if(g_pSwapChain) g_pSwapChain->Release();
    if(g_pd3dDevice) g_pd3dDevice->Release();
 
    if(g_pSprite) g_pSprite->Release();
    if(g_pShaderResource) g_pShaderResource->Release();
}
Подскажите, что не так?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.08.2012, 13:35
Ответы с готовыми решениями:

не работает код visual с++ 2010 & derectx sdk 11
Пробую создать игру по книге &quot;Создание стратегий Visual c++ &amp; directx&quot; но при подключение библиотек directx пишет ошибку &quot;библеотека...

Visual Studio 2005 + DirectX SDK
Доброе утро! У меня есть Visual Studio 2005. Какую версию DirectX мне лучше скачать и где, что-бы DirectX хорошо работал на Visual Studio...

DirectX SDK и Visual Studio 2010
Установил DirectX SDK в книге Франк Луна - &quot;Введение в программирование трехмерных игр с DirectX 9&quot; говорится что нужно показать...

2
 Аватар для defer
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
25.08.2012, 16:23
С DirectX SDK в папке Samples, лежит много примеров
1
0 / 0 / 0
Регистрация: 25.08.2012
Сообщений: 4
25.08.2012, 19:00  [ТС]
Разобрался, проблема была в том что проект сам не находил картинку, пришлось закинуть её к исходному коду в папку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.08.2012, 19:00
Помогаю со студенческими работами здесь

Как подключить directx sdk к visual c++ 2010
Как подключить directx sdk к visual c++ 2010 &quot; после ответа не закрывайте тему будут ещё вопросы!!!&quot; Одна тема - один вопрос.

Подключение DirectX SDK к Visual Studio 2010
Здравствуйте! Установил Visual Studio 2010. Поставил DirectX SDK (последний июньский). Пытаюсь через обозреватель решений-&gt;ссылки...

Подключение directx sdk в Visual Studio 2010
Здравствуйте. Знаю что ни 1 раз тут был этот вопрос. Прочитал несколько подобных тем, но ничего так и не вышло. Пожалуйста, приведите...

Применение библиотек DirectX 9 SDK в Visual Studio 2010 (C#)
Моя среда: Windows 7 Ult, карта NVIDIA GeForce 8600 GT, легко воспроизводящая всю графику Vista и качественные авиасимуляторы. Я давно...

Разработка игр с Visual studio 2015 и DirectX Sdk
Проблема вот в чем: у меня стоит VS2015 и нужно подключить туда DX SDK, но при установке DXSDK_Jun10.exe, прямо перед концом установки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru