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

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

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

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

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

Под "чихом", я так понимаю, подразумевается какой-нибудь безпорядочно написаный *obj файл. Так, я уже сделал замечание, что парсер читает только выхлоп из одного редактора и не предполагает универсальности. 
« Последнее редактирование: Апрель 10, 2014, 13:07 от Hrundel » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


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

Расскажите пожалуйста о киллер фичах второго решения по сравнению с первым.
В нем выделена "сущность" (класс модели) и вызываются его методы, это нормально. А Ваш протеже действовал в худших традициях процедурного программирования
Код
C++ (Qt)
void Parser::parseData( const QString &input, QList<QVector3D> &points, QList<QVector3D> &indexes )
 
Да еще контейнеры подобраны - полный ппц. Потому что голова занята не делом а "всякой всячиной"
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

В нем выделена "сущность" (класс модели) и вызываются его методы, это нормально.
Еще раз спрошу, вас сам загрузчик радует?

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

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

Сообщений: 11445


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

Еще раз спрошу, вас сам загрузчик радует?
А почему он должен меня "радовать" или "огорчать"? Улыбающийся Для "наколенной поделки" - вполне, а об остальном речи не было.

На сколько я вижу, 8Observer8 воспользовался моим советом (который вы кстати тоже поддержали), и написал наколенную поделку для загрузки модели из obj файла, что бы уже начать саму работу с opengl. Что в этом плохого?
Вот и расскажите как в OpenGL воспользоваться тем что прочитал 8Observer8
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

А почему он должен меня "радовать" или "огорчать"? Улыбающийся Для "наколенной поделки" - вполне, а об остальном речи не было.
Я про расхваленный вами вариант Hrundel. Улыбающийся
Вы похвалить похвалили, а за что непонятно. Будьте любезны.

Вот и расскажите как в OpenGL воспользоваться тем что прочитал 8Observer8
А вот вам чуть позже 8Observer8 и покажет. А если у него не получиться, то расскажу я. Хотя уже лет 10 к opengl не подходил. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


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

Я про расхваленный вами вариант Hrundel. Улыбающийся
Вы похвалить похвалили, а за что непонятно. Будьте любезны.
Я уже Вам ответил
Цитата: Igors link=topic=26752.msg193429#msg193429
В нем выделена "сущность" (класс модели) и вызываются его методы, это нормально.
То есть принципиально подход верный, дальше можно наращивать парсер (если надо). То что замусорено печатью лога - дело житейское. А в др варианте налицо непонимание ООП и программирования вообще. И, что мне особенно не нравится, очень поверхностное отношение к задаче. Интенсивное изучение теории этого не компенсирует.

А вот вам чуть позже 8Observer8 и покажет. А если у него не получиться, то расскажу я. Хотя уже лет 10 к opengl не подходил. Улыбающийся
Трудновато будет рассказать то чего нет Улыбающийся Данные obj файла с opengl несовместимы - или рисовать по фейсетам (совсем бедно) или конвертировать.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

То есть принципиально подход верный, дальше можно наращивать парсер (если надо). То что замусорено печатью лога - дело житейское.
А в чем верность подхода? В том, что один класс и данные читает и прогресс показывает?

А в др варианте налицо непонимание ООП и программирования вообще.
Да вы что, и программирования вообще? Улыбающийся
Это все из-за вашего непонимания программирования, ну а про ООП и не говорю. Улыбающийся

И, что мне особенно не нравится, очень поверхностное отношение к задаче.
Всем наплевать.

Интенсивное изучение теории этого не компенсирует.
Конечно, поэтому он и пишет код.

Данные obj файла с opengl несовместимы
Ну да, ну да.  Строит глазки
« Последнее редактирование: Апрель 10, 2014, 18:11 от Old » Записан
Hrundel
Гость
« Ответ #37 : Апрель 10, 2014, 18:27 »

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

Я про расхваленный вами вариант Hrundel. Улыбающийся
Вы похвалить похвалили, а за что непонятно. Будьте любезны.

А почему бы меня и не похвалить. Я изо всех сил стремлюсь к структурированному программированию как Дийкстра когда-то  Смеющийся
И, кстати, я своим парсером читаю вот такие модельки очень даже успешно.

« Последнее редактирование: Апрель 10, 2014, 18:34 от Hrundel » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


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

А в чем верность подхода? В том, что один класс и данные читает и прогресс показывает?
Не один, прогресс включен агрегатом, вполне норм. Др дело от выводимых сообщений толку маловато (проще действовать по размеру прочитанного), но то уже постановка.

Ну да, ну да.  Строит глазки
Какой-то Вы "наивный" или "непрактичный" - не знаю как сказать Улыбающийся Полигонной геометрией я занимаюсь давненько, а Вы так, "чуть слышали". Чего лезть "с грыжей на танк"?  Улыбающийся
Записан
8Observer8
Гость
« Ответ #39 : Апрель 10, 2014, 19:03 »

У меня проблема с рисованием куба. Он не рисуется.

Я так понимаю, что рисовать надо с помощью функций:
Код
C++ (Qt)
void Scene::draw()
{
   // указываем, откуда нужно извлечь данные о массиве вершин
   glVertexPointer(3, GL_FLOAT, 0, m_vertexArray);
   // указываем, откуда нужно извлечь данные о массиве цветов вершин
   glColorPointer(3, GL_FLOAT, 0, m_colorArray);
   // используя массивы вершин и индексов, строим поверхности
   glDrawElements(GL_TRIANGLES, m_sizeOfIndexesArray * 3, GL_UNSIGNED_BYTE, m_indexArray);
}
 

Далее будет очень черновой код. Мне главное идею понять, правильно ли я делаю? В следующей функции я заполняю три массива: m_vertexArray, m_colorArray, m_indexArray:
Код
C++ (Qt)
void Scene::setPointsAndIndexes(QList<QVector3D> &points, QList<QVector3D> &indexes)
{
   // Points
   m_sizeOfpointsArray = points.size();
   m_vertexArray = new GLfloat*[m_sizeOfpointsArray];
   const int amountOfCoordinates = 3;
   for (int i = 0; i < m_sizeOfpointsArray; i++) {
       m_vertexArray[i] = new GLfloat[amountOfCoordinates];
   }
 
   for (int row = 0; row < m_sizeOfpointsArray; ++row) {
       int col = 0;
       m_vertexArray[row][col++] = points[row].x();
       m_vertexArray[row][col++] = points[row].y();
       m_vertexArray[row][col] = points[row].z();
   }
 
//    for (int row = 0; row < m_sizeOfpointsArray; ++row) {
//        for (int col = 0; col < amountOfCoordinates; ++col) {
//            qDebug() << m_vertexArray[row][col];
//        }
//    }
 
   // Indexes
   m_sizeOfIndexesArray = indexes.size();
   m_indexArray = new GLfloat*[m_sizeOfIndexesArray];
   for (int i = 0; i < m_sizeOfIndexesArray; i++) {
       m_indexArray[i] = new GLfloat[amountOfCoordinates];
   }
 
   for (int row = 0; row < m_sizeOfIndexesArray; ++row) {
       int col = 0;
       m_indexArray[row][col++] = indexes[row].x();
       m_indexArray[row][col++] = indexes[row].y();
       m_indexArray[row][col] = indexes[row].z();
   }
 
//    for (int row = 0; row < m_sizeOfIndexesArray; ++row) {
//        for (int col = 0; col < amountOfCoordinates; ++col) {
//            qDebug() << m_indexArray[row][col];
//        }
//    }
 
   // Colors
   m_colorArray = new GLfloat*[m_sizeOfpointsArray];
   for (int i = 0; i < m_sizeOfpointsArray; i++) {
       m_colorArray[i] = new GLfloat[amountOfCoordinates];
   }
 
   for (int row = 0; row < m_sizeOfpointsArray; ++row) {
       int col = 0;
       m_colorArray[row][col++] = 0.1f*( qrand()%11 ); // R - красная составляющая
       m_colorArray[row][col++] = 0.1f*( qrand()%11 ); // G - зелёная составляющая
       m_colorArray[row][col] = 0.1f*( qrand()%11 ); // B - синяя составляющая
       // qDebug() << m_colorArray[row][0] << " " << m_colorArray[row][1] << " " << m_colorArray[row][2];
       // qrand()%11 - псевдослучайное число от 0 до 10
   }
 
   draw();
}

Вот что в файле хранится:
Цитировать
# Blender v2.68 (sub 0) OBJ File: ''
# www.blender.org
o Cube
v 1.000000 1.000001 -0.999999
v 1.000000 -0.999999 -1.000001
v -1.000000 -0.999999 -1.000001
v -1.000000 1.000001 -0.999999
v 1.000000 0.999999 1.000001
v 0.999999 -1.000001 0.999999
v -1.000000 -1.000000 0.999999
v -1.000000 0.999999 1.000001
s off
f 1 2 4
f 5 8 6
f 1 5 2
f 2 6 3
f 3 7 4
f 5 1 8
f 2 3 4
f 8 7 6
f 5 6 2
f 6 7 3
f 7 8 4
f 1 4 8
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

А почему бы меня и не похвалить. Я изо всех сил стремлюсь к структурированному программированию как Дийкстра когда-то  Смеющийся
Нужно либо вас обоих хвалить, либо обоих ругать. Подмигивающий

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

Сообщений: 4350



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

Не один, прогресс включен агрегатом, вполне норм.
Для вас это норм? Я уже не удивляюсь. Т.е. без GUI я файл загрузить не смогу?
А вот был бы там сигнал (или возможность подключить наблюдателя), информирующий о прогрессе, было бы хорошо.

Чего лезть "с грыжей на танк"?  Улыбающийся
Ась. Не вижу танка. Улыбающийся
Вы за мои знания не переживайте, вы о своих подумайте. Если бы вы были в этом специалистом, то не писали бы ерунду.
« Последнее редактирование: Апрель 10, 2014, 19:20 от Old » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

У меня проблема с рисованием куба. Он не рисуется.
Попробуйте сначала одну грань (или треугольник) нарисовать. Руками задайте данные, просто что бы нарисовало.
В интернетах кучи документации и маленьких демок, вы спотыкаетесь на каждой ерунде. Грустный
Записан
8Observer8
Гость
« Ответ #43 : Апрель 10, 2014, 19:34 »

Спасибо! Что-то я об этом не подумал... Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



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

2 Hrundel У вас в коде ошибка, течет память и оставляет видимым диалог прогресса, если файл нельзя открыть.
Записан
Страниц: 1 2 [3] 4 5 ... 7   Вверх
  Печать  
 
Перейти в:  


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