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

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

Страниц: 1 ... 3 4 [5] 6 7   Вниз
  Печать  
Автор Тема: Создание массива вершин фигуры с помощью редактора  (Прочитано 42693 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


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

Хотя и у вас и у 8Observer8, есть что поругать, и что похвалить. Улыбающийся
А Вы можете компетентно ругать/хвалить? Думаю что нет, т.к. понятия не имеете что такое "vn", "vt", каковы их роли и как они используются. Пренебрежение к предметной части всегда было и будет уязвимым местом начитанных умников, а если еще и не хватает ума это скрыть - люди и жизнь будут тыкать их носом часто и охотно  Улыбающийся

Хвалить 8Observer8 совершенно не за что, а ярлык "халтурщик" он заслужил 100%. Модель имеющая только позиции вертексов никому не нужна, бесполезна, о чем ему было прекрасно известно. Тем не менее в очередной раз он решил еще "упростить" задачу для себя. "Ну это же для примера", какая разница? Да вот в том-то и дело что все настолько упрощено, что давно уже потеряло всякий смысл - нет задачи, работы, цели, вместо этого совершенно бестолковое поглощение optional информации. Не блоги надо вести, а программировать учиться.

Давайте лучше переключимся на ТС. Что-то он не отвечает больше. Получается у него там  по поводу сплита я как-то не понимаю. Для всего есть свой инструмент. Вилкой суп есть не будешь. Сплит прост и удобен. Ошибок в его работе вроде как не замечено.
Obj файл может быть очень больших размеров. Одним из требований моего заказчика была скорость (предыдущий парсер читал файл 2Gb несколько часов). А за удобство split приходится платить скоростью
Записан
8Observer8
Гость
« Ответ #61 : Апрель 11, 2014, 16:25 »

То что я лентяй и халтурщик - это я и без Вас знаю Улыбающийся

Я читал у Шлее, что split быстрее, чем RegExp. Если файл большой, то можно читать блоками и делать split.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

т.к. понятия не имеете что такое "vn", "vt", каковы их роли и как они используются.
Вы про нормали и текстурные координаты? Улыбающийся
Это только для вас является сакральными знаниями (на ряду с матрицами), все остальные про эти "знания" даже не заикаются, это уровень детского сада. Улыбающийся

Хвалить 8Observer8 совершенно не за что, а ярлык "халтурщик" он заслужил 100%.
Вовсе нет, он начинающий. Улыбающийся

м
Модель имеющая только позиции вертексов никому не нужна, бесполезна, о чем ему было прекрасно известно.
Это вам она может не нужна. А ему на данном этапе изучения вполне достаточна.

Тем не менее в очередной раз он решил еще "упростить" задачу для себя.
А что вам с того? Что вас так заводит? Подмигивающий
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

На счет парсера в "аля процедурном стиле" тоже не понял. Может быть какой-то другой стиль в подходе к парсеру? И он действительно необходим?
Что значит действительно необходим? Как мы будем решать, действительно или не действительно, он необходим? Улыбающийся
Вопрос адресован m_ax, давайте подождем его ответа, а потом я вам расскажу как я вижу ОО-подход при решении этой задачи. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


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

Вы про нормали и текстурные координаты? Улыбающийся
Это только для вас является сакральными знаниями (на ряду с матрицами), все остальные про эти "знания" даже не заикаются, это уровень детского сада. Улыбающийся
Если бы Вы хоть раз сами их рассчитали - Вы бы застрелили на месте того кто посмел их не прочитать Улыбающийся Но судя по "детскому саду" Вам этого делать не приходилось. И я прекрасно понимаю почему Вы симпатизируете 8Observer8 - это же Ваша копия. Знать все-все, и все поверхностно. Так, слышал, просмотрел - и хватит.

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

Это все, умолкаю.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

Если бы Вы хоть раз сами их рассчитали - Вы бы застрелили на месте того кто посмел их не прочитать Улыбающийся  Но судя по "детскому саду" Вам этого делать не приходилось.
Ну конечно, их рассчитывали только вы? Вы же гений 3D. Куда там другим до вас....  Смеющийся

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

Нет элемента философии (не побоюсь этого слова), нет склонности и желания докопаться, вникнуть, упереться рогом, всегда пойдет по пути наименьшего сопротивления.
Для того что бы он докапывался, ему нужна интересная тема. Не полигоны рисовать и не деревья фигур выводить. Подмигивающий
Когда он найдет себе задачу, он будет и рыть и копать.
Записан
8Observer8
Гость
« Ответ #66 : Апрель 11, 2014, 19:06 »

Объясню подробно свой затык. Надеюсь на помощь.

Когда я в коде создаю массив индексов, то руководствуюсь таким принципом - обход по индексам треугольников должен быть по часовой стрелке.

Я на листочке нарисовал куб. Произвольно расставил порядковые номера вершин:





Исходя из рисунков выше создал массив для всех треугольников (их 12):
Код
C++ (Qt)
   // Top
   IndexArray[0][0]=0;
   IndexArray[0][1]=1;
   IndexArray[0][2]=2;
 
   IndexArray[1][0]=2;
   IndexArray[1][1]=3;
   IndexArray[1][2]=0;
 
   // Bottom
   IndexArray[2][0]=4;
   IndexArray[2][1]=7;
   IndexArray[2][2]=5;
 
   IndexArray[3][0]=5;
   IndexArray[3][1]=7;
   IndexArray[3][2]=6;
 
   // Sides
   IndexArray[4][0]=0;
   IndexArray[4][1]=4;
   IndexArray[4][2]=5;
 
   IndexArray[5][0]=0;
   IndexArray[5][1]=5;
   IndexArray[5][2]=1;
 
   IndexArray[6][0]=1;
   IndexArray[6][1]=5;
   IndexArray[6][2]=2;
 
   IndexArray[7][0]=2;
   IndexArray[7][1]=5;
   IndexArray[7][2]=6;
 
   IndexArray[8][0]=2;
   IndexArray[8][1]=6;
   IndexArray[8][2]=3;
 
   IndexArray[9][0]=3;
   IndexArray[9][1]=6;
   IndexArray[9][2]=7;
 
   IndexArray[10][0]=0;
   IndexArray[10][1]=3;
   IndexArray[10][2]=7;
 
   IndexArray[11][0]=0;
   IndexArray[11][1]=7;
   IndexArray[11][2]=4;
 

А вот как быть с индексами, которые генерирует Blender?
Цитировать
f 8 7 6
f 3 2 6
f 5 8 6
f 4 3 8
f 8 5 1
f 5 6 2
f 3 7 8
f 1 2 4
f 1 5 2
f 4 8 1
f 7 3 6
f 2 3 4

Он почему-то не с нуля начинает. Ну ладно, можно отнять единицу:
Цитировать
f 7 6 5
f 2 1 5
f 4 7 5
f 3 2 7
f 7 4 0
f 4 5 2
f 2 6 7
f 0 1 3
f 0 4 1
f 3 7 0
f 6 2 5
f 1 2 3

Я как не игрался, но так и не смог правильно расставить индексы вершин треугольников, чтобы совпало с массивом выше:

« Последнее редактирование: Апрель 11, 2014, 19:21 от 8Observer8 » Записан
8Observer8
Гость
« Ответ #67 : Апрель 11, 2014, 19:09 »

Добавил индексы на рисунки.
Записан
8Observer8
Гость
« Ответ #68 : Апрель 11, 2014, 19:57 »

Нашёл Add-on, который позволяет показать индексы: http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/3D_interaction/Index_Visualiser
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

Вот я вам отправляю ваш проект, надеюсь в последний раз. Улыбающийся
Записан
8Observer8
Гость
« Ответ #70 : Апрель 11, 2014, 20:09 »

Спасибо огромное! Улыбающийся

Я проанализирую Ваши изменения в проекте и опишу свои ошибки здесь позже Улыбающийся
Записан
8Observer8
Гость
« Ответ #71 : Апрель 11, 2014, 23:21 »

Для начала: оси не выглядывают. Скорее всего, из-за того, что судя по индексам, обход по треугольнику совершается против часовой стрелки, поэтому нормали смотрят внутрь. Хотя с другой стороны, я думал, что нормаль определяет с какой стороны будет прозрачность. Если внутрь куба прокрутить, то там нет прозрачности граней. Короче, у меня каша в голове Улыбающийся Надеюсь, постепенно разберусь хотя бы в этих начальных вещах Улыбающийся

Ещё эта опция почему-то не влияет ни на что:
Код
C++ (Qt)
glEnable(GL_CULL_FACE); // устанавливаем режим, когда строятся только внешние поверхности
 
Пробовал закомментировать - ничего не происходит.

С аддоном теперь намного лучше:


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

Сообщений: 2095



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


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

На счет парсера в "аля процедурном стиле" тоже не понял. Может быть какой-то другой стиль в подходе к парсеру? И он действительно необходим?
Тогда, прошу привести пример кода. А то, как-то, M_AX голословно все у вас.
Из того, что сплит для Вас прост и удобен, ещё не следует, что он в этой задаче - оптимальное решение.. И, кстатии, ошибок в работе своего молотка я тоже пока не замечал, но это не значит, что его нужно использовать для решения проблем, которые под руку попадутся..)  

По-поводу процедурного стиля.. Наверное правильнее было сказать - процедурный подход решения проблемы..
Достаточно взглянуть на метод parseLine..
Я понимаю, конечно, что формат obj Вам упрощает задачу, и число этих if else if else по пальцам пересчитать, но что если чуть усложнить формат.. Вас бы не смутило, что этих if else if else стало бы стопятьсот? И всё это в одном методе..

Потом этот парсер выкинет вам исключение out of range, если чуть подпортить obj файл.. И пользователь вашего парсера не сможет его адекватно обработать.. Он даже не будет в курсе что произошло.. и как с этим дальше жить(
Но Вас, конечно, такие мелочи не беспокоят.. работает и ладно..




  
« Последнее редактирование: Апрель 12, 2014, 00:09 от m_ax » Записан

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

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

Сообщений: 4350



Просмотр профиля
« Ответ #73 : Апрель 12, 2014, 07:04 »

Я понимаю, конечно, что формат obj Вам упрощает задачу, и число этих if else if else по пальцам пересчитать, но что если чуть усложнить формат..
Если посмотреть спецификацию на этот формат, то не все так радужно: http://www.martinreddy.net/gfx/3d/OBJ.spec Улыбающийся
И если понадобится полноценная поддержка, то там придется по ифельзить от души. Улыбающийся

Поделюсь своими мыслями, как парсер можно написать в ОО-стиле.
Формат очень похож на примитивный скриптовый язык, в общем виде, строка представляет из себя команду с переменным числом аргументов:

cmd param1 param2 ... paramN

Мы можем ввести понятие команда - класс Command, от этого класса будут порождаться все команды.
Что это нам дает: команды легко добавляются, вся работ команды спрятана внутри ее класса.

Работа парсера в этому случае, будет сводиться к определению имени команды и передачи управления методу объекта класса-обработчика. В качестве параметра этому методу будет передаваться остаток строки, что бы он смог проверить и обработать все параметры.

P.S. И при парсинге любых тестовых форматов хорошо смогут помочь всякие flex+bison или boost::spirit.
« Последнее редактирование: Апрель 12, 2014, 07:14 от Old » Записан
8Observer8
Гость
« Ответ #74 : Апрель 12, 2014, 07:21 »

Old, это какой-то паттерн?

Было бы здорово экспортирвать в XML. Пока ничего не нашёл.
По поводу экспортирования мне советовали это почитать: http://www.gamedev.ru/art/forum/?id=186016&page=2#m22
И это: http://ksolek.fm.interia.pl/Blender/
Записан
Страниц: 1 ... 3 4 [5] 6 7   Вверх
  Печать  
 
Перейти в:  


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