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

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.64
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
#1

Первый старт. - C++

13.06.2011, 04:44. Просмотров 3494. Ответов 45
Метки нет (Все метки)

Прошу помочь. Писал раньше на С# , PHP.
Щас перехожу на С++ и есть несколько вопросов.
Я собираюсь писать игры с использованием API DirectX. Работаю на MVS2010.
Библиотеки DirectX подключал.
Вот следующие вопросы.
Какой проект правильней всего создавать?

Консольное приложение Win32
Проект Win32
Пустой проект
Приложение Windows forms
Или какой ещё?

Просмотрел много инструкций ну все они либо на 2008 либо на 2005 а на 2010 нету.

Про синтаксис знаю достаточно. С DerectX немного знаком.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2011, 04:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Первый старт. (C++):

Обработка события старт программы - C++ Builder
Как добиться, чтобы определенный код выполнялся при запуске программы

нужно сделать кнопки старт и пауза для движущихся фигур - C++ Builder
пауза нормально работает. но после паузы нажимаешь на старт фигуры не продолжают движение по траектории, а движется хаотично. помогите...

не первый вопрос по memo)) - C++ Builder
у меня есть результат U. хочу записать его в memo, но ето не проблема Memo1->Lines->Add(U) Но проблема в следуючем: хочу, чтобы у...

Исключить первый символ в строке - C++ Builder
Есть условиеif (StringGrid1->Rows->DelimitedText==",,,,,,") Как исключить первый символ в строке...

Первый символ в edite заглавный - C++ Builder
Будьте здравы бояры! :) Отлаживаю поиск и вот такая проблема так как в базе адреса идут с заглавной буквы поиск их не видит, вобщем...

Удалить первый символ из строки AnsiString - C++ Builder
Мне нужно что бы программа удаляла первый символ из строки в надписи. Нашла в Интернете такую функцию: Text1->Text.Delete(1,1); Если я...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
01.07.2011, 07:20  [ТС] #31
Цитата Сообщение от An1ka Посмотреть сообщение
Эти библиотеки тольков в DirectX SDK находятся: http://www.microsoft.com/download/en...ang=en&id=6812
Скачал, установил, подключил, проверил. Оно создаётся а дальеш х.... нечего
An1ka
65 / 70 / 2
Регистрация: 30.06.2011
Сообщений: 176
01.07.2011, 08:31 #32
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
#include <d3dx9.h>
#pragma warning( disable : 4996 )
#pragma warning( default : 4996 )
#include "windows.h"
 
#pragma comment( lib, "d3d9.lib")
#pragma comment( lib, "d3dx9.lib")
 
// принемаем сообщение обратно, должна быть во всех программа для Win32 (???)
LRESULT __stdcall WndProc(HWND, UINT, WPARAM, LPARAM);
 
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                      LPSTR lpCmdLine, int nCmdShow)
{
  WNDCLASS wc;// класс окна
  MSG msg; // (???)
 
  // Настройка класа окна.
  wc.style = CS_OWNDC;                        // стиль для окна..... CS_NOCLOSE
  wc.lpfnWndProc = WndProc;                   // указатель на обработчик сообщений.
  wc.cbClsExtra = 0;                          // что то связанное с байтами (???)
  wc.cbWndExtra = 0;                          // но во всех примерах нужна использовать 0.
  wc.hbrBackground = (HBRUSH)(6);             // цвет фона. необезательное значение.
  wc.hCursor = LoadCursor(NULL, IDC_ARROW);   // задаёт курсор
  wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // значёк окна.
  wc.hInstance = hInstance;                   // дискриптов экзамплятора оконных процеддур
  wc.lpszClassName = "class";                 // Имя класса.
  wc.lpszMenuName = NULL;                     // имя ресурса меню
 
  // Регистрация класса окна
  RegisterClass(&wc);                         // RegisterClass - это функция. &wc - это указатель на класс окна.
 
  // создание окна.
  HWND hWnd = CreateWindow(
          "class",                                // Имя класса.
          "Инициализация Direct3D",               // Имя окна.
       WS_OVERLAPPEDWINDOW,                   // Стиль окна
           0,                                     // Позиция окна по X
           0,                                     // Позиция окна по Y
       500,                                   // Ширина окна.
           500,                                   // Высота окна.
           NULL,                                  // Указатель на радительское окно.
           NULL,                                  // Дискриптор связанного с окном меню.
           hInstance,                             // Дескриптор экземпляра модуля. Получается функцией WinMain
           NULL                                   // Используется для указания дополннительных данных создаваемова окна
           );
 
  //Отображение окна (???)
  ShowWindow(hWnd,nCmdShow);
 
 
 
  UpdateWindow(hWnd);
 
 
  IDirect3D9 * d3d = NULL;                     // объект Direct3D
  IDirect3DDevice9 * dev = NULL;               // устройство (видеокарта)
 
  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_HAL,                         // Тип устройства. Видеокарта или процессор.
          hWnd,                                   // Главное окно приложение.
      D3DCREATE_SOFTWARE_VERTEXPROCESSING,    // Способ обработки.
      &pp, 
          &dev);
 
    D3DXMATRIX matView, matProjection;
    // размещение и ориентация камеры
    D3DXVECTOR3 position( 0.0f, 0.0f, -2.0f);
    D3DXVECTOR3 target( 0.0f, 0.0f, 0.0f);
    D3DXVECTOR3 up( 0.0f, 1.0f, 0.0f);
    D3DXMatrixLookAtLH( &matView, &position, &target, &up);
    // установка матрицы вида
    dev->SetTransform( D3DTS_VIEW, &matView);
    // установка матрицы проекции
    D3DXMatrixPerspectiveFovLH( &matProjection, D3DX_PI * 0.25f, // 45 градусов
        static_cast<float>( 500) / static_cast<float>( 500), 1.0f, 1000.0f);
    dev->SetTransform( D3DTS_PROJECTION, &matProjection);
 
    LPD3DXMESH cylinder;
    D3DXCreateCylinder( dev, 0.2f, 0.2f, 1, 16, 3, &cylinder, NULL);
 
while (1)
  {
 
       
     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(100,0,0),1.0f,0);
 
    dev->BeginScene();
 
    cylinder->DrawSubset(0);
    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);
}
Вот работает всё.
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
01.07.2011, 08:41  [ТС] #33
да... почти все ошибки исчезли но появилась новая.
Ошибка 1 error C1083: Не удается открыть файл включение: d3dx9.h: No such file or directory e:\documents and settings\user\мои документы\visual studio 2010\projects\1\1\lesson1.cpp 1 1 1

секрет исчезновения ошибок
в том что ты использовал матрицу мира, проекции и камеры
Airhand
502 / 458 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
01.07.2011, 23:39 #34
Попробуйте поместить файл d3dx9.h в католог прооекта. И включить его директивой: #include "d3dx9.h".
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
02.07.2011, 05:01  [ТС] #35
Цитата Сообщение от Airhand Посмотреть сообщение
попробуйте поместить файл d3dx9.h в католог прооекта. И включить его директивой: #include "d3dx9.h".
не помогла серавно ошибка

Добавлено через 4 часа 56 минут
всё перепробовал переставил SDK, переподключил к проекту. не знаю что делать.
Airhand
502 / 458 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
02.07.2011, 13:29 #36
Тогда, возможно, не хватает какого-то инклуда.
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
02.07.2011, 13:30  [ТС] #37
тогда скажи какова? я всё перепробывал.
Airhand
502 / 458 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
02.07.2011, 13:37 #38
Я ж не знаю какого, не я ж прогу писал. Попробуйте windows.h.
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
02.07.2011, 13:43  [ТС] #39
Цитата Сообщение от Airhand Посмотреть сообщение
Я ж не знаю какого, не я ж прогу писал. Попробуйте windows.h.
windows.h подключён.
исходник во вложениях.
Вложения
Тип файла: rar 1.rar (3.87 Мб, 15 просмотров)
KurtCastle
3 / 3 / 0
Регистрация: 02.07.2011
Сообщений: 42
02.07.2011, 13:45 #40
смело можешь win32 делать
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
02.07.2011, 13:51  [ТС] #41
Цитата Сообщение от KurtCastle Посмотреть сообщение
смело можешь win32 делать
в каком смысле?
Airhand
502 / 458 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
02.07.2011, 13:58 #42
У меня проэкт не открывается (студия 2005), а сам сделать не могу, т.к. не все файлы тогда войдут в проект и не все настройки.
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
02.07.2011, 17:36  [ТС] #43
блин у меня 2010

Добавлено через 3 часа 36 минут
всё теперь во всём разобрался.
Оказывается были неправильно подключены инклуды directx. Я их подключал в лиды
An1ka
65 / 70 / 2
Регистрация: 30.06.2011
Сообщений: 176
04.07.2011, 19:41 #44
Цитата Сообщение от Dzhekson6000 Посмотреть сообщение
секрет исчезновения ошибок
в том что ты использовал матрицу мира, проекции и камеры
Не только. Матрицы служат, чтобы задать нашу ориентацию в пространстве ( положение камеры, угол обзора и тд). Без них DirectX врядли ли бы понял наше местоположение и объекты какие мы видим

А еще у вас в цикле создавался цилиндр на каждом кадре
Его всего один раз надо создавать:
C++
1
2
LPD3DXMESH cylinder;
D3DXCreateCylinder(device, 0.2f, 0.2f, 1, 16, 3, &cylinder, NULL);
А вот рисовать, да уже в цикле:
C++
1
cylinder->DrawSubset(0);
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
04.07.2011, 22:39  [ТС] #45
всё понятно спс.
а как сделать так что бы цикл выполнялся раз в определённое время. допустим 60 раз в секунду.

Добавлено через 2 минуты
если я хочу писать программу не один а совместно какой софт использовать?

Добавлено через 2 часа 24 минуты
как в С++ подключить класс?
В С# тыкаешь добавить потом класс > выбираеш имя > создать > файл с расширением .cs
А вот как в С++ ?
Там есть файл С++ .cpp , заголовочный файл .h , а ещё класс класс компоновщика и класс установщика

Добавлено через 3 минуты
создал файл kamera.h
и подключил его к основному файлу
вот так
#include "kamera.h"
только как им пользоваться?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2011, 22:39
Привет! Вот еще темы с ответами:

Непонятные ошибки (уровень : первый раз) - C++ Builder
Здравствуйте! Создал проект в C++ Builder, написал в нем следующее (шапка, включая функцию main сгенерировалась средой, я добавил только...

Как получить первый символ строки? - C++ Builder
допустим у меня строка #3tkrnghrjnhlfng а мне нужен только первый символ как мне его получить?

Переназначить юнит, как основной, первый... - C++ Builder
Начну с того, что использую Builder 2010. Ситуация такая - делал прогу, так получилось, что основной программой с GUI был Unit3.cpp, а...

В строке ListBox выделить первый символ - C++ Builder
Подскажите пожалуйста, можно ли в строке ListBox выделить первый символ? Например S-&gt;ASdsds вывести S


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.07.2011, 22:39
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru