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

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

Страниц: [1] 2 3 ... 7   Вниз
  Печать  
Автор Тема: Создание массива вершин фигуры с помощью редактора  (Прочитано 42709 раз)
8Observer8
Гость
« : Март 29, 2014, 07:36 »

Привет! Есть такой пример с трёхмерной фигурой, в котором массив вершин (координаты), массив индексов и массив цветов вершин генерируются в самой программе:

Массив координат:
Код
C++ (Qt)
void Scene3D::getVertexArray() // определить массив вершин
{
   GLfloat R=0.75; // радиус сферы
 
   // начальные значения для икосаэдра
   GLfloat a=4*R/sqrt(10+2*sqrt(5)); // сторона икосаэдра
   GLfloat alpha=acos((1-a*a/2/R/R)); // первый угол поворота по тэта
   // cos(alpha)=(1-a*a/2/R/R)
 
   // вычисляем точки икосаэдра
   //0 точка
   VertexArray[0][0]=0;   // x
   VertexArray[0][1]=0;   // y
   VertexArray[0][2]=R;   // z
 
   //1 точка
   VertexArray[1][0]=R*sin(alpha)*sin(0);
   VertexArray[1][1]=R*sin(alpha)*cos(0);
   VertexArray[1][2]=R*cos(alpha);
 
   // ...
}
 

Массив индексов:
Код
C++ (Qt)
void Scene3D::getIndexArray()   // определить массив индексов
{
   // 0 треугольник
   IndexArray[0][0]=0; // индекс (номер) 1-ой вершины
   IndexArray[0][1]=2; // индекс (номер) 2-ой вершины
   IndexArray[0][2]=1; // индекс (номер) 3-ей вершины
 
   // 1 треугольник
   IndexArray[1][0]=0;
   IndexArray[1][1]=3;
   IndexArray[1][2]=2;
 
   // ...
}
 

Массив цветов вершин:
Код
C++ (Qt)
void Scene3D::getColorArray() // определить массив цветов вершин
{
   for (int i=0; i<12; i++)
   {
       ColorArray[i][0]=0.1f*(qrand()%11); // R - красная составляющая
       ColorArray[i][1]=0.1f*(qrand()%11); // G - зелёная составляющая
       ColorArray[i][2]=0.1f*(qrand()%11); // B - синяя составляющая
       // qrand()%11 - псевдослучайное число от 0 до 10
   }
}
 

Описание примера: http://www.gamedev.ru/code/articles/OpenGL_Qt4
Исходники на Qt5: https://github.com/8Observer8/Icosahedron

Подскажите, пожалуйста, есть ли простой бесплатный редактор, в котором можно нарисовать 3D-фигуру, и чтобы этот редактор сгенерировал файл с массивом вершин, массивом индексов и массивом цветов вершин?

Заранее спасибо за ответ!
« Последнее редактирование: Март 29, 2014, 10:27 от 8Observer8 » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Март 29, 2014, 07:39 »

Blender.
Записан
8Observer8
Гость
« Ответ #2 : Март 29, 2014, 07:45 »

Blender.

О, отлично! Бесплатный редактор Улыбающийся Огромное спасибо! Если не будет получаться, то я здесь напишу Улыбающийся
Записан
8Observer8
Гость
« Ответ #3 : Март 29, 2014, 08:36 »

Когда запускаешь Blender, то появляется куб. Как сохранить этот куб, чтобы я мог открыть файл из Qt и считать координаты, массив индексов и т.д.? Я пытался "Сохранить как...", но он сохраняет в своём формате ".blend"
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #4 : Март 29, 2014, 08:41 »

А вам самому интересно так изучать?

Почитайте про простые текстовые форматы хранения, например, obj.
Экспортируйте модель в него и читайте потом из своей программы.
« Последнее редактирование: Март 29, 2014, 08:58 от Old » Записан
8Observer8
Гость
« Ответ #5 : Март 29, 2014, 10:18 »

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

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Март 29, 2014, 10:32 »

3D-фигуру, и чтобы этот редактор сгенерировал файл с массивом вершин, массивом индексов и массивом цветов вершин?
Vertex (vertices), можно по-русски "вертекс(ов)". И Вы забыли самый главный массив создать который обычно 80% работы и более
Записан
8Observer8
Гость
« Ответ #7 : Март 29, 2014, 10:41 »

И Вы забыли самый главный массив создать который обычно 80% работы и более
Какой же? В примере больше нет массивов. Массив координаты вершин. Потом вершины нумеруют и для каждого примитива формируют массив индексов. Ещё массив цветов вершин. Вроде ничего не забыл Улыбающийся
« Последнее редактирование: Март 29, 2014, 10:43 от 8Observer8 » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Март 29, 2014, 11:00 »

И еще одного массива нет. Его создание бывает или очень простым или непосильно сложным.
А еще раз скажете "вершина" - перестану отвечать
Записан
8Observer8
Гость
« Ответ #9 : Март 29, 2014, 11:07 »

Я не понимаю, о чём идёт речь? Улыбающийся Как я понял, Vertex у меня есть. Его можно сгенерировать программно, как в данном примере. А можно нарисовать фигуру в редакторе и загрузить Vertex из файла. Вы говорите о Vertex?
Записан
8Observer8
Гость
« Ответ #10 : Март 29, 2014, 11:26 »

Вот здесь написано, что Blender может в XML экспортировать: http://online.ts2009.com/mediaWiki/index.php/HowTo/Export_from_Blender#Exporter_Output

Как получится (или не получится) - здесь отпишусь Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #11 : Март 29, 2014, 11:30 »

Вот здесь написано, что Blender может в XML экспортировать: http://online.ts2009.com/mediaWiki/index.php/HowTo/Export_from_Blender#Exporter_Output
Насколько я помню, он может в 100500 форматов экспортировать + можно написать свои экспортеры.
Записан
8Observer8
Гость
« Ответ #12 : Март 29, 2014, 11:36 »

Спасибо за инфу по поводу написания своих экспортёров! Может в будущем пригодиться. Меня обрадовало, что можно XML на деле применить Улыбающийся Надо теперь пирамиду нарисовать в Blender'е и загрузить Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #13 : Март 29, 2014, 13:14 »

Я не понимаю, о чём идёт речь? Улыбающийся Как я понял, Vertex у меня есть. Его можно сгенерировать программно, как в данном примере. А можно нарисовать фигуру в редакторе и загрузить Vertex из файла. Вы говорите о Vertex?
Вертексы - это точки, как минимум они должны иметь позицию. Но это далеко не все что они могут иметь, на одной позиции далеко не уедешь. Объект нужно освещать, текстурировать, поэтому обычно данных/атрибутов больше. Какие это атрибуты - разбирайтесь. Хранить все в виде массивов (как делает OpenGL) необязательно, напр в .obj файле это не так.

Сами точки еще не поверхность, поэтому нужны еще полигоны, обычно они хранят индексы вертексов, как правило от 1 до 4. Хотя OpenGL понимает полигоны и неявно (типа "каждые N вертексов образуют полигон")

Желание "нарисовать что-то крутое" вполне естественно Улыбающийся Но увы, обычно на этом все и заканчивается. Ну загрузите, нарисуете, что с того? Задачи-то нет. OpenGL preview - это всего лишь мелкая деталь в 3D (причем худшая).
Записан
8Observer8
Гость
« Ответ #14 : Апрель 01, 2014, 12:10 »

Спасибо! Буду разбираться. Вот хороший туториал, в котором рассказано, как загрузить данные из obj-файла: http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_Load_OBJ
Записан
Страниц: [1] 2 3 ... 7   Вверх
  Печать  
 
Перейти в:  


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