Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
34 / 32 / 2
Регистрация: 25.11.2010
Сообщений: 386
1

Первый старт.

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

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

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

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

Про синтаксис знаю достаточно. С DerectX немного знаком.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2011, 04:44
Ответы с готовыми решениями:

Вставить первый столбец после столбца, в котором находится первый встреченный элемент А
Подскажите как Вставить первый столбец после столбца, в котором находится первый встреченный...

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

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

Одна форма, кнопки старт и стоп. Как остановить?
Одна форма с двумя кнопками. Старт - начало некоторого длинного по времени алгоритма, который можно...

45
34 / 32 / 2
Регистрация: 25.11.2010
Сообщений: 386
30.06.2011, 21:47  [ТС] 21
Author24 — интернет-сервис помощи студентам
так в коде всё правильно?
Как проверить подключён ли d3d9.h?
Миниатюры
Первый старт.  
0
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
30.06.2011, 21:59 22
Сорри. Оно ругается на LPD3DXMESH. В каком хедере он определён ? Есть ли к файлу доступ ?
0
34 / 32 / 2
Регистрация: 25.11.2010
Сообщений: 386
30.06.2011, 22:05  [ТС] 23
Цитата Сообщение от Airhand Посмотреть сообщение
LPD3DXMESH
что он делает?
Цитата Сообщение от Airhand Посмотреть сообщение
В каком хедере он определён ?
пардон а что такое хедер?
Цитата Сообщение от Airhand Посмотреть сообщение
Есть ли к файлу доступ ?
этот файл есть в папке внешние зависимости думаю это означает что доступ есть.
0
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
30.06.2011, 22:13 24
Цитата Сообщение от Dzhekson6000 Посмотреть сообщение
что он делает?
Я не знаю. Не мой же код.

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

этот файл есть в папке внешние зависимости думаю это означает что доступ есть.
Проверте можете ли использавать свободно, в нём определённое. Это и будет означать, что доступ есть.
1
34 / 32 / 2
Регистрация: 25.11.2010
Сообщений: 386
30.06.2011, 22:21  [ТС] 25
Цитата Сообщение от Airhand Посмотреть сообщение
Я не знаю. Не мой же код.
Я так понял это типа переменой только что этот тип делает.
Цитата Сообщение от Airhand Посмотреть сообщение
Хидер - от анлийского heder, заголовок
аа так намного понятий. Я же дал код. Он был определён в перво же строчке.
C++
1
#include <d3d9.h>
Цитата Сообщение от Airhand Посмотреть сообщение
Проверте можете ли использавать свободно, в нём определённое. Это и будет означать, что доступ есть.
А поподробней можно. Я пока только учусь поэтому незнаю всего.
0
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
30.06.2011, 22:28 26
Цитата Сообщение от Dzhekson6000 Посмотреть сообщение
А поподробней можно. Я пока только учусь поэтому незнаю всего.
Используйте где-то в коде идентификатары из того заговка. Можно в "{}":
C++
1
2
{
}
Если на него (на идентификотор) будет и дальше ругаться, значит доступа к хидеру не имеет.
1
34 / 32 / 2
Регистрация: 25.11.2010
Сообщений: 386
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
71 / 76 / 9
Регистрация: 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
34 / 32 / 2
Регистрация: 25.11.2010
Сообщений: 386
01.07.2011, 06:59  [ТС] 29
он подключён
0
71 / 76 / 9
Регистрация: 30.06.2011
Сообщений: 176
01.07.2011, 07:16 30
Вот же написано, где эта функция: http://msdn.microsoft.com/en-u... 85%29.aspx

Header D3dx9shape.h
Library D3dx9.lib
Эти библиотеки тольков в DirectX SDK находятся: http://www.microsoft.com/downl... en&id=6812
0
34 / 32 / 2
Регистрация: 25.11.2010
Сообщений: 386
01.07.2011, 07:20  [ТС] 31
Цитата Сообщение от An1ka Посмотреть сообщение
Эти библиотеки тольков в DirectX SDK находятся: http://www.microsoft.com/downl... en&id=6812
Скачал, установил, подключил, проверил. Оно создаётся а дальеш х.... нечего
0
71 / 76 / 9
Регистрация: 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);
}
Вот работает всё.
1
34 / 32 / 2
Регистрация: 25.11.2010
Сообщений: 386
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

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

Добавлено через 4 часа 56 минут
всё перепробовал переставил SDK, переподключил к проекту. не знаю что делать.
0
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
02.07.2011, 13:29 36
Тогда, возможно, не хватает какого-то инклуда.
0
34 / 32 / 2
Регистрация: 25.11.2010
Сообщений: 386
02.07.2011, 13:30  [ТС] 37
тогда скажи какова? я всё перепробывал.
0
537 / 459 / 3
Регистрация: 08.07.2009
Сообщений: 2,625
02.07.2011, 13:37 38
Я ж не знаю какого, не я ж прогу писал. Попробуйте windows.h.
0
34 / 32 / 2
Регистрация: 25.11.2010
Сообщений: 386
02.07.2011, 13:43  [ТС] 39
Цитата Сообщение от Airhand Посмотреть сообщение
Я ж не знаю какого, не я ж прогу писал. Попробуйте windows.h.
windows.h подключён.
исходник во вложениях.
Вложения
Тип файла: rar 1.rar (3.87 Мб, 16 просмотров)
0
3 / 3 / 0
Регистрация: 02.07.2011
Сообщений: 42
02.07.2011, 13:45 40
смело можешь win32 делать
0
02.07.2011, 13:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2011, 13:45
Помогаю со студенческими работами здесь

Переставить местами первый минимальный и первый максимальный элементы массива из n вещественных чисел
Ребят нужен код, плизз )

Релизация очереди (первый пришел первый ушел) в классе
Вот пытаюсь исправить ошибку в методе Рор(). Помоготе розобратся в чем проблема // Stack1.h...

Очередь «первый вошел — первый вышел» (FIFO)
Очередь — это устройство для хранения данных, похожее на стек. Отли-чие в том, что в стеке...

Вернуть на старт
Всем привет:). Говорю сразу - я жесткий нуб. Начал изучение C++ буквально сегодня. Прошу вас, не...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru