21 / 21 / 0
Регистрация: 28.02.2014
Сообщений: 138
|
|||||||||||||||||||||||||||||||
1 | |||||||||||||||||||||||||||||||
Увеличение скорости загрузки из файла obj мешей в Directx23.09.2014, 11:27. Показов 1854. Ответов 9
Метки нет (Все метки)
Пробую написать свой класс для загрузки .obj мешей в Directx.
Идея в 2 функциях: Первая(Convert_Obj) конвертирует стандартный формат .obj в .тхт с готовыми данными которые не нужно больше форматировать, их нужно просто загрузить в вектора. (офлайн обработка ) Вторая(Load_Obj) собсно и загружает из этого .txt уже в программу. (онлайн обработка) Вопрос по второй функции: Как ее сделать быстрее? Как еще можно оптимизировать код? Или возможно есть другие варианты чтения фалов более быстрые. Вобщем интересно как в реальных проектах быстро загружаеют меши из файла в программу. класс Кликните здесь для просмотра всего текста
Определения Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
0
|
23.09.2014, 11:27 | |
Ответы с готовыми решениями:
9
Подскажите библиотеку для загрузки мешей Ограничение скорости загрузки файла Ограничение скорости загрузки файла Отображение скорости загрузки файла на сервера |
23.09.2014, 11:32 | 2 |
Ну во-первых, obj не нужно конвертировать в txt. Он и так текстовой. Во-вторых, если хотите ускорить загрузку пишите свой бинарный формат либо же используйте какой-либо стандартный исли он вам подойдет.
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
23.09.2014, 11:40 | 3 |
0
|
21 / 21 / 0
Регистрация: 28.02.2014
Сообщений: 138
|
|
23.09.2014, 11:45 [ТС] | 4 |
ну я его не просто в тхт. В тхт записую уже предварительно отформатированую информацию. Так как там нужно еще составить готовые вершины и индексы и еще кучю разных дел.
выглядит он так: 13857 78336 // кол вершин и кол индексов 0 -1.57081 1.77153 0 -0.998782 -0.049332 0.077756 0.87576 // позиция нормаль UV Готовая вершина. ... 0 // индексы 1 2 ... Стандартных я не знаю и както неособо интересно. Авот про бинарный формат это значит запись в фаил нужно делать бинарно и потом чтение из него? Это увеличит скорость?
0
|
21 / 21 / 0
Регистрация: 28.02.2014
Сообщений: 138
|
||||||
23.09.2014, 12:16 [ТС] | 6 | |||||
Да но у меня вопрос о том как саму загрузку сделать быстрой а не как формат свой создать)
Если я правильно понимаю то нужно просто добавить ,ios::binary в обьекты чтения и записи?
Добавлено через 9 минут может использование какихнибуть регистров инлайтов там итд
0
|
23.09.2014, 12:36 | 7 |
Начнем стого какая постановка вопроса. Если вы грузите меши одновременно с рендерингом, то это плохое решение. А если у вас идет подзагрузка в память то почему вы так привязались к скорости загрузки? В любом случае меши будут составлять в самом ужасно случае несколько мегабайт. К слову объем текстур будет в десятки раз больше. Так что я совсем не понимаю для чего вы так привязались к скорости загрузки
1
|
21 / 21 / 0
Регистрация: 28.02.2014
Сообщений: 138
|
|
23.09.2014, 12:53 [ТС] | 8 |
Меши грузятся отедльно от редеринга конечно же.
На счет текстур то там есть функция которая как я верю делает загрузку довольно оптимизировано по скорости. Но вот дело втом что в 11dх нет похожего загрузчика мешей. Поэтому я тут и пытаюсь сварганить нечто рабочее и притом быстрое. Почему быстрое? Хм... Скорость важно потому что мой меш из 13857 вертексов и 78336 индексов иницииализируется в данный момент примерно за 2 секунды. С использованием не форматированого ранее файла уходит от 10 до 80 секунд зависимо от реализации функции конвертирования.obj. Умножем количество мешей на сцене и получим уже не 2 секунды а очень много. Думаю это очевидный аргумент чтобы бороться даже за сотые секунды.
0
|
21 / 21 / 0
Регистрация: 28.02.2014
Сообщений: 138
|
|||||||||||
24.09.2014, 10:33 [ТС] | 10 | ||||||||||
А как по другому я незнаю. У меня есть програма я ее запускаю.
Происходит инициализация програмы: Окна,DirectX,Шейдеров кучи другого дела в том числе вершинных и индексных буферов которые инициализируются информацией из фалов мешей которые я конечно должен сначало загрузить в вектора. После чего вектором инциализировать вершинный буфер меша. Я не подгружаю их постоянно я их гружу 1 раз на 1 запуск программы в стадии инициализации программы. После чего идет цикл редеринга.Где я уже ничего не гружу ) Я толькочто проверил время загрузки этого меша оно ровно от 1,5 до 2,6 секи в зависимости от релиз/дебаг. Добавлено через 16 минут Тут даже дело не конкретно в этой функции или ее назначении. Хотелось бы просто знать способы оптимизации скорости выполнения функций в с++ с использованием чего либо. Просто тут тема с конкретным примером. Например я вот недавно разберал XNA функции. Наткнулся на много всего аля вызов какихто регистров по именам. Я знаю что есть такие процесорные регистры, в которых довольно простые операции работают намного быстрее чем не в них). Думаю там какраз это и использовали. Добавлено через 20 часов 45 минут _______________________ оказываетсо оператор << не пишет бинарно. Пришлось повозитсо но переписал функции. Запись Кликните здесь для просмотра всего текста
Загрузка Кликните здесь для просмотра всего текста
Результаты: Debug Бинарная запись Бинарная загрузка Время записи: 63.9558 Время загрузки: 0.101652 Не Бинарная запись Не бинарная загрузка Время записи: 65.1136 Время загрузки: 2.64262 Release Бинарная запись Бинарная загрузка Время записи: 5.03613 Время загрузки: 0.0184863 Не Бинарная запись Не бинарная загрузка Время записи: 5.23497 Время загрузки: 1.45526 Разница почти в 10 раз. Спасибо за этот совет, это реально помогло как видите. Возможно-ли еще улучшить результат?
0
|
24.09.2014, 10:33 | |
24.09.2014, 10:33 | |
Помогаю со студенческими работами здесь
10
Ограничение скорости загрузки файла по ftp Освещение мешей их Х файла Скачивание файла WebClient с отображением процентов загрузки файла, progressBar, скоростью загрузки файла увеличение скорости Увеличение скорости работы бд Увеличение скорости объекта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |