|
0 / 0 / 0
Регистрация: 24.10.2019
Сообщений: 8
|
|
Трехмерная графика30.10.2019, 23:37. Показов 13876. Ответов 47
Метки нет (Все метки)
Как понятно из названия хочется с помощью языков этих в ручную написать 3 мерное пространство, думал делать через 3 мерный массив, но подумав получше понял что идея плохая, кто подскажет как с нуля сделать 3 мерное пространство ?
0
|
|
| 30.10.2019, 23:37 | |
|
Ответы с готовыми решениями:
47
Трехмерная точка Трехмерная матрица через вложенные вектора трехмерная графика |
| 01.11.2019, 21:05 | |||
|
Я не в курсе, какие современные книги есть по компьютерной графике, которые просто переводятся на шейдеры и имеют примеры на шейдерах, но вот несколько на английском, которые я изучаю:
Добавлено через 11 минут
1
|
|||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||
| 01.11.2019, 21:12 | ||||
|
Но и у других есть нишевые преимущества: OpenGL1 проще для старта. Он, хоть и магически, но делает то, что от него хотят без написания нескольких отдельных программ (одна для проца и по одной для шейдеров). Тупо говоришь ему "нарисуй треугольник по этим точкам" и он рисует. Для примитивной графики этого достаточно, но если хочется всерьез заниматься графикой - естественно, нужно быстренько уходить на тот же OGL2. Ручная растеризация хороша для понимания всей этой машинерии без магии вообще. Плюс работает даже когда видеокарты нет в принципе. Но и воспользоваться ей не удастся, так что поигрались - и на шейдерную библиотеку.
0
|
||||
| 01.11.2019, 21:36 | ||
|
А есть затенения, это то что даёт объекту трёхмерность, когда, допустим, у кубика одни грани светлее, а другие темнее. С помощью математики это делается довольно просто. Известно положение источника света, известна нормаль в точке, а так как фрагментный шейдер выполняется для каждого фрагмента, то цвет фрагмента определятся через умножение цвета на скалярное произведение нормали, на вектор направления на источник света. Если нормаль смотрит на прямо на источник, то есть между нормалью и направлением на источник 0 градусов, то скалярное произведение даёт 1, и получается максимальный множитель. Номально единичный вектор, а направление на источник, тоже нужно сделать единичным ветором. Получится, что остаётся один множитель - Cos. Без затенения белый кубик выглядит так и не выглядит, как 3D объект: https://jsfiddle.net/8Observer8/pespackq/ А вот если добавить затенение, то кубик выглядит, как 3D объект: https://jsfiddle.net/8Observer8/4jchxo84/ Если писать свою графическую 3D библиотеку, то добавить затенение, скорее всего, будет очень сложно, да и не перспективно. Лучше сделать на шейдерном.
0
|
||
| 01.11.2019, 22:18 | ||||
|
Добавлено через 8 минут Добавлено через 28 минут
0
|
||||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||||||
| 02.11.2019, 14:49 | ||||||||
Разве что из интереса или на старших моделях, приближающихся к телефонным или компьютерным процессорам, и то вряд ли.
0
|
||||||||
| 02.11.2019, 16:08 | ||||||||
|
0
|
||||||||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||||||||
| 02.11.2019, 23:52 | ||||||||||
![]() Разобраться, как на самом низком уровне работает вся эта трехмерка и хватит ли у меня навыков уложиться по скорости и объему. Своему подходу я следую только потому что это интересно, но не потому что эффективно. Более того, если кто-то стремится не к процессу, а к результату, я буду агитировать за максимально высокоуровневые библиотеки. Но вот если такой цели нет, можно попробовать разные подходы и смотреть что понравится больше.И тот же OGL1 сгодится чтобы "потыкать трехмерку палочкой", когда нет требования эффективности. Примерно так же графику можно выводить средствами SDL или Qt, разве что в последних выводить 3D сложнее. Я там не был как раз по той причине, что практика 3D сейчас не особо интересует. А C# не интересовал никогда. Вот пообщаться на философские темы - сколько угодно. Если бы ТС или Folian высказали конкретную цель: написать игру, я бы сразу отослал к вам, как более сведущему в этом вопросе. Но ситуация-то другая: Folian решил написать чисто софтовый движок в консоли. Все прекрасно понимают, что практическая ценность у такого велосипеда нулевая, но велосипед на то и велосипед чтобы извлекать учебную пользу. Смею надеяться, что в софтовых реализациях у меня опыта побольше, поэтому я указал на типичные проблемы и подходы - [U]для данной задачи/U].
0
|
||||||||||
| 03.11.2019, 03:10 | |||||||||||
|
0
|
|||||||||||
| 03.11.2019, 03:11 | ||
|
0
|
||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||||
| 03.11.2019, 11:44 | ||||||
|
Ну и, конечно, вызывают сомнения способности консоли эту красоту отобразить. Учитывая разрешение в сотню на сотню точек и два десятка градаций яркости. Хотя разработчикам aalib / caca вроде бы что-то удается. То есть все это скорее красивости, чем функционал. Когда они есть это хорошо, но когда нет - не смертельно. И еще раз усомнюсь в источнике моделей - кто их рисовать-то будет и стоит ли оно того? Вот и используют вместо этого "магию", что-то в роде "а теперь скажем компьютеру нарисовать треугольник - glBegin(GL_TRIANGLES)". "а теперь повернем его на какой-то угол - glRotatef(...)". Если повезет - дойдут до ручного расчета матриц, ведь в OGL1 тоже можно умножить текущую матрицу на явно заданную пользователем. То есть для отправной точки "трехмерная графика это не так сложно" оно сойдет, а дальше уже можно смело говорить "а теперь забываем OGL1 как устаревший и переходим к шейдерам". И мне кажется, что уже имея общее представление о функционировании трехмерки эту ступеньку будет преодолеть проще. Но это все в хорошем случае если преподаватель действительно хочет научить, а студенты - научиться именно данному предмету, а бывает это далеко не всегда. И вот в таком случае OGL1 позволит достичь хоть какого-то результата.
0
|
||||||
| 03.11.2019, 16:19 | ||||||||||||||
|
Добавлено через 1 час 47 минут Добавлено через 14 минут Добавлено через 26 минут Я вспомнил, что трёхмерная графика используется:
Я считаю, что 3D графика не разрывна с большим желание и стремлением изобразить что-то в 3D, а значит, что неразрывно связано с 3D редакторами, например, Blender, который бесплатный и легковесный. Должно быть внутренняя сильная потребность развиваться в 3D конструировании, и потребность в изучении математики, которая стоит за всеми состояниями и процессами.
0
|
||||||||||||||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||||||||||
| 03.11.2019, 18:06 | ||||||||||||
|
Вот такое сойдет в качестве освещения от направленного источника? С текстурами и даже моделями закрашивания не заморачивался - цвет грани рассчитывается по одной вершине. Теоретически, цвет возможно интерполировать между вершинами, но мне было лень, да и памяти в контроллере всего 20 кБ, ее и на видеобуфер-то не хватает (320х240 точек, по 16 бит на цвет, плюс задний буфер плюс 16 бит буфер глубины получается 450 кБ), а ведь еще сами вершины хранить надо и полурассчитанные данные. Если добавить еще текстуры и интерполяцию цветов контроллер совсем загнется. А для компьютера я ведь уже давал название книжки, где авторы делают ровно то же самое, но под DOS. Вместе с текстурами, освещением и всем остальным. Есть ведь и другие, не менее интересные занятия: те же контроллеры (сейчас пилю полу-медицинский прибор определения пульса, он даже что-то определяет несмотря на мои усилия), механика, интерпретатор Lua, еще Qt или gtk палочкой потыкать надо (не на winapi же гуй делать, правда!). Не говоря об основной работе. А вот это баловство с ручной растеризацией это именно баловство. Ну и учтите, что для матричного OGL2 все-таки нужны знания о матрицах, векторах и аффинных преобразованиях. А процедурным OGL1 может пользоваться школьник класса восьмого. И это тоже существенный плюс, так как понятия матриц и векторов там таки даются, хотя и как опциональные, но это повысит его заинтересованность в линейной алгебре. Где-то у меня валяется попытка реализации игрового GUI на SDL2 + OpenGL1. Как и положено первому велосипеду - скрипит и падает, куда ж без этого. Но формочки, кнопочки, поля ввода, ползунок прокрутки и тому подобную мелочь показывает. Правда делал уже довольно давно, сейчас, конечно, делал бы по-другому, причем начал бы с прикручивания туда Lua для обработки событий. Не поймите неправильно: личное мнение это личное мнение, я стараюсь его никому не навязывать. Вы же не будете составлять чертежи на телефоне, правда? Или ту же скелетную анимацию. Телефон хорошо годится для демонстрации контента "на выезде", но не тогда, когда рядом есть компьютер. И при производстве контента телефон также проигрывает.
0
|
||||||||||||
|
2 / 1 / 1
Регистрация: 05.04.2019
Сообщений: 14
|
|
| 03.11.2019, 18:41 | |
|
Дайте гайд, куда копипастить код чтоб у себя проверить, и выше ncur_doom.rar закидывать
VS 2017
0
|
|
| 03.11.2019, 19:38 | ||||||||||||
|
0
|
||||||||||||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||||
| 03.11.2019, 20:40 | ||||||
|
Хватит уже рекламы webGL. Ну позволяет оно выводить трехмерку на телефоне, ну и что. Вы вцепились в какую-то микроскопичесую фичу и преподносите ее как будто ключевую.
0
|
||||||
| 03.11.2019, 21:13 | ||||||
|
0
|
||||||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||||
| 03.11.2019, 23:45 | ||||
|
Именно в той прошивке не делал, но не вижу принципиальной проблемы: вместо константного вектора берем вектор от вершины к источнику. Это делается в gl.c: в функции glDrawTriangleV вместо вектора light считаем тот, который нужен. Правда, конечно, добавится тяжелая функция взятия обратного корня, но ведь и ее можно оптимизировать одним хитрым хаком. Много ли внимания уделяется растеризации примитивов, конкретной реализации буфера глубины и его разрядности? Между прочим, даже в этой теме Folian применил совсем другой подход, не завязанный на матрицы - и в конкретном применении он эффективнее.
0
|
||||
| 06.11.2019, 13:21 | ||||||||||||
|
Геометрия куба:
Ось Y направлена вверх. Ось Z направлена на нас. Пусть центр куба находится в центре координат, а сторона куба равна 1 метру. Координаты вершин: v0: (0.5, 0.5, 0.5) v1: (-0.5, 0.5, 0.5) v2: (-0.5, -0.5, 0.5) и т.д. Переносим куб в программу, создав одномерный массив:
0
|
||||||||||||
|
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
|
||
| 06.11.2019, 14:20 | ||
|
А если хотите потом вывести как общий одномерный массив в OGL или еще куда, так явное приведение типов никто не отменял. Более того, если мне не изменяет память, в соответствующих функциях задается расстояние между элементами, и туда удобно подставить sizeof(Point). А потом спокойно добавлять в тот же вектор нормали, текстурные координаты и прочее. В случае же одномерного массива, все смещения придется считать вручную, да еще и не в одном месте.
0
|
||
| 06.11.2019, 15:10 | |||||||||
|
MaksimK1, вам задание. Перевести описанную мною идею на Си, C++ или на тот язык, который вам нравится. Я сделал пример на C#. Может быть вам он поможет сейчас или в будущем:
0
|
|||||||||
| 06.11.2019, 15:10 | |
|
Трёхмерная графика Трехмерная графика Трехмерная графика трёхмерная графика Трехмерная графика surf из двухмерной матрицы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2.
Задача:
Обеспечить запись документа в регистр сведений независимо от. . .
|
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется.
Ну как вам?
|
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания
источниках данных и элементов формы(текстовые поля и метки), опирается все
это на технологию событий и мета. . .
|