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

Массивы Функций. DirectX 11. Отобразить несколько моделей - C++

Восстановить пароль Регистрация
 
x5reunion
3 / 3 / 1
Регистрация: 25.03.2014
Сообщений: 45
25.04.2014, 08:25     Массивы Функций. DirectX 11. Отобразить несколько моделей #1
Всем привет, продолжаю пытаться изучать DirectX 11.

Возникла задача отобразить более одной разной модели.

Есть такая штука ID3D11DeviceContext* dirX11_d3dContext; // Контекст устройства (рисование) и многие подобные ему, она участвует в инициализации графического конвейера + в отрисовке объекта. Как нарисовать 1 объект ясно, как сделать сотню его копий тоже ясно возникла проблема с созданием более одного объекта.

Я понял что можно создать массив этих объектов. Далее допустим мне надо загрузить 100 разных моделей одним и тем же способом, но все они будут отличаться я так понял надо создавать что то типо массива функций?

Как это сделать? А если вот это ID3D11DeviceContext* dirX11_d3dContext; находится в классе который является абстрактным и наследуется + она еще вызывается и в производном классе и в его функциях для загрузки модели. Если ее будет 100 копий ее надо же еще и как то удалять.

DirectX9 там все понятно там готовая функция загрузки моделей, 10 и 11 только DXUT но его в топку. В книгах и туторах авторы благополучно проходят стороной подобные темы, давая лишь обобщенную инфу.

Я так понял это же чистое программирование я слышал про какие то фабрики объектов, или подобные вещи вообще как то по другому реализуются.

Подскажите пож в какую сторону копать, что прочитать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
25.04.2014, 08:40     Массивы Функций. DirectX 11. Отобразить несколько моделей #2
Если вот это:
Цитата Сообщение от x5reunion Посмотреть сообщение
Я понял что можно создать массив этих объектов. Далее допустим мне надо загрузить 100 разных моделей одним и тем же способом, но все они будут отличаться я так понял надо создавать что то типо массива функций?
Как это сделать?
То это делается посредством указателей на функции.
C++
1
{возвращаемый тип} (*func[{размерность массива}])({типы ргументов}) ;
IrineK
Заблокирован
25.04.2014, 09:56     Массивы Функций. DirectX 11. Отобразить несколько моделей #3
Цитата Сообщение от x5reunion Посмотреть сообщение
типо массива функций
Типо калькулятор. Типо пример.
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
#include <iostream>
 
using std::cout;
using std::cin;
 
int Add (int, int);
int Substract (int, int);
int Multiply (int, int);
int Divide (int, int);
 
typedef int (*TFunc) (int, int); 
 
int Add (int a, int b)
{   int c = a + b;
    return c;
}
 
int Substract (int a, int b)
{   int c = a - b;
    return c;
}
 
int Multiply (int a, int b)
{   int c = a * b;
    return c;
}
 
int Divide (int a, int b)
{   int c = a / b;
    return c;
}
 
int main () 
{   setlocale (LC_CTYPE, "Russian");
    TFunc arr[] = {Add, Substract, Multiply, Divide};
    
    char operation [] = {'+', '-', '*', '/'};
    int a, b, i, res;
    char op;
 
    cout << "Ввведите два целых числа\n";
    cin >> a >> b;
 
    cout << "Выберите действие: + - * /\n";
    cin >> op;
 
    for (i = 0; i<4; i++)
        if (operation[i] == op)
            res = arr[i] (a,b);
 
    cout << a << " " << op << " " << b << " = " << res;
    cin.sync(); cin.get();
    return 0;
}
WingCommander
Заблокирован
25.04.2014, 14:00     Массивы Функций. DirectX 11. Отобразить несколько моделей #4
Цитата Сообщение от x5reunion Посмотреть сообщение
Как нарисовать 1 объект ясно, как сделать сотню его копий тоже ясно возникла проблема с созданием более одного объекта.
Прорисовка нескольких объектов происходит следующим образом:
1. Задание всех необходимых трансформаций объекта (перемещение/ вращение и т.д.)
2. Задание всех необходимых SubReources, текстуры, константы и т.д.
3. Задание всех шейдеров
4. Задание VertexBuffera-а
5. Draw.
....
всё это повторяется для каждого объекта
....

Как отрисовал все - вызываешь у контекста устройства - Present

Цитата Сообщение от x5reunion Посмотреть сообщение
Подскажите пож в какую сторону копать, что прочитать?
для загрузки объектов начиная с DirectX 10 больше нет специальных вспомогательных функций, всё делается вручную. Форматов очень много, по этому, надобность таких функций и отпала.
Значит так, выбираешь формат, рекомендую для начала текстовые ASE, в него экспортируешь из 3DS Max модель, открываешь этот файл в блокноте и изучаешь - там всё наглядно и просто. Дальше, в твоей игре на DirectX пишешь класс - загрузчик моделей, который открывает этот файл и начинает его парсить в нужный для тебя формат, всё зависит от того, что ты используешь в шейдерах... Нужны тебе би-нормали и тангенты, не нужны ... Сколько координат текстур... Сами текстуры и т.д.
Так же можешь посмотреть в сторону формата COLLADA, он в текстовом XML, в отличии от ASE, в него можно экспортировать скелетную анимацию.
Лично я рекомендую написать PlugIn для 3DS Max и экспортировать уже что нужно и куда нужно, можно прямо в свой бинарный формат.
Есть ещё вариант - есть бесплатная библиотека для загрузке десятков разных форматов единообразным образом, называется assimp, можешь погуглить, она довольно таки проста в использование, но есть у неё и ряд недостатков, в частности далеко не всё что нужно порой из форматов выдёргивает.
x5reunion
3 / 3 / 1
Регистрация: 25.03.2014
Сообщений: 45
25.04.2014, 15:31  [ТС]     Массивы Функций. DirectX 11. Отобразить несколько моделей #5
Вы не совсем поняли вопроса я это все сделал. Я не спрашиваю как из файла загрузить модель я это уже все реализовал.

Я думаю выше мне ответили. Всем спасибо.
Yandex
Объявления
25.04.2014, 15:31     Массивы Функций. DirectX 11. Отобразить несколько моделей
Ответ Создать тему
Опции темы

Текущее время: 06:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru