Russian Qt Forum
Ноябрь 24, 2024, 09:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 3 [4] 5 6 7   Вниз
  Печать  
Автор Тема: Создание массива вершин фигуры с помощью редактора  (Прочитано 42755 раз)
Hrundel
Гость
« Ответ #45 : Апрель 10, 2014, 20:53 »

2 Hrundel У вас в коде ошибка, течет память и оставляет видимым диалог прогресса, если файл нельзя открыть.

Это может быть - иногда испытываю затруднения с указателями.
Записан
8Observer8
Гость
« Ответ #46 : Апрель 10, 2014, 22:38 »

Я немного продвинулся вперёд. Мне удалось нарисовать треугольник:



Ещё я из следующего примера добавил: оси, поворот с помощью мыши, приближение и отдаление с помощью колёсика мыши: http://www.gamedev.ru/code/articles/OpenGL_Qt4

Код: https://github.com/8Observer8/CubeFromBlender/tree/one_triangle

Подскажите, пожалуйста, как узнать в Blender какой вершине соответствует какой индекс?
« Последнее редактирование: Апрель 10, 2014, 22:41 от 8Observer8 » Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #47 : Апрель 11, 2014, 08:52 »

А что в итоге получилось? В замешательстве
Какая то невообразимая архитектурная каша.. Один чих и всё развалится(

Почему каша, и какой именно "чих" все это развалит? Обоснуйте.

Под "чихом", я так понимаю, подразумевается какой-нибудь безпорядочно написаный *obj файл. Так, я уже сделал замечание, что парсер читает только выхлоп из одного редактора и не предполагает универсальности. 
Чих - это не только файл..

Во-первых, ваш "парсер" слишком много знает.. Он сильно завязан на гуи, хотя парсер вообще не должен знать об этом ни-че-го.. Такая архитектура вообще противоречит принципам ООП, раз уж тут об этом речь зашла.. Если измениться интерфейс прогрессдиалога или сам прогрессдиалог, то придётся лезть под капот этого парсера.. 

Во-вторых сама реализация парсера.. мм.. не самая изящная.. 
   
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #48 : Апрель 11, 2014, 09:36 »

Далее будет очень черновой код. Мне главное идею понять, правильно ли я делаю? В следующей функции я заполняю три массива: m_vertexArray, m_colorArray, m_indexArray:
Код
C++ (Qt)
void Scene::setPointsAndIndexes(QList<QVector3D> &points, QList<QVector3D> &indexes)
 
А кто Вам мешал заполнить все три массива сразу при чтении obj файла? И почему Scene планируется в расчете только на 1 объект? Их может быть и больше. Куда Вы все время летите, почему все тяп-ляп? Разберемся c glDrawElements

Цитировать
glDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_INT, indices);

1-й аргумент - что рисуем, какие примитивы - у нас треугольники
2-й аргумент  - сколько треугольников
3-й аргумент  - сколько байт на индекс, чего ж GL_UNSIGNED_BYTE, индекс может ссылаться на вертекс напр 10000. Конечно GL_UNSIGNED_INT
4-й аргумент - массив int'ов (указатель)

В obj файле
Цитировать
f 1 2 4
f 5 8 6
f 1 5 2
...
Значит подаваемый массив { 1 2 4 5 8 6 1 5 2.. }

Теперь с glVertexPointer(3, GL_FLOAT, 0, m_vertexArray);
В obj файле
Цитировать
v 1.000000 1.000001 -0.999999
v 1.000000 -0.999999 -1.000001
v -1.000000 -0.999999 -1.000001...
Значит подаваемый массив
{ 1.000000 1.000001 -0.999999
   1.000000 -0.999999 -1.000001
 -1.000000 -0.999999 -1.000001...
}

Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #49 : Апрель 11, 2014, 09:56 »

Во-первых, ваш "парсер" слишком много знает.. Он сильно завязан на гуи, хотя парсер вообще не должен знать об этом ни-че-го.. Такая архитектура вообще противоречит принципам ООП, раз уж тут об этом речь зашла.. Если измениться интерфейс прогрессдиалога или сам прогрессдиалог, то придётся лезть под капот этого парсера.. 
Не вижу где он "завязан" на UI, ну может QMessageBox. А так нормально, юзается интерфейс прогрессдиалога, в кишки не влазим. И, зная Вас, убежден что никакого feedback'а в Вашей реализации не случилось бы вообще - ушли бы гулять с собачкой, и все  Улыбающийся

Во-вторых сама реализация парсера.. мм.. не самая изящная.. 
Так никто ж не мешает показать "более изящную", богатырскую силу буста и освоившего его программиста  Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #50 : Апрель 11, 2014, 10:07 »

А кто Вам мешал заполнить все три массива сразу при чтении obj файла?
А почему он должен был их сразу заполнять?
Здесь он получает исключительно данные из файла, дальше он их может разложить в какие угодно специализированные структуры.

И почему Scene планируется в расчете только на 1 объект? Их может быть и больше.
Потому что он скопипастил его из примера, он там даже ссылку на него привел.

чего ж GL_UNSIGNED_BYTE, индекс может ссылаться на вертекс напр 10000. Конечно GL_UNSIGNED_INT
А почему нет, у нас всего 8 вершин, байта хватит с головой.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #51 : Апрель 11, 2014, 10:11 »

Не вижу где он "завязан" на UI, ну может QMessageBox.
И QInputDialog? Улыбающийся

А так нормально
Сойдет.

Так никто ж не мешает показать "более изящную", богатырскую силу буста и освоившего его программиста  Улыбающийся
Точно-точно, у вас же есть готовая, так сказать "профессиональная" - покажите.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #52 : Апрель 11, 2014, 10:52 »

Точно-точно, у вас же есть готовая, так сказать "профессиональная" - покажите.
Ну вот, то обзываете меня всяко - то "покажите" Улыбающийся. Нет уж, да и не смог бы, это был заказ.

А вот где ж ота вся умность std/boost которой некоторые так гордятся? Формат легкий и приятный, есть куда более гнусные. Следовало ожидать что вот "щас", "на раз" - но ничего не происходит. Ну где же Ваши "карандаши" которые так усердно затачивались? А если дойдет до дела - опять позорный split, или как?  Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #53 : Апрель 11, 2014, 11:02 »

Ну вот, то обзываете меня всяко - то "покажите" Улыбающийся. Нет уж, да и не смог бы, это был заказ.
Другого ответа я и не ждал. Все как всегда. Зато написать "халтура" это вы первый. Улыбающийся

А вот где ж ота вся умность std/boost которой некоторые так гордятся? Формат легкий и приятный, есть куда более гнусные. Следовало ожидать что вот "щас", "на раз" - но ничего не происходит. Ну где же Ваши "карандаши" которые так усердно затачивались?
Карандаши там же где и у вас. Улыбающийся
С той лишь разницей, что нам читать этот формат и даром не надо, а вы как бы должны, ведь вы же
Полигонной геометрией я занимаюсь давненько...
Улыбающийся

А если дойдет до дела - опять позорный split, или как?  Улыбающийся
Нет, будет boost::spirit.
Записан
Hrundel
Гость
« Ответ #54 : Апрель 11, 2014, 11:30 »

Во-первых, ваш "парсер" слишком много знает.. Он сильно завязан на гуи, хотя парсер вообще не должен знать об этом ни-че-го.. Такая архитектура вообще противоречит принципам ООП, раз уж тут об этом речь зашла.. Если измениться интерфейс прогрессдиалога или сам прогрессдиалог, то придётся лезть под капот этого парсера.. 
Не вижу где он "завязан" на UI, ну может QMessageBox. А так нормально, юзается интерфейс прогрессдиалога, в кишки не влазим. И, зная Вас, убежден что никакого feedback'а в Вашей реализации не случилось бы вообще - ушли бы гулять с собачкой, и все  Улыбающийся

Во-вторых сама реализация парсера.. мм.. не самая изящная.. 
Так никто ж не мешает показать "более изящную", богатырскую силу буста и освоившего его программиста  Улыбающийся

Спасибо, Игорь, мне уже и добавить нечего  Смеющийся Смеющийся Смеющийся

Что касается "завязки" на GUI - ну знаете, я все-таки семестровый проект пишу, а не корпаративный продукт от Adobe. Строгой независимости классов с меня никто не требует. 
Записан
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #55 : Апрель 11, 2014, 11:42 »

Во-первых, ваш "парсер" слишком много знает.. Он сильно завязан на гуи, хотя парсер вообще не должен знать об этом ни-че-го.. Такая архитектура вообще противоречит принципам ООП, раз уж тут об этом речь зашла.. Если измениться интерфейс прогрессдиалога или сам прогрессдиалог, то придётся лезть под капот этого парсера.. 
Не вижу где он "завязан" на UI, ну может QMessageBox. А так нормально, юзается интерфейс прогрессдиалога, в кишки не влазим. И, зная Вас, убежден что никакого feedback'а в Вашей реализации не случилось бы вообще - ушли бы гулять с собачкой, и все  Улыбающийся

Во-вторых сама реализация парсера.. мм.. не самая изящная.. 
Так никто ж не мешает показать "более изящную", богатырскую силу буста и освоившего его программиста  Улыбающийся

Спасибо, Игорь, мне уже и добавить нечего  Смеющийся Смеющийся Смеющийся

Что касается "завязки" на GUI - ну знаете, я все-таки семестровый проект пишу, а не корпаративный продукт от Adobe. Строгой независимости классов с меня никто не требует. 

Дело не только в завязке на гуи.. (хотя это уже о многом говорит)
Сама реализация парсера в аля процедурном стиле(
Да и использование сплита.. где то я это уже видел)   
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #56 : Апрель 11, 2014, 11:44 »

Что касается "завязки" на GUI - ну знаете, я все-таки семестровый проект пишу, а не корпаративный продукт от Adobe. Строгой независимости классов с меня никто не требует.  
Не обижайтесь, я нисколько не хочу принизить ваш код.
Просто мне было непонятно, откуда такая избирательност, почему наш "профессионал" хвалит одного и ругает другого? Хотя и у вас и у 8Observer8, есть что поругать, и что похвалить. Улыбающийся
Сейчас я понимаю, что 8Observer8 "в опале" за то, что не внемлет "профессионалу". И главное он может не переживать дальше: все что он будет делать - будет называться халтурой. Улыбающийся
« Последнее редактирование: Апрель 11, 2014, 12:12 от Old » Записан
Hrundel
Гость
« Ответ #57 : Апрель 11, 2014, 12:19 »

Не обижайтесь, я нисколько не хочу принизить ваш код.
Просто мне было непонятно, откуда такая избирательност, почему наш "профессионал" хвалит одного и ругает другого? Хотя и у вас и у 8Observer8, есть что поругать, и что похвалить. Улыбающийся

Да я и не обижаюсь совсем  Улыбающийся Я на великое не претендую. Я, ведь, еще учусь!

Ну, на счет Игоря, могу сказать, что он как-то помог написать мне кусок кода. Мне было все очень понятно. Его стиль мне нравиться. Это наверное как в искусстве - кто-то импрессионистично картины пишет, кто-то академично. И то, и другое имеет место быть. Рамок быть не должно - иначе не будет открытий. А правила, конечно, соблюдать надо. Без граммотности красота не возможна.

Давайте лучше переключимся на ТС. Что-то он не отвечает больше. Получается у него там парсеную модельку показать?

Да, и мнение M_AX по коду ТС, тоже было бы интересно выслушать.

А по поводу сплита я как-то не понимаю. Для всего есть свой инструмент. Вилкой суп есть не будешь. Сплит прост и удобен. Ошибок в его работе вроде как не замечено.

На счет парсера в "аля процедурном стиле" тоже не понял. Может быть какой-то другой стиль в подходе к парсеру? И он действительно необходим?
Тогда, прошу привести пример кода. А то, как-то, M_AX голословно все у вас.
« Последнее редактирование: Апрель 11, 2014, 12:38 от Hrundel » Записан
OKTA
Гость
« Ответ #58 : Апрель 11, 2014, 14:04 »

Мне кажется, что Old и Igors давно уже должны устроить ООП-баттл  Смеющийся
Записан
8Observer8
Гость
« Ответ #59 : Апрель 11, 2014, 14:24 »

Пока из файла построить не получается. Не разоблался в соответсвии между порядком координат и индексов в массивах.

Вот кубик, который задаётся в самой программе:



Исходники: https://github.com/8Observer8/Cube
Записан
Страниц: 1 2 3 [4] 5 6 7   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.081 секунд. Запросов: 23.