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

Как вывести фигуру в окне? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Класс "Множество" и операции над ним http://www.cyberforum.ru/cpp-beginners/thread1244207.html
Не хватает опыта понять ошибку Здравствуйте! Никак не получается тот же результат хотя проверял несколько раз вот само задание: #include <iostream> using namespace std; const int MaxSize = 100; class Set{ int len; char members; int find(char ch);
C++ Определить, какие вершины достижимы из заданной вершины S Подскажите алгоритм для этой задачи, пожалуйста. Достижимые вершины Имя входного файла: graph.in Имя выходного файла: graph.out Ограничение по времени: 2 секунды Ограничение по памяти: 64 мегабайта Задан неориентированный граф, нужно определить, какие вершины достижимы http://www.cyberforum.ru/cpp-beginners/thread1244197.html
C++ Как правильно очищать вектор указателей
Привет Всем! Есть вопрос по вектору указателей, как правильно очищать память при таком случае очищение происходит существенно медленнее чем инициализация, но память очищается: #include <vector> void creat(std::vector<int*> &p) { for (int i(0); i<5000000; i++) {
Защита 2д онлайн игры от взломов C++
Здравствуйте, вообщем, я пытаюсь написать 2д рпг онлайн игру, которую в будущем хотелось бы переделать под андроид и выпустить в маркет, но речь не об этом. На данный момент игра реализована как обычная 2д рпг. Позже переделаю её под клиент, который будет общаться с сервером и все необходимые данные будут заноситься сервером в БД. Больше всего беспокоюсь по поводу защиты. В принципе, уже...
C++ Подключение библиотеки Glaux.lib и ошибка компиляции http://www.cyberforum.ru/cpp-beginners/thread1244127.html
Здравствуйте, У меня возникла проблема - надо подключить библиотеку GLAux (OpenGL-ая). Скачал от нее .h и .lib, подключил .h через #include, в свойствах проекта добавил Glaux.lib в дополнительные зависимости. При компиляции выдает ошибку LNK1104 : не удается открыть файл "Glaux.lib". Помогите советом, как ее правильно подключить. У меня VS C++ 2010 Express. Заранее спасибо)
C++ Работает ли Борланд C++ 6 с Windows 7 Извиняюсь за "глупый" вопрос. Несколько лет работал с С++ В6 менялись компы, менялись ОС, но всё время установка С++ получалась не с "первого раза" (что терпимо), и иногда в процессе работы - "падала" (что тоже терпимо)... В последнее время перестала запоминать текущие установки Desktop-ы (точнее брекпоинты, что тоже терпимо) Потом был годичный перерыв в работе за время которого произошло... подробнее

Показать сообщение отдельно
Discovert
0 / 0 / 0
Регистрация: 18.08.2014
Сообщений: 5

Как вывести фигуру в окне? - C++

18.08.2014, 20:19. Просмотров 411. Ответов 9
Метки (Все метки)

Всем доброго дня.
Я знаком с C++ довольно поверхностно, но на уровне консольного приложения знаю, возможно, все. Начал изучать DirectX по книгам Горнакова С.Г., для пущего реализма поставил VC++6.0 и DX9 под WinXP - все, как у него. И все же постоянно приходится адаптировать код, чтобы избавиться от ошибок. До сего момента справлялся, однако теперь в тупике. Следующий код собирается/компилируется и якобы исполняется - в диспетчере приложений имя своего творения в списке процессов наблюдаю, однако никакого визуального эффекта кроме этого нет. Собственно, код:

Кликните здесь для просмотра всего текста
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
#include <windows.h> 
#include <Winerror.h> 
#include <d3d9.h>
#pragma comment(lib, "d3d9.lib")
 
/*****************************Инициализация Direct3D************************************/
 
        /**---------------Глобальные переменные--------------**/
        /**/   LPDIRECT3D9 pDirect3D = NULL;                /**/
        /**/   LPDIRECT3DDEVICE9 pDirect3DDevice = NULL;    /**/
        /**/        struct CUSTOMVERTEX                     /**/
        /**/        {                                       /**/
        /**/        FLOAT X, Y, Z, rhw;                     /**/
        /**/        DWORD COLOR;                            /**/
        /**/        };                                      /**/
        /**/ LPDIRECT3DVERTEXBUFFER9 pBufferVershin = NULL; /**/
        /**--------------------------------------------------**/
 
#define D3DFVF_CUSTOMVERTEX D3DFVF_XYZRHW | D3DFVF_DIFFUSE  //Директива описывает формат хранения данных о вершинах полигона. Используемый вариант - FVF.
                
/*--------------------Функция инициализации Direct3D----------------------*/
 
    HRESULT InitialDirect3D(HWND hWnd)
    {
        if (NULL == (pDirect3D = Direct3DCreate9(D3D_SDK_VERSION)))
        return E_FAIL;
        D3DDISPLAYMODE Display;
        if (FAILED(pDirect3D -> 
                   GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &Display)))
        return E_FAIL;
        D3DPRESENT_PARAMETERS Direct3DParametr;
        ZeroMemory(&Direct3DParametr, sizeof(Direct3DParametr));
        Direct3DParametr.Windowed = TRUE;
        Direct3DParametr.SwapEffect = D3DSWAPEFFECT_DISCARD;
        Direct3DParametr.BackBufferFormat = Display.Format;
 
        if (FAILED(pDirect3D -> 
                   CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, 
                   hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, 
                   &Direct3DParametr, &pDirect3DDevice)))
        return E_FAIL;
        return S_OK;
    }
 
            /*Функция создания буфера для хранения данных о вершинах полигона*/
                        HRESULT InitialBufferVershin()
                        {
                            CUSTOMVERTEX Vershin[] = 
                            {
                                {300.0f, 300.0f, 0.5f, 1.0f, 0x00000ff}, //Вершина A
                                {150.0f, 300.0f, 0.5f, 1.0f, 0x00000ff}, //Вершина B
                                {150.0f, 150.0f, 0.5f, 1.0f, 0x00000ff}, //Вершина C
                                /* X       Y      Z     rhw     цвет */
                            };
                        if (FAILED(pDirect3DDevice -> CreateVertexBuffer(
                            3*sizeof(CUSTOMVERTEX),
                            0, D3DFVF_CUSTOMVERTEX,
                            D3DPOOL_DEFAULT,
                            &pBufferVershin, NULL)))
                            return E_FAIL;
                        VOID* pBV;
                        if (FAILED(pBufferVershin ->
                            Lock(0, sizeof(Vershin), (void**)&pBV, 0)))
                            return E_FAIL;
                        memcpy(pBV, Vershin, sizeof(Vershin)); //Копирование в буффер в случае неудачной проверки
                        pBufferVershin -> Unlock();            //Разблокирование
                        return S_OK;
                        }
                /*---------------------------Функция рисования----------------------------*/
 
                VOID RenderingDirect3D()
                {
                if (pDirect3DDevice == NULL) //Если ошибки не обнаружены
                    return;
                pDirect3DDevice -> Clear(0, NULL, D3DCLEAR_TARGET, 
                                        D3DCOLOR_XRGB(0, 255, 0), 1.0f, 0);
                pDirect3DDevice -> BeginScene();  //Начало сцены
 
                /*------------Вывод сцены на экран------------*/
pDirect3DDevice -> SetStreamSource(0, pBufferVershin, 0, sizeof(CUSTOMVERTEX));
pDirect3DDevice -> SetFVF(D3DFVF_CUSTOMVERTEX);
pDirect3DDevice -> DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
 
                pDirect3DDevice -> EndScene();  //Функция, завершающая сцену
                pDirect3DDevice -> Present(NULL, NULL, NULL, NULL);
                }
/*----------------Функция освобождения захваченных ресурсов-------------------*/
 
VOID DeleteDirect3D()
{
if (pBufferVershin != NULL) 
pBufferVershin -> Release();
if (pDirect3DDevice != NULL)  
pDirect3DDevice -> Release();
if (pDirect3D != NULL)        
pDirect3D -> Release();
}
 
/*-----------------------Функция обработки сообщений---------------------------*/
LRESULT CALLBACK MainWinProc (HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
    switch(msg)
        {
        case WM_DESTROY:
            {
                DeleteDirect3D();
                PostQuitMessage(0);
                        return 0;
            }
        } //Конец switch-конструкции
    return DefWindowProc(hWnd, msg, wparam, lparam);
}
    /*----------------Функция входной точки приложения------------------*/
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,int iCmdShow)
    {
    HWND         hWnd;      //создаем дескриптор окна
    MSG          msg;       //создаем идентификатор сообщения
    WNDCLASSEX   wndclass;  //создаем класс окна
 
        wndclass.cbSize        = sizeof(WNDCLASSEX);
        wndclass.style         = CS_DBLCLKS|CS_OWNDC|CS_HREDRAW|CS_VREDRAW;
        wndclass.lpfnWndProc   = MainWinProc;
        wndclass.cbClsExtra    = 0;
        wndclass.cbWndExtra    = 0;
        wndclass.hInstance     = hInstance;
        wndclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
        wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH) GetStockObject (GRAY_BRUSH);
        wndclass.lpszMenuName  = NULL;
        wndclass.lpszClassName = "Window Class"; 
        wndclass.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
 
        /*Активация функции рисования в главной функции программы*/
        while (msg.message != WM_QUIT)
        {
    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    else
        RenderingDirect3D();
        }
    RenderingDirect3D();
        /*-------------Регистрация класса окна------------*/
        if(RegisterClassEx(&wndclass) == 0)
        return 0;
        /*-------------Создание окна приложения-----------*/
        if (!(hWnd = CreateWindowEx(
            NULL, "WINDOWSCLASS", "Рисуем треугольник", 
            WS_OVERLAPPEDWINDOW|WS_VISIBLE, 300, 150, 
            500, 400, NULL, NULL, hInstance, NULL)))
            return 0;
        if (SUCCEEDED(InitialDirect3D(hWnd)))
        {
            if (SUCCEEDED(InitialBufferVershin()))
            {
                ShowWindow(hWnd, SW_SHOWDEFAULT);
                UpdateWindow(hWnd);
                ZeroMemory(&msg, sizeof(msg));
                while(msg.message != WM_QUIT)
                {
                    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
                    {
                    TranslateMessage(&msg);
                    DispatchMessage(&msg);
                    }
                    else
                        RenderingDirect3D();
                }
            }
        }
        return 0;
    }


Комментарии сочинял сам и для себя, некоторые, вполне возможно, не точны или ошибочны - в DX я чайник.
Имеются у кого-нибудь идеи, что я делаю неправильно? Буду очень признателен, если поделитесь
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru