1 | |
Загрузка obj08.10.2017, 04:38. Показов 3502. Ответов 11
Метки нет (Все метки)
Здравствуйте, сегодня понадобилось загрузить 3д модельку в программу. Короче, очень долго мучился, и так ничего не получилось.
В общем, как загрузить? Язык C++
0
|
08.10.2017, 04:38 | |
Ответы с готовыми решениями:
11
Загрузка из obj Загрузка .obj Загрузка obj моделей Загрузка OBJ моделей |
61 / 58 / 11
Регистрация: 25.04.2017
Сообщений: 509
|
|
08.10.2017, 04:54 | 2 |
Парсить строки умеешь?
0
|
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
|
|
08.10.2017, 08:15 | 3 |
0
|
08.10.2017, 10:07 [ТС] | 4 | |||||
vxg, Здесь всё на borland C++ builder 6, а у меня visual C++ 2005
Добавлено через 38 минут Я скопипастил код
Линкер ругается на ------ Build started: Project: text, Configuration: Debug Win32 ------ Compiling... main.cpp .\main.cpp(122) : warning C4996: 'sscanf' was declared deprecated C:\Program Files\Microsoft Visual Studio 8\VC\include\stdio.h(311) : see declaration of 'sscanf' Message: 'This function or variable may be unsafe. Consider using sscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.' .\main.cpp(145) : warning C4996: 'sscanf' was declared deprecated C:\Program Files\Microsoft Visual Studio 8\VC\include\stdio.h(311) : see declaration of 'sscanf' Message: 'This function or variable may be unsafe. Consider using sscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.' Linking... Embedding manifest... Build log was saved at "file://c:\Documents and Settings\Администратор\Рабочий стол\Проекты\ Не мои\test\text\text\Debug\BuildLog.htm" text - 0 error(s), 2 warning(s) ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
0
|
Модератор
3388 / 2160 / 352
Регистрация: 13.01.2012
Сообщений: 8,378
|
|
09.10.2017, 06:43 | 5 |
TButton, а вы разве нашли в функциях загрузки из obj или в функциях рисования что-то специфичное для борланда? Не смешно
0
|
09.10.2017, 18:46 | 6 |
Сообщение было отмечено TButton как решение
Решение
TButton, умеете рисовать квадрат заданного цвета на OpenGL с помощью двух треугольников? А кубик заданного цвета в 3D? А плоскость и кубик с наложенными текстурами? Вот эти необходимые данные нужно научиться извлекать из файла .obj и .mtl после экспорта из Blender. Нужно научиться открывать программно файлы из C++, считывать всю информацию, пробегаться по символам считанным из файла с помощь for, while и анализировать считанную информаци с помощью if, чтобы добыть: координаты вершин, цвета, текстурные координаты и т.д.
1
|
15.10.2017, 09:51 [ТС] | 7 | |||||
Добавлено через 32 минуты Я решил всё таки сделать это на билдере, и знаете, у меня получилось загрузить модельку. Правда в ней куча дырок, но это можно исправить. Главный минус в том, что при работе, программа виснет. Вот код:
0
|
1824 / 732 / 99
Регистрация: 01.10.2012
Сообщений: 3,746
|
|
15.10.2017, 10:53 | 10 |
Ну как же не работает если пишет
Шо за нетерплячка? Хотите и грузить и сразу рисовать - не много ли? Так конечно работать не будет. Сначала надо создать контейнеры, считать туда хотя бы вертексы и нормали, потом считать фейсы. А потом главное - "расшарить", то есть преобразовать из формата obj в данные OpenGL. Если хотите это сделать сами напишу подробнее.
1
|
15.10.2017, 12:51 [ТС] | 11 | |||||
Igor3D, Спасибо за хороший совет!
Всё сделал, прога не виснет. Действительно, надо было из obj в OpenGL переводить, а потом рисовать!
0
|
1824 / 732 / 99
Регистрация: 01.10.2012
Сообщений: 3,746
|
|
16.10.2017, 09:04 | 12 |
Ну пока Вы ничего не перевели, просто рисуете вертексы надеясь что они идут по 4 для фейса. У какой-то конкретной модели это может быть и так, но в общем случае нет
OpenGL принимает данные в виде массивов (атрибутов и.т.п.) позиций, нормалей, UV и др. Все массивы должны иметь одинаковое число эл-тов. Поэтому простой кубик имеет 24 вертекса. Хотя углов 8, нормали в них разные, поэтому приходится создавать по 3 вертекса в каждом. Это часто называют "per-vertex data" Obj файл организован иначе, в нем массивы могут иметь разную длину, напр тот же кубик можно записать как 8 вертексов и 6 нормалей. Зато фейс имеет индексы для каждого атрибута (а не всего 1 как в OpenGL). Это называют "per-face data", Например в obj файле записан такой фейс f 52982/42174/47242 52981/42173/47241 53005/42041/47109 Это надо понимать так: фейс имеет 3 вертекса (тр-к). Первый вертекс ссылается на эл-т 52982 в массиве позиций, 42174 в массиве UV и 47242 в массиве нормалей. То же и для остальных вертексов. Все индексы начинаются с 1 (а не с 0 как в C/C++). Все массивы должны быть считаны до начала чтения фейсов
0
|
16.10.2017, 09:04 | |
16.10.2017, 09:04 | |
Помогаю со студенческими работами здесь
12
Загрузка obj модели в OpenGl Загрузка текстур на obj модельку *.obj и нормали файл .obj Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |