Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2020, 17:28   #11
MrShip
Новичок
Джуниор
 
Регистрация: 24.11.2020
Сообщений: 9
По умолчанию

Спасибо за наводку и пример, теперь буду разбираться в построении 3d объектов
MrShip вне форума Ответить с цитированием
Старый 26.11.2020, 20:11   #12
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Куб на Qt C++ и OpenGL:
Куб на PyQt5 и OpenGL 3.3: https://rextester.com/VIQC38551
Куб на PySide2 и OpenGL 3.3: https://rextester.com/OWJ98916

Cube_OpenGLES20_Qt5Cpp.png
8Observer8 вне форума Ответить с цитированием
Старый 26.11.2020, 20:16   #13
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от MrShip Посмотреть сообщение
теперь буду разбираться в построении 3d объектов
Если нравится читать на английском, то вот один из самых популярных туториалов по OpenGL: https://learnopengl.com/ Если хотите на русском, то здесь его перевод: https://habr.com/ru/post/310790/
8Observer8 вне форума Ответить с цитированием
Старый 26.11.2020, 21:50   #14
MrShip
Новичок
Джуниор
 
Регистрация: 24.11.2020
Сообщений: 9
По умолчанию

Спасибо, пойди читать) Если появятся вопросы напишу
MrShip вне форума Ответить с цитированием
Старый 26.11.2020, 22:02   #15
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Когда я начинал разбираться с OpenGL, то learnopengl показался мне сложным. Мне помогла эта книга войти в курс дела: WebGL. Программирование трехмерной графики. Её можно найти в документах в VK. В начале теорию почитайте, увидите, как там просто объясняется. Потом learnopengl проще будет читать.
8Observer8 вне форума Ответить с цитированием
Старый 26.11.2020, 23:07   #16
MrShip
Новичок
Джуниор
 
Регистрация: 24.11.2020
Сообщений: 9
По умолчанию

Да я вроде понял, что мне нужно из learnopengl. Как я понял мне при помощи Assimp нужно будет загрузить объекты в созданный мною класс mesh, а потом при помощи умножения на матрицы вращать их и передвигать в пространстве. Но все равно спасибо, возьму на вооружение.

Последний раз редактировалось MrShip; 26.11.2020 в 23:13.
MrShip вне форума Ответить с цитированием
Старый 27.11.2020, 08:52   #17
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Мне Assimp столько нервов попортил. Я его сначала собрать не мог из исходников. После месяца попыток, я методом тыка убрал какие-то галочки в CMake GUI. Далее, возникла проблема с настройками, не помню какая именно. В итоге я выбрал формат .dae (Collada). Может у вас всё получится с Assimp с первого раза. В Qt есть встроенный модуль для работы с XML, а формат .dae - это как раз XML.

Я набросаю по-быстрому сейчас пример на Qt C++. В Blender я создал плоскость. В программе будет организован доступ к массиву координат и к массиву индексов. Может вам этот вариант тоже пригодится.

В файле нужно получить доступ к этим массивам:

Координаты:
Код:
          <float_array id="Plane-mesh-positions-array" count="12">-1 -1 0 1 -1 0 -1 1 0 1 1 0</float_array>
Индексы:

Код:
        <triangles material="PlaneMaterial-material" count="2">
          <input semantic="VERTEX" source="#Plane-mesh-vertices" offset="0"/>
          <input semantic="NORMAL" source="#Plane-mesh-normals" offset="1"/>
          <input semantic="TEXCOORD" source="#Plane-mesh-map-0" offset="2" set="0"/>
          <p>1 0 0 2 0 1 0 0 2 1 0 3 3 0 4 2 0 5</p>
        </triangles>
В массиве индексов:
1 - индекс VERTEX
0 - индекс NORMAL
0 - индекс TEXCOORD
2 - индекс VERTEX
0 - индекс NORMAL
1 - индекс TEXCOORD
и т.д.

Первый треугольник будет: 1, 2, 0. Это индексы массива вершин. Координаты вершин треугольника: (1 -1 0), (-1 1 0), (-1 -1 0)

Потому что вершины расположены так:
0: -1 -1 0
1: 1 -1 0
2: -1 1 0
3: 1 1 0
8Observer8 вне форума Ответить с цитированием
Старый 27.11.2020, 08:56   #18
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Так выглядит весь файлы с плоскостью:

Код:
<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <asset>
    <contributor>
      <author>Blender User</author>
      <authoring_tool>Blender 2.83.3 commit date:2020-07-22, commit time:06:01, hash:353e5bd7493e</authoring_tool>
    </contributor>
    <created>2020-08-03T14:03:19</created>
    <modified>2020-08-03T14:03:19</modified>
    <unit name="meter" meter="1"/>
    <up_axis>Z_UP</up_axis>
  </asset>
  <library_effects>
    <effect id="PlaneMaterial-effect">
      <profile_COMMON>
        <technique sid="common">
          <lambert>
            <emission>
              <color sid="emission">0 0 0 1</color>
            </emission>
            <diffuse>
              <color sid="diffuse">0.01664001 0.8000001 0.01191879 1</color>
            </diffuse>
            <reflectivity>
              <float sid="specular">0.5</float>
            </reflectivity>
          </lambert>
        </technique>
      </profile_COMMON>
    </effect>
  </library_effects>
  <library_images/>
  <library_materials>
    <material id="PlaneMaterial-material" name="PlaneMaterial">
      <instance_effect url="#PlaneMaterial-effect"/>
    </material>
  </library_materials>
  <library_geometries>
    <geometry id="Plane-mesh" name="Plane">
      <mesh>
        <source id="Plane-mesh-positions">
          <float_array id="Plane-mesh-positions-array" count="12">-1 -1 0 1 -1 0 -1 1 0 1 1 0</float_array>
          <technique_common>
            <accessor source="#Plane-mesh-positions-array" count="4" stride="3">
              <param name="X" type="float"/>
              <param name="Y" type="float"/>
              <param name="Z" type="float"/>
            </accessor>
          </technique_common>
        </source>
        <source id="Plane-mesh-normals">
          <float_array id="Plane-mesh-normals-array" count="3">0 0 1</float_array>
          <technique_common>
            <accessor source="#Plane-mesh-normals-array" count="1" stride="3">
              <param name="X" type="float"/>
              <param name="Y" type="float"/>
              <param name="Z" type="float"/>
            </accessor>
          </technique_common>
        </source>
        <source id="Plane-mesh-map-0">
          <float_array id="Plane-mesh-map-0-array" count="12">1 0 0 1 0 0 1 0 1 1 0 1</float_array>
          <technique_common>
            <accessor source="#Plane-mesh-map-0-array" count="6" stride="2">
              <param name="S" type="float"/>
              <param name="T" type="float"/>
            </accessor>
          </technique_common>
        </source>
        <vertices id="Plane-mesh-vertices">
          <input semantic="POSITION" source="#Plane-mesh-positions"/>
        </vertices>
        <triangles material="PlaneMaterial-material" count="2">
          <input semantic="VERTEX" source="#Plane-mesh-vertices" offset="0"/>
          <input semantic="NORMAL" source="#Plane-mesh-normals" offset="1"/>
          <input semantic="TEXCOORD" source="#Plane-mesh-map-0" offset="2" set="0"/>
          <p>1 0 0 2 0 1 0 0 2 1 0 3 3 0 4 2 0 5</p>
        </triangles>
      </mesh>
    </geometry>
  </library_geometries>
  <library_visual_scenes>
    <visual_scene id="Scene" name="Scene">
      <node id="Plane" name="Plane" type="NODE">
        <matrix sid="transform">1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1</matrix>
        <instance_geometry url="#Plane-mesh" name="Plane">
          <bind_material>
            <technique_common>
              <instance_material symbol="PlaneMaterial-material" target="#PlaneMaterial-material">
                <bind_vertex_input semantic="UVMap" input_semantic="TEXCOORD" input_set="0"/>
              </instance_material>
            </technique_common>
          </bind_material>
        </instance_geometry>
      </node>
    </visual_scene>
  </library_visual_scenes>
  <scene>
    <instance_visual_scene url="#Scene"/>
  </scene>
</COLLADA>
8Observer8 вне форума Ответить с цитированием
Старый 27.11.2020, 08:57   #19
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Если написать код загрузки плоскости, то любые другие объекты тоже будут загружаться.
8Observer8 вне форума Ответить с цитированием
Старый 27.11.2020, 09:16   #20
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Туториал, как парсить данные из XML на Qt C++: https://lucidar.me/en/dev-c-cpp/read...files-with-qt/
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Солнечная система(DirectX) Terray Общие вопросы C/C++ 0 11.04.2010 21:31
Солнечная система cheef Фриланс 3 24.03.2010 12:52
солнечная система в openGL nabla Помощь студентам 0 09.06.2009 15:23
Солнечная система в пасали Siroga35 Помощь студентам 1 30.03.2009 19:32