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

C++

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

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

13.06.2011, 04:44. Просмотров 3451. Ответов 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++
Вот пытаюсь исправить ошибку в методе Рор(). Помоготе розобратся в чем проблема // Stack1.h #pragma once #include <iostream> ...

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

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

Старт потока с 2 параметрами - C++
Нужно запустить функцию в новом потоке. Но у функции 2 параметра. Естественно, что я попытался создать структуру, и передавать эту...

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

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

C++ Threads или как запрограммировать кнопку Старт и Стоп - C++
Погуглил нечего не нашёл на эту тему..

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

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

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

Header D3dx9shape.h
Library D3dx9.lib
Эти библиотеки тольков в DirectX SDK находятся: http://www.microsoft.com/download/en...ang=en&id=6812
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 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.07.2011, 13:45     Первый старт.
Еще ссылки по теме:

Как создать старт приложения на определенной кнопки клавиатуры - C++
Вот например есть таймер как сделать так чтобы таймер запустился\остановился(остановился и збросился) при нажатии какой-то конкретной...

первый пришел, первый ушел - C++
Нужно реализовать очередь, первый пришел, первый ушел. Написал код, но чето перемудрил и не могу понять в чем проблема? ...

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

первый курс. с++ - C++
1)Даны числа x, y, x1, y1, x2, y2. Проверить истинность высказывания: «Точка с координатами (x, y) лежит внутри прямоугольника, левая...

Первый калькулятор - C++
Помогите доделать калькулятор, выдает ошибку при компиляции: #include &quot;stdafx.h&quot; #include &lt;std_lib_facilities.h&gt; class calc...


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

Или воспользуйтесь поиском по форуму:
KurtCastle
3 / 3 / 0
Регистрация: 02.07.2011
Сообщений: 42
02.07.2011, 13:45     Первый старт. #40
смело можешь win32 делать
Yandex
Объявления
02.07.2011, 13:45     Первый старт.
Ответ Создать тему
Опции темы

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