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

C++

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

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

13.06.2011, 04:44. Просмотров 3436. Ответов 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     Первый старт.
Посмотрите здесь:

Visual C++ Одна форма, кнопки старт и стоп. Как остановить?
нужно сделать кнопки старт и пауза для движущихся фигур C++ Builder
C++ Переставить местами первый минимальный и первый максимальный элементы массива из n вещественных чисел
C++ Builder Обработка события старт программы
C++ Вернуть на старт
C++ Как сделать "Старт", "Пауза", Стоп"?
C++ Старт потока с 2 параметрами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
13.06.2011, 14:13     Первый старт. #2
Думаю что
Цитата Сообщение от Dzhekson6000 Посмотреть сообщение
Проект Win32
но и консольное можно, там же должна быть функция, которая создает окно(по крайней мере, в OpenGL так).
dr.curse
386 / 342 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
13.06.2011, 14:30     Первый старт. #3
Dzhekson6000, наверное у директикс должен быть свой тип проекта, но Win32 проект наверное не подайдет.
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
13.06.2011, 14:38     Первый старт. #4
Цитата Сообщение от aram_gyumri Посмотреть сообщение
но Win32 проект наверное не подайдет.
Почему ?
dr.curse
386 / 342 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
13.06.2011, 14:40     Первый старт. #5
Win32 проекты в студии используют только для обычных программ не использующих .Net или для написания программ с использованием WinAPI.
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
13.06.2011, 14:44     Первый старт. #6
Посмотри, судя по скринам там проект, как раз, Win32.
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
13.06.2011, 17:44  [ТС]     Первый старт. #7
создал проект.
Но мне как то непривычно после шарпа.
скрип во вложениях.
Дате пожалуйста ссылку на статью или на книгу (можно и название) где пошаговое создание проекта на MVS2010
Посмотри, судя по скринам там проект, как раз, Win32.
тут помоему MVS2008 а в 2010 нету этих конфигураций они были перенесены в свойства проекта.
Миниатюры
Первый старт.  
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
13.06.2011, 17:45  [ТС]     Первый старт. #8
вот тут говорят создать пустой проект.
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
13.06.2011, 18:57     Первый старт. #9
Цитата Сообщение от Dzhekson6000 Посмотреть сообщение
вот тут говорят создать пустой проект.
Так и делайте как там говорят, ведь это пошаговое руководство.
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
13.06.2011, 19:39  [ТС]     Первый старт. #10
там англиская версия. А у меня русская.
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
13.06.2011, 19:45     Первый старт. #11
Мда, капец проблема О_о
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
13.06.2011, 21:17  [ТС]     Первый старт. #12
спасибо. разобрался всем кто отвечал в этой тему по +1.
буду задавать тут вопросы по мере изучения.
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
15.06.2011, 21:03  [ТС]     Первый старт. #13
щас строю обычное окно(пустое, белое).
ну при отладке вот что пишит.
1>------ Построение начато: проект: 1, Конфигурация: Debug Win32 ------
1> lesson1.cpp
1> LINK : не найден или не выполнена сборка E:\Documents and Settings\User\мои документы\visual studio 2010\Projects\1\Debug\1.exe при последней инкрементной компоновке; выполняется полная компоновка
1> 1.vcxproj -> E:\Documents and Settings\User\мои документы\visual studio 2010\Projects\1\Debug\1.exe
========== Построение: успешно: 1, с ошибками: 0, без изменений: 0, пропущено: 0 ==========
что это за ошибка?
1> LINK : не найден или не выполнена сборка E:\Documents and Settings\User\мои документы\visual studio 2010\Projects\1\Debug\1.exe при последней инкрементной компоновке; выполняется полная компоновка
ValeryLaptev
Эксперт С++
1035 / 814 / 48
Регистрация: 30.04.2011
Сообщений: 1,658
15.06.2011, 21:08     Первый старт. #14
Это не ошибка. Просто сообщение. Вам же в конце написано, что "успешно: 1, с ошибками: 0..."
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
16.06.2011, 07:04  [ТС]     Первый старт. #15
да но меня это сообщение настараживает.
не найден или не выполнена сборка
Airhand
502 / 458 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
16.06.2011, 22:20     Первый старт. #16
Это значит, что прога повторно не слинковалась. Перестройте проект (rebuild). Да ошибок компляции нет, но кроме оной, ещё осуществляется линковка. Вот она и не прошла.
ValeryLaptev
Эксперт С++
1035 / 814 / 48
Регистрация: 30.04.2011
Сообщений: 1,658
17.06.2011, 07:41     Первый старт. #17
Линковка тоже прошла. Только не инкрементная, а обычная - сборка всего.
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
28.06.2011, 19:23  [ТС]     Первый старт. #18
дайте пожалуйста ссылку на урок по загрузке 3d модели и что нибуть о рендере.
Я кроме как устройства создавать нечего не могу. О матрицах знаю. Виртексы тоже.
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
30.06.2011, 20:29  [ТС]     Первый старт. #19
скачал с сайта мелкосовта курс лекций Семёнова.
Там есть такой код.
C++
1
2
3
LPD3DXMESH cylinder;
D3DXCreateCylinder(device, 0.2f, 0.2f, 1, 16, 3, &cylinder, NULL);
cylinder->DrawSubset(0);
он создаёт цилиндер.
я вставил в свой код ну неполучается.
Вот что пишет.
Ошибка 3 error C2065: cylinder: необъявленный идентификатор e:\documents and settings\user\мои документы\visual studio 2010\projects\1\1\lesson1.cpp 99 1 1
Ошибка 5 error C2065: cylinder: необъявленный идентификатор e:\documents and settings\user\мои документы\visual studio 2010\projects\1\1\lesson1.cpp 100 1 1
Ошибка 7 error C2065: cylinder: необъявленный идентификатор e:\documents and settings\user\мои документы\visual studio 2010\projects\1\1\lesson1.cpp 101 1 1
Ошибка 4 error C2065: device: необъявленный идентификатор e:\documents and settings\user\мои документы\visual studio 2010\projects\1\1\lesson1.cpp 100 1 1
Ошибка 1 error C2065: LPD3DXMESH: необъявленный идентификатор e:\documents and settings\user\мои документы\visual studio 2010\projects\1\1\lesson1.cpp 99 1 1
Ошибка 2 error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "cylinder" e:\documents and settings\user\мои документы\visual studio 2010\projects\1\1\lesson1.cpp 99 1 1
Ошибка 8 error C2227: выражение слева от "->DrawSubset" должно указывать на тип класса, структуры или объединения либо на универсальный тип e:\documents and settings\user\мои документы\visual studio 2010\projects\1\1\lesson1.cpp 101 1 1
Ошибка 6 error C3861: D3DXCreateCylinder: идентификатор не найден e:\documents and settings\user\мои документы\visual studio 2010\projects\1\1\lesson1.cpp 100 1 1

Вот весь код.

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
#include <d3d9.h>
#include "mmsystem.h"
#pragma warning( disable : 4996 )
#include <strsafe.h>
#pragma warning( default : 4996 )
#include "windows.h"
 
// принемаем сообщение обратно, должна быть во всех программа для 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);
 
 
 
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();
    LPD3DXMESH cylinder;
    D3DXCreateCylinder(device, 0.2f, 0.2f, 1, 16, 3, &cylinder, NULL);
    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);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2011, 21:37     Первый старт.
Еще ссылки по теме:

Как создать старт приложения на определенной кнопки клавиатуры C++
C++ Threads или как запрограммировать кнопку Старт и Стоп C++
первый пришел, первый ушел C++
Очередь «первый вошел — первый вышел» (FIFO) C++
Релизация очереди (первый пришел первый ушел) в классе C++

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

Или воспользуйтесь поиском по форуму:
Airhand
502 / 458 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
30.06.2011, 21:37     Первый старт. #20
Это надо видеть в студии, чтобы сказать наверняка. Проверте подключаемый файл d3d9.h, может оно его не находит.
Yandex
Объявления
30.06.2011, 21:37     Первый старт.
Ответ Создать тему
Опции темы

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