2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Математические основы 3D-графики
Сообщение26.07.2024, 18:17 
Сабж.
Книги, сайты...

зы Вы не подумайте.
Я не собираюсь писать свой движек. :)
Я хочу разобраться, как это работает.
С самых азов.

 
 
 
 Re: Математические основы 3D-графики
Сообщение26.07.2024, 18:26 
torsar в сообщении #1647448 писал(а):
Вы не подумайте.
Я не собираюсь писать свой движек.


Здесь не Гамедьев: половина пользователей не знает вообще, что такое движЁк

 
 
 
 Re: Математические основы 3D-графики
Сообщение28.07.2024, 11:56 
torsar в сообщении #1647448 писал(а):
Математические основы 3D-графики

Думается, основы 3D-графики и, например, модель трехмерной фигуры не является чисто математическими, они привязаны к конкретному программному обеспечению или платформе, есть разница в представлении и реализации. OpenGL оперируют одними понятиями, WebGL немножко другими, Blender еще какими-то, пусть и имеющими много общего. Поэтому нужно выбрать ПО и вперед ).
________________________________
Хотя основа может и единая. Трехмерная фигура (примитив) - это набор вершин, граней (полигонов), и нормалей. Полигон - это набор вершин, обычно трех. Нормали (которые часто, но не всегда - обычные нормали), нужны для учета освещения. Для установки цветов или текстур, а также особых эффектов (вода), пишутся директивы для видеокарты - шейдеры.

 
 
 
 Re: Математические основы 3D-графики
Сообщение06.08.2024, 14:34 
Аватара пользователя
Гордон, Курс начертательной геометрии.
Страуструп, С++
Direct3D 11 или OpenGL 4 или WebGL 2

 
 
 
 Re: Математические основы 3D-графики
Сообщение06.08.2024, 16:15 
Аватара пользователя
До поколения Direct3D 11 графика развивалась в сторону роста количества расширений, что б покрыть растущие требования разработчиков. Расширения опционально поддерживались видеокартами, а 3D-движки смотрели имеющийся арсенал и пытались с ним работать - их сложность росла в ширину. D3D11 API сильно упростили, мандаторно передав разработчикам обязанность самим считать координаты полигонов и цвета пикселей. Заодно отправив в мусорку тонны теперь уже ненужной информации и кучу веток в 3D-движках.

Координаты вершин полигонов на проекциях и в исходных текстурах всегда вручную считаются маленькими функциями - vertex-шейдерами (в самом простом случае вся функция - это умножение суммарной матрицы линейных преобразований 4x4 на 3d-вектор - координату вершины в объекте), цвет пикселей всегда вручную считается маленькими функциями - pixel/sample-шейдерами (в самом простом случае функция просто берет значение из текстуры). Из текстур цвета вытаскиваются встроенными семплерами с готовой интерполяцией. В текстуры пиксели подмешиваются встроенными блендерами с готовыми режимами объединения. Ну и еще есть Z-буфер и Stencil-буфер для отсечений. Отрисованные текстуры можно использовать как исходные. Экран - финальная отрисованная текстура. Порог входа - достаточно низкий, а предоставляемые возможности - огромные.

OpenGL 4 и WebGL 2 - с этой точки зрения принципиально приблизительно то же самое, что и D3D11.

А вот Direct3D 12 и Vulkan - еще более низкоуровневые API, но не в математическую сторону графики, а в сторону ручного программирования конвейеров видеокарты, что значительно увеличивает порог входа. С поправкой, что параллельно в них появился ray-tracing, совершенно другой способ отрисовки 3D-графики, нежели полигональный рендеринг (это совпадение, ray-tracing мог появиться и раньше, просто мощности видеокарт до него как раз доросли). Это вам пока не нужно.

Разберитесь с понятием проекций из начертательной геометрии, как пересчитывать трехмерные координаты объектов в двухмерные координаты их проекций на экране с помощью линейной алгебры. Дальше, умея программировать на C, и имея достаточное воображение, с помощью D3D11 вы сами вручную сможете рисовать достаточно богатую 3D-графику без изучения тонны полезной и не очень полезной литературы.

 
 
 
 Re: Математические основы 3D-графики
Сообщение30.12.2024, 02:55 
Если рисовать уже умеете, почитайте какой-нибудь ликбез по проективной геометрии (попробуйте сначала по этой книжке)
https://elib.kstu.kz/fulltext/Skan/aleksandrov_p_s__kurs_analiticheskoi_geometrii_i_lineinoi_al.pdf
И про барицентрические координаты (есть популярное изложение в одной из глав в книге Фрейденталь "Математика в науке и вокруг нас"), чтоб понять, как работает видеокарта. Если мы рисуем шарик, мы его триангулируем (приближаем многогранником с треугольными гранями). Если мы хотим нарисовать глобус, надо наложить на этот шарик картинку карты полушарий (текстуру). Для каждой вершины каждого треугольника мы вычисляем соответствующую точку на картинке (тут простая тригонометрия) и весь массив координат вершин треугольников и соответствующих им координат точек текстуры отправляем на видеокарту рисовать. И видеокарта сама вычисляет для каждой точки любого треугольника (не только вершины, а каждой) координаты соответствующей точки текстуры. С помощью барицентрических координат. Делать эти вычисления можно одновременно (параллельно) для многих треугольников сразу, что и делает видеокарта (представляющая собой набор многих маленьких процессоров-ядер, способных работать параллельно). Если же вдруг рисовать ещё не умеете, найдите на Habr курс OpenGl.

 
 
 
 Re: Математические основы 3D-графики
Сообщение09.01.2025, 20:27 
Аватара пользователя
Раньше из математики в 3D графике использовали кватернионы, сейчас используют ли ... не знаю.

 
 
 
 Re: Математические основы 3D-графики
Сообщение10.01.2025, 01:05 
Аватара пользователя
Боресков. Программирование компьютерной графики

 
 
 
 Re: Математические основы 3D-графики
Сообщение05.02.2025, 20:47 
Аватара пользователя
Soul Friend в сообщении #1669248 писал(а):
Раньше из математики в 3D графике использовали кватернионы, сейчас используют ли ... не знаю
Видеокарты сейчас умеют аппаратно быстро умножать матрицы 4x4, и обычно достаточно перемножить от трех до пяти-шести таких матриц (в случае использования скелетов) на каждый монолитный объект, а потом прогнать через результат все вершины этого объекта. Потому преобразования с помощью математических кватернионов, как правило, используют редко.

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

 
 
 [ Сообщений: 9 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group