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

C++

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

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

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

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

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

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

Про синтаксис знаю достаточно. С DerectX немного знаком.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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); Если я...

45
Airhand
502 / 458 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
16.06.2011, 22:20 #16
Это значит, что прога повторно не слинковалась. Перестройте проект (rebuild). Да ошибок компляции нет, но кроме оной, ещё осуществляется линковка. Вот она и не прошла.
1
ValeryLaptev
Эксперт С++
1041 / 820 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
17.06.2011, 07:41 #17
Линковка тоже прошла. Только не инкрементная, а обычная - сборка всего.
1
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
28.06.2011, 19:23  [ТС] #18
дайте пожалуйста ссылку на урок по загрузке 3d модели и что нибуть о рендере.
Я кроме как устройства создавать нечего не могу. О матрицах знаю. Виртексы тоже.
0
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);
}
0
Airhand
502 / 458 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
30.06.2011, 21:37 #20
Это надо видеть в студии, чтобы сказать наверняка. Проверте подключаемый файл d3d9.h, может оно его не находит.
1
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
30.06.2011, 21:47  [ТС] #21
так в коде всё правильно?
Как проверить подключён ли d3d9.h?
0
Миниатюры
Первый старт.  
Airhand
502 / 458 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
30.06.2011, 21:59 #22
Сорри. Оно ругается на LPD3DXMESH. В каком хедере он определён ? Есть ли к файлу доступ ?
0
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
30.06.2011, 22:05  [ТС] #23
Цитата Сообщение от Airhand Посмотреть сообщение
LPD3DXMESH
что он делает?
Цитата Сообщение от Airhand Посмотреть сообщение
В каком хедере он определён ?
пардон а что такое хедер?
Цитата Сообщение от Airhand Посмотреть сообщение
Есть ли к файлу доступ ?
этот файл есть в папке внешние зависимости думаю это означает что доступ есть.
0
Airhand
502 / 458 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
30.06.2011, 22:13 #24
Цитата Сообщение от Dzhekson6000 Посмотреть сообщение
что он делает?
Я не знаю. Не мой же код.

пардон а что такое хедер?
Хидер - от анлийского heder, заголовок

этот файл есть в папке внешние зависимости думаю это означает что доступ есть.
Проверте можете ли использавать свободно, в нём определённое. Это и будет означать, что доступ есть.
1
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
30.06.2011, 22:21  [ТС] #25
Цитата Сообщение от Airhand Посмотреть сообщение
Я не знаю. Не мой же код.
Я так понял это типа переменой только что этот тип делает.
Цитата Сообщение от Airhand Посмотреть сообщение
Хидер - от анлийского heder, заголовок
аа так намного понятий. Я же дал код. Он был определён в перво же строчке.
C++
1
#include <d3d9.h>
Цитата Сообщение от Airhand Посмотреть сообщение
Проверте можете ли использавать свободно, в нём определённое. Это и будет означать, что доступ есть.
А поподробней можно. Я пока только учусь поэтому незнаю всего.
0
Airhand
502 / 458 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
30.06.2011, 22:28 #26
Цитата Сообщение от Dzhekson6000 Посмотреть сообщение
А поподробней можно. Я пока только учусь поэтому незнаю всего.
Используйте где-то в коде идентификатары из того заговка. Можно в "{}":
C++
1
2
{
}
Если на него (на идентификотор) будет и дальше ругаться, значит доступа к хидеру не имеет.
1
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
30.06.2011, 22:45  [ТС] #27
хм... какае та странность
не воспринимает индикатор именно LPD3DXMESH.
вот эти индикаторы отлично работают.
C++
1
2
  WNDCLASS wc;
  MSG msg;
без кода создания цилиндра
C++
1
2
3
    LPD3DXMESH cylinder;
    D3DXCreateCylinder(device, 0.2f, 0.2f, 1, 16, 3, &cylinder, NULL);
    cylinder->DrawSubset(0);
создаётся пустое окно
этот код я запихал между
C++
1
2
dev->BeginScene();
dev->EndScene();
Добавлено через 9 минут
хм...
немного разобрался.
Нужна было определить этот тип вот так:
C++
1
typedef struct ID3DXMesh *LPD3DXMESH;
ошибок стало меньше но они остались

Ошибка 2 error C2027: использование неопределенного типа "WinMain::ID3DXMesh" e:\documents and settings\user\мои документы\visual studio 2010\projects\1\1\lesson1.cpp 103 1 1
Ошибка 3 error C2227: выражение слева от "->DrawSubset" должно указывать на тип класса, структуры или объединения либо на универсальный тип e:\documents and settings\user\мои документы\visual studio 2010\projects\1\1\lesson1.cpp 103 1 1
Ошибка 1 error C3861: D3DXCreateCylinder: идентификатор не найден e:\documents and settings\user\мои документы\visual studio 2010\projects\1\1\lesson1.cpp 100 1 1
0
An1ka
65 / 70 / 2
Регистрация: 30.06.2011
Сообщений: 176
01.07.2011, 06:53 #28
Цитата Сообщение от Dzhekson6000 Посмотреть сообщение
Нужна было определить этот тип вот так:
C++
1
typedef struct ID3DXMesh *LPD3DXMESH;
Не нужно. Он уже определен в d3dx9mesh.h


Цитата Сообщение от Dzhekson6000 Посмотреть сообщение
Ошибка 1 error C3861: D3DXCreateCylinder: идентификатор не найден
Подключи
C++
1
#include <d3dx9.h>
1
Dzhekson6000
34 / 32 / 1
Регистрация: 25.11.2010
Сообщений: 387
01.07.2011, 06:59  [ТС] #29
он подключён
0
An1ka
65 / 70 / 2
Регистрация: 30.06.2011
Сообщений: 176
01.07.2011, 07:16 #30
Вот же написано, где эта функция: http://msdn.microsoft.com/en-us/library/bb172762%28v=vs.85%29.aspx

Header D3dx9shape.h
Library D3dx9.lib
Эти библиотеки тольков в DirectX SDK находятся: http://www.microsoft.com/download/en...ang=en&id=6812
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2011, 07:16
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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