Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/56: Рейтинг темы: голосов - 56, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 24.10.2019
Сообщений: 8

Трехмерная графика

30.10.2019, 23:37. Показов 13146. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как понятно из названия хочется с помощью языков этих в ручную написать 3 мерное пространство, думал делать через 3 мерный массив, но подумав получше понял что идея плохая, кто подскажет как с нуля сделать 3 мерное пространство ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.10.2019, 23:37
Ответы с готовыми решениями:

Трехмерная точка
Всем здравствуйте! Нужна программка. Что есть: Код структуры описывающей трехмерную точку { double x; double y; ...

Трехмерная матрица через вложенные вектора
Как работать с 3-х мерным вектором ? Есть класс A. В классе B в привате находится vector< vector <vector<A> > >...

трехмерная графика
доброго времени суток, подскажите какими классами|интерфейсами какого пакета надо оперировать чтобы создать приложение, которое при запуске...

47
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
01.11.2019, 21:05
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
разница в способе обработки: OpenGL1 считал матрицы самостоятельно (все эти glRotate, glTranslate)
Он очень много считает самостоятельно: освещение, затенения, тени. От программиста скрыта вся математика. Для него выглядит всё как магия. В шейдерном есть правило: загрузить данные на видео карту, а шейдеры будут брать данные на обработку. Вся математика на ладони: освещение делай сам, матрицу вида пиши сам, матрицу проекции тоже - сам. В этом плане все книги по компьютерной графике естественно применимы к шейдерам. Да, вершины объектов, допустим кубика тоже создаёшь отгружаешь на в память видеокарты сам. Вершины же нужно задать, как и нормали, чтобы написать освещение самому. В этом простота шейдернов и закрытость и сложность старого OpenGL - где вся математика была в магическом чёрном ящике. Как там считаются затенения не было понятно и нельзя было в это вмешаться. А ещё данные гонялись с клиента (с CPU) на сервер (на GPU) каждый кадр, то есть 60 раз в секунду. Поэтому я за изучение компьютерной графики по шейдерам, где всё прозрачно и вся математика, как на ладони. Только с шейдеров и нужно начинать изучать компьютерную графику. Есть много очень хороших книг, но правда я читаю только на английском.

Я не в курсе, какие современные книги есть по компьютерной графике, которые просто переводятся на шейдеры и имеют примеры на шейдерах, но вот несколько на английском, которые я изучаю:

Добавлено через 11 минут
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Но суть та же: процессор отдает исходные вершины, текстуры и прочее сырье, а видеокарта это перемешивает и выдает на экран.
Суть в том, что разный уровень абстракции у разных библиотек. Чем ниже уровень абстракции, тем больше нужно технических тонкостей и математики знать на автомате. Чем ниже, тем выше может быть производительность приложения и меньше его размер. Например, такой графический движок, как Ogre3D даёт высокий уровень абстракции и ему можно скормить объекты со скелетной анимацией, быстренько настроить срабатывание анимаций, но написать свои шейдеры, чтобы реализовать любые требуемые эффекты или поведение человек сразу не сможет. Тут вопрос о балансе и перспективе. Какие цели для себя ставит данный человек? Сколько у него свободного времени? Можно свою графическую библиотеку написать, умея рисовать пиксели на GDI, но я считаю, что лучше пустить своё быстро бегущее и короткое время на GLSL, то есть на современную компьютерную графику, где математика полностью открыта, а железо работает очевидно и просто с точки зрения программиста.
1
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,916
01.11.2019, 21:12
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Он очень много считает самостоятельно: освещение, затенения, тени.
Разве OpenGL1 умеет расставлять нормальные тени? Их и на современном-то с трудом делают.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Поэтому я за изучение компьютерной графики по шейдерам, где всё прозрачно
Один из хороших подходов.
Но и у других есть нишевые преимущества: OpenGL1 проще для старта. Он, хоть и магически, но делает то, что от него хотят без написания нескольких отдельных программ (одна для проца и по одной для шейдеров). Тупо говоришь ему "нарисуй треугольник по этим точкам" и он рисует. Для примитивной графики этого достаточно, но если хочется всерьез заниматься графикой - естественно, нужно быстренько уходить на тот же OGL2.
Ручная растеризация хороша для понимания всей этой машинерии без магии вообще. Плюс работает даже когда видеокарты нет в принципе. Но и воспользоваться ей не удастся, так что поигрались - и на шейдерную библиотеку.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Какие цели для себя ставит данный человек?
Вот это ключевой момент. Мне, например, именно низкий уровень интереснее, чем готовая игра.
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
01.11.2019, 21:36
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Разве OpenGL1 умеет расставлять нормальные тени? Их и на современном-то с трудом делают.
Есть тени отбрасываемые одним объектом на поверхность другого. Есть масса различных способов, как это можно сделать. Я использую этот способ на демке на WebGL https://jsfiddle.net/8Observer8/jsnfwcae/ , где камера незаметно быстро ставится на место источника света и происходит анализ, какие фрагменты примитивов видны, а какие нет. Это один из самых простых способов. Вопрос ещё в том, что будет труднее: реализовать тени на шейдерном или написать свою графическую библиотеку с реализацией теней? Вопрос риторический.

А есть затенения, это то что даёт объекту трёхмерность, когда, допустим, у кубика одни грани светлее, а другие темнее. С помощью математики это делается довольно просто. Известно положение источника света, известна нормаль в точке, а так как фрагментный шейдер выполняется для каждого фрагмента, то цвет фрагмента определятся через умножение цвета на скалярное произведение нормали, на вектор направления на источник света. Если нормаль смотрит на прямо на источник, то есть между нормалью и направлением на источник 0 градусов, то скалярное произведение даёт 1, и получается максимальный множитель. Номально единичный вектор, а направление на источник, тоже нужно сделать единичным ветором. Получится, что остаётся один множитель - Cos.

Без затенения белый кубик выглядит так и не выглядит, как 3D объект: https://jsfiddle.net/8Observer8/pespackq/



А вот если добавить затенение, то кубик выглядит, как 3D объект: https://jsfiddle.net/8Observer8/4jchxo84/



Если писать свою графическую 3D библиотеку, то добавить затенение, скорее всего, будет очень сложно, да и не перспективно. Лучше сделать на шейдерном.
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
01.11.2019, 22:18
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Но и у других есть нишевые преимущества: OpenGL1 проще для старта.
Для старта: нарисовать треугольник, квадрат, и текстуру на квадрат, а дальше его не можно сразу бросать и переходить к шейдерному. Сейчас на русском на Хабре есть перевод онлайн туториала по шейдерному. Очень хорошо и доступно изложены базовые принципы и даже необходимые основы линейной алгебры, которой нужно совсем немного. Но лучше изучать оригинал, ссылка на который на хабре есть, чтобы учить английский сразу же, все нужные термины понимать и изучать уже специализированные книги по современной компьютерной графике на английском.

Добавлено через 8 минут
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ручная растеризация хороша для понимания всей этой машинерии без магии вообще. Плюс работает даже когда видеокарты нет в принципе. Но и воспользоваться ей не удастся, так что поигрались - и на шейдерную библиотеку.
Если на микроконтроллере делать, то да есть смысл. Но в шейдерном продуманно сделали комбинацию взаимодействия с видео картой и линейной алгеброй. Я был квадрат с текстурой на OpenGL1 нарисовал и даже не стал бы там с затенениями, тенями, освещениями, встроенными матрицами знакомиться, а переходил бы хоть на OpenGL2, чтобы быть знакомым с attribute/varying из OpenGL ES 2 (на котором базируется WebGL1), а потом бы переходил на OpenGL ES 3 (на котором базируется WebGL2). Можно и сразу на свой Android писать 3D графику, на iPhone. Я недавно Xamarin начал осваивать, на эмуляторе запустился, покрасив экран в зелённый цвет с помощью функции GL.ClearColor().

Добавлено через 28 минут
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вот это ключевой момент. Мне, например, именно низкий уровень интереснее, чем готовая игра.
Мне тоже низкий уровень интересен, чтобы делать полезные неигровые интерактивные 3D приложения для разных платформ, но для меня низкий уровень заканчивается на шейдерном OpenGL. С другой стороны я изучаю готовые графические и игровые движки: Unity, Babylon.js, Three.js, чтобы видеть, как работать на высоком уровне абстракции с графикой. Но, кстати, в движке Unity нет такого, что запустил и уже готовая игра. Просто задачи разные бывают. Для какой-то задачи лучше подходит один инструмент, а для другой - другой инструмент. Бывает, что быстрее сделать на Unity, а бывает, что нужно для сайта и заказчик хочет на Three.js, либо его можно уговорить. Недавно ко мне обратились, сделать на Three.js, а я уговорил на Babylon.js, потому что мне нравится TypeScript, а BJS написан на TS, а Three.js не так удобен из TS. Кто в какой области, что знает или изучает, то и выбирает.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,916
02.11.2019, 14:49
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Есть масса различных способов, как это можно сделать.
То, что с его помощью это можно сделать никто не спорит. Меня смутила фраза что обсчет теней есть прямо в самом OGL1.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
А есть затенения, это то что даёт объекту трёхмерность
Чтобы не путать с "нормальными" тенями, лучше называйте расчетом освещенности. Потому что в отличие от теней, которые одни примитивы отбрасывают на другие, для освещенности нужно только взаиморасположение примитива и источника света.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Если писать свою графическую 3D библиотеку, то добавить затенение, скорее всего, будет очень сложно, да и не перспективно. Лучше сделать на шейдерном.
Если речь про освещенность, то это всего лишь расчет цвета по известной нормали и известном векторе до источника света, либо даже через текстуры освещения (но на процессоре долговато). А если тени - согласен, не очевидно.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
а дальше его не можно сразу бросать и переходить к шейдерному
Я был квадрат с текстурой на OpenGL1 нарисовал
Вы когда-то говорили, что ради эксперимента пишете сообщения на английском, а потом автопереводчиком преобразовываете для форума. К сожалению, не всегда он справляется...
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Можно и сразу на свой Android писать 3D графику, на iPhone.
Честно говоря, не понимаю людей, пишущих или использующих подобные вещи на телефоне. Не предназначен он для этого! Но это не холивара ради, просто мысли вслух.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Если на микроконтроллере делать, то да есть смысл.
Строго говоря, на контроллере вообще не имеет смысла это делать Разве что из интереса или на старших моделях, приближающихся к телефонным или компьютерным процессорам, и то вряд ли.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Недавно ко мне обратились, сделать на Three.js, а я уговорил на Babylon.js
Я понимаю, вы делитесь жизненным опытом и своим отношением к различным технологиям, но это уже слишком далеко от темы. Вы уже неоднократно выкладывали ссылки и примеры кода (что весьма похвально), так может стоит организовать какую-то личную площадку (сайт, блог, канал ютуба, просто сторонний ресурс), на котором распишете все то же, но еще подробнее, и будете скидывать ссылку туда или копипастить демо-куски кода.
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
02.11.2019, 16:08
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Меня смутила фраза что обсчет теней есть прямо в самом OGL1.
Как тень реализовать на OGL1 от движущегося объекта?

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Чтобы не путать с "нормальными" тенями, лучше называйте расчетом освещенности.
"затенение" - то же нормально звучит, как перевод слова "shading". Есть "тень", есть "затенение".

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Если речь про освещенность, то это всего лишь расчет цвета по известной нормали и известном векторе до источника света, либо даже через текстуры освещения (но на процессоре долговато).
Насколько проще и быстрее по времени изучения будет освоить этот способ. Вы не могли бы сделать, чтобы точечный источник света был зафиксирован в одном положении, а кубик вращался, вот так: https://jsfiddle.net/8Observer8/jnd0j6w0/ Лучше как здесь в примере, чтобы и одноцветный кубик был и текстурированный. На шейдерном нужно знать координаты вершин кубика, массив нормалей, текстурные координаты, а остальное "затенение" (то есть расчёт цвета фрагмента примитива) делается с помощью линейной алгебры через скалярное произведение векторов (нормали и направление на источник) в фрагментном шейдере. Сделайте, пожалуйста, в виде EXE для Windows, если есть такая возможность. Может действительно ваш пример для начинающих будет намного понятнее, намного проще и намного быстрее в реализации, чем изучение шейдеров. Я перепишу этот пример на C# и OpenTK/OpenGL 3.0 для практики, чтобы не просто разговоры, а какие-то тренировки были.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вы когда-то говорили, что ради эксперимента пишете сообщения на английском, а потом автопереводчиком преобразовываете для форума. К сожалению, не всегда он справляется...
Просто мне 5 месяцев хватило, чтобы определённые навыки развить. Дальше просто стал больше писать на зарубежных форумах. А переводчиком больше не перевожу. Просто описка это. Написал "не" и отвлёкся, не проверил.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Честно говоря, не понимаю людей, пишущих или использующих подобные вещи на телефоне. Не предназначен он для этого! Но это не холивара ради, просто мысли вслух.
А я не понимаю людей, которые пишут 3D графику в консоле и на МК. Они точно не предназначены для этого. На сматфонах и планшетах есть OpenGL ES 2 и OpenGL ES 3. Можно нативные приложения писать на Xamarin, которые имеет встроенную поддержку связи C# и OpenGL ES через библиотеку OpenTK. А ещё на всех мобильных браузерах реализован WebGL 1.0. Это самый лучший способ реализовывать 3D графику, потому что мобильные телефоны и планшеты есть практически у всех. Если написать интерактивное 3D приложение для планшета на OpenGL ES, то можно поехать туда где нет интернета и показывать там свои 3D графики, инженерные демки для демонстрации работы механизмов в 3D. По идее и на WebGL можно собрать исполняемый файл на Electron, но я не пробовал. Так что зря вы считаете, что мобильные платформы не предназначены для компьютерной 2D/3D графики. Намного интереснее написать 3D приложение для мобильного, а потом покрутить его касаниями. Мобильное всегда с тобой и можно показать своё полезное 3D приложение. Нужно сразу агитировать изучать OpenGL ES и собирать для планшетов и смартфонов. А старый OpenGL из мобильных выбросили уже давно и выбросили его из OpenGL 3.2 Core. За рубежом практически все поголовно начинают с шейдерного.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Я понимаю, вы делитесь жизненным опытом и своим отношением к различным технологиям, но это уже слишком далеко от темы. Вы уже неоднократно выкладывали ссылки и примеры кода (что весьма похвально), так может стоит организовать какую-то личную площадку (сайт, блог, канал ютуба, просто сторонний ресурс), на котором распишете все то же, но еще подробнее, и будете скидывать ссылку туда или копипастить демо-куски кода.
Я считаю, что начинающему нужно сразу раскрывать горизонт, чтобы он понимал, что для разных задач есть разные инструменты и языки. Это я просто привёл пример графических движков, которые добавляют уровень абстракции над OpenGL, а TypeScript и C# позволяют собирать кроссплатформенные решение. Это абсолютно нормально, что у разных людей есть разные точки зрения и подходы. У вас подход снизу. Вы считаете, что нужно начинать с самых нижних слоём, то есть собрать компьютер из микросхем, написать ПО с самого нуля, а потом через несколько лет реализовать 3D графику на МК, ещё через несколько лет написать свою ОС реального времени. Дальше вы советуете изучить OpenGL 1 в полной мере. Лет через 5 начать изучать шейдерный OpenGL, а через 10-15 лет можно начинать изучать графические движки типа Ogre3D и игровые типа: Unreal Engine 4, Unity, CryEngin. А у меня другой подход. Я считаю, что сначала нужно начать с WebGL по данной книге: WebGL. Программирование трехмерной графики. В ней лучше всего объяснены основы линейной алгебры и работы шейдеров. Эти примеры легко переводятся на C, С++, C#, Java и т.д.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
так может стоит организовать какую-то личную площадку (сайт, блог, канал ютуба, просто сторонний ресурс)
Блог я создал на Киберфоруме, но туда очень мало заходят народу, особенно, мало начинающих. Вы там ниразу не были: https://www.cyberforum.ru/blogs/416874/ На Youtube я всё никак не решаюсь начать записывать видео уроки на английском, чтобы дополнительно развиваться английский и навыки в направлении объяснения голосом. Так английский будет лучше прокачивать и я лучше буду усваивать материал по компьютерной графике. Мы обязательно должны высказывать свою позицию и высказывать свою точку зрения. Нельзя чтобы все думали, что только ваше мнение правильно, а остальные ничего не понимают, и сильно заблуждаются. Да, у нас разные подходы на началу изучения компьютерной графики и разные инструменты и языки для решения разных задач. У вас есть своя жёсткая линия, а у меня своя. У вас МК, своя графическая библиотека, у меня шейдерный OpenGL/WebGL, мобильные платформу с 3D графикой, графические движки, игровые фреймворки и движки. Это нормально. Просто мы решаем разные задачи связанные с 3D графикой. Главное, чтобы начинающие могли выбрать из разных технологий и языков, какое направление лучше и быстрее решает поставленные ими задачи.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,916
02.11.2019, 23:52
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Как тень реализовать на OGL1 от движущегося объекта?
А какая разница, от движущегося или неподвижного? В любом случае OGL этим не занимается, а программист, наверное, умнее автоматики.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Есть "тень", есть "затенение"
... и эти слова очень похожи, причем "затенение" скорее воспринимается как производное от "тень", в отличие от "освещенности", которая явно производная от источника света.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Вы не могли бы сделать, чтобы точечный источник света был зафиксирован в одном положении, а кубик вращался
Сейчас занимаюсь в основном микроконтроллерами и наукой, а не трехмеркой. Да и в трехмерку никогда не заходил дальше ручной растеризации и OGL1. Так что с вашего позволения не буду позориться
Цитата Сообщение от 8Observer8 Посмотреть сообщение
А я не понимаю людей, которые пишут 3D графику в консоле и на МК. Они точно не предназначены для этого.
Я нигде и не говорил, что у подобных развлечений есть практическая польза. Вот учебная - есть, мне этого достаточно.
Разобраться, как на самом низком уровне работает вся эта трехмерка и хватит ли у меня навыков уложиться по скорости и объему.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Так что зря вы считаете, что мобильные платформы не предназначены для компьютерной 2D/3D графики.
Вы описали почему это возможно, но не почему это нужно. Раз народ это делает, было бы странно спорить что это возможно. Но вот какое у этого назначение кроме игр? Еще по идее VR/AR возможно, но это совсем отдельная тема.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Вы считаете, что нужно начинать с самых нижних слоём, то есть собрать компьютер из микросхем
Не переоценивайте меня Своему подходу я следую только потому что это интересно, но не потому что эффективно. Более того, если кто-то стремится не к процессу, а к результату, я буду агитировать за максимально высокоуровневые библиотеки. Но вот если такой цели нет, можно попробовать разные подходы и смотреть что понравится больше.
И тот же OGL1 сгодится чтобы "потыкать трехмерку палочкой", когда нет требования эффективности. Примерно так же графику можно выводить средствами SDL или Qt, разве что в последних выводить 3D сложнее.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
а через 10-15 лет можно начинать изучать графические движки
К тому времени уже неизбежно будет написана своя реализация и необходимости в готовых как-то и не будет.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Блог я создал на Киберфоруме, но туда очень мало заходят народу, особенно, мало начинающих
Так не стесняйтесь кидать ссылки!
Я там не был как раз по той причине, что практика 3D сейчас не особо интересует. А C# не интересовал никогда. Вот пообщаться на философские темы - сколько угодно.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Нельзя чтобы все думали, что только ваше мнение правильно, а остальные ничего не понимают, и сильно заблуждаются.
Я никогда этого и не утверждал!
Если бы ТС или Folian высказали конкретную цель: написать игру, я бы сразу отослал к вам, как более сведущему в этом вопросе. Но ситуация-то другая: Folian решил написать чисто софтовый движок в консоли. Все прекрасно понимают, что практическая ценность у такого велосипеда нулевая, но велосипед на то и велосипед чтобы извлекать учебную пользу. Смею надеяться, что в софтовых реализациях у меня опыта побольше, поэтому я указал на типичные проблемы и подходы - [U]для данной задачи/U].
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
03.11.2019, 03:10
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А какая разница, от движущегося или неподвижного? В любом случае OGL этим не занимается, а программист, наверное, умнее автоматики.
Разница очень большая. Если объект неподвижный, то тень можно запечь текстуру, в Blender'е, например. Это здорово может сказаться на производительности. Мне интересно, как вы реализовывали тень в OGL1?

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
... и эти слова очень похожи, причем "затенение" скорее воспринимается как производное от "тень", в отличие от "освещенности", которая явно производная от источника света.
Я буду тогда писать shading.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Сейчас занимаюсь в основном микроконтроллерами и наукой, а не трехмеркой.
Я изучаю линейную алгебру и компьютерной графикой. Если делать 3D модели, то без shading'а никак. А если реализовывать shading в консоле или на GDI, то это намного сложеее и больше, чем на шейдерах.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Я нигде и не говорил, что у подобных развлечений есть практическая польза. Вот учебная - есть, мне этого достаточно.
Разобраться, как на самом низком уровне работает вся эта трехмерка и хватит ли у меня навыков уложиться по скорости и объему.
А вот в изучении шейдеров есть практическая польза, потому что на планшетах и смартфонах есть графическая карта, а там рисовать графику выгоднее по производительности на шейдерах. К тому же на шейдерах вся линейная алгебра в чистом виде, всё можно писать руками.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вы описали почему это возможно, но не почему это нужно. Раз народ это делает, было бы странно спорить что это возможно. Но вот какое у этого назначение кроме игр?
Я пока для планшета не написал ни одной игры. Я в данный момент изучаю, как написать свой игровой движок на Xamarin по туториалу Creating Cross Platform Games with Xamarin. Для меня игры - это пока только полигон для тренировок. Возможно навыки возрастут и я научусь на них зарабатывать, встраивая рекламу в сетевую игру или ещё как-то. Изучение написания игр помогает изучать математику (геометрию, линейную алгебру), платформу Xamarin, язык C#. Если говорить про WebGL, то игры помогаю изучать MySQL, MongoDB, TypeScript и сетевое программирование на socket.io/WebSockets. На шейдерах можно решать очень много задач, даже больше чем я и вы можем себе представить. Например, строить графики функций в 2D и 3D, делать интерактивную графику для инженерных механизмов, делать обучающие программы с интерактивной графикой, демонстрировать явления из физики или математики, из каких-то других наук, обрабатывать изображения, реализуя алгоритмы на шейдерах. Например, задумали что-то строить в деревне, то можно сделать на планшете интерактивную сцену. Магазины выкладывают свои заказы сделать интерактивный товар, чтобы пользователь можно посмотреть товар со всех сторон, отрыть, что-то. Презентация квартир. Планшеты и смарфоны всегда с людьми и они больше всего ими пользуются. Я могу взять планшет, показать свою квартиру ремонтнику, показать, что и где я хочу сделать, чтобы всё было с подписями, с анимациями. Можно сделать человечков со скелетной анимацией, которые показывают, как правильно выполнять упражнения во время тренировки, при этом можно корректировать их поведение, изменяя какие-то параметры.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Не переоценивайте меня Своему подходу я следую только потому что это интересно, но не потому что эффективно. Более того, если кто-то стремится не к процессу, а к результату, я буду агитировать за максимально высокоуровневые библиотеки. Но вот если такой цели нет, можно попробовать разные подходы и смотреть что понравится больше.
Я за то, чтобы показывать владение разными инструментами, потому что разные люди читают форум и у них могут быть разные задачи. Кому-то ваш подход больше понравится, кому-то мой или чей-то другой. При неправильном выборе инструмента процесс может затянуться, что пропадёт всякая мотивация достигнуть результата.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
И тот же OGL1 сгодится чтобы "потыкать трехмерку палочкой", когда нет требования эффективности. Примерно так же графику можно выводить средствами SDL или Qt, разве что в последних выводить 3D сложнее.
Почему я против OGL1 - просто он ничего не даёт. Дело совсем не в эффективности, а скорее в эффективности понимания линейной алгебры на практике, где в шейдерном всё открыто и максимально понятно и логично. Я думаю, что в наших ВУЗ'ах преподаватели сами были запуганы шейдерами, они не смогли перейти на них, а остались на старом OGL. В их время не было книг, где бы нормально и просто объяснялось. Были SuperBible и RedBook на английском, а английский им лень было учить или некогда. Сейчас книг и туториалов полно и на русском, но преподаватели продолжают давать задачи на старом OGL. Подход к изложению стал во многих книгах более грамотный. Если зайти на любой крупный форум OpenGL, что на официальный, что на GameDev.net, то можно увидеть, что в разделе "Beginners" будут почти 100% топиков - это шейдерный OpenGL. Я считаю, что не нужно тратить время на нерекомендованный к использованию OGL1. В основах линейной алгебры и шейдерах нет ничего страшного.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Так не стесняйтесь кидать ссылки!
А я как раз в блоге сохраняю, то что может повторяться и на что проще кинуть ссылку, чем отвечать тоже самое заново. Можно написать универсально и это иногда работает.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
написать игру, я бы сразу отослал к вам, как более сведущему в этом вопросе.
Я только по нескольким элементарным играм типа: змейки, понг и что-то ещё. Я не больше вас написал. Вы змейку такую написали один раз, на гексагонах. Я дальше хочу писать, в 3D, но с целью, чтобы практиковаться и развиваться в линейной алгебре, шейдерах. Простые игры - это весело, это кайф.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
что практическая ценность у такого велосипеда нулевая, но велосипед на то и велосипед чтобы извлекать учебную пользу.
Можно написать велосипед - свою квартиру, по которой можно ходить, открыть холодильник, взять что-то. Без движков, на шейдерах, со скелетной анимацией рук, с реализацией всего на чистой математике, где каждая кость - это матрица. То же никакой практической пользу и такое уже много раз писали. Но обучение и навыки остаются, что можно применить в следующих проектах. Мы не уйдём никогда от написания велосипедов. Много всего нужно писать, снова и снова чтобы обучаться и расти над собой, взбираться на следующую ступеньку, и там опять бегать по спирали, повторяя почти одно и тоже, отрабатывая навыки.
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
03.11.2019, 03:11
Цитата Сообщение от MaksimK1 Посмотреть сообщение
Как понятно из названия хочется с помощью языков этих в ручную написать 3 мерное пространство, думал делать через 3 мерный массив, но подумав получше понял что идея плохая, кто подскажет как с нуля сделать 3 мерное пространство ?
Если на чистом языке без использование визуализации, то куб можно определить с помощью координат. Если нужно передвинуть куб, повернуть или изменить размер, то нужно умножить каждую вершину куба на соответствующую матрицу: переноса, поворота, масштабирования. И так каждый объект. Это будет невидимой 3D пространство, где объекты заданы координатами своих вершин и у каждого объекта есть своё положение пространстве, свой поворот вокруг осей, и свой размер.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,916
03.11.2019, 11:44
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Мне интересно, как вы реализовывали тень в OGL1?
Никак. Если вы зацепились за фразу о простоте расчета, то это из-за путаницы "тень-затенение", речь шла об освещении. Но немного теории по этой теме я читал, так что принципиальных сложностей не вижу (вот технические совершенно точно будут). Можно, как вы и описывали, переместить камеру в источник света и отрендерить в текстуру (OGL1 такое вроде бы позволяет), которую потом пересчитать и натянуть на примитив. Можно спроецировать затеняющий объект на примитив и отрисовать серым полупрозрачным. А иногда можно и плюнуть на "честную" тень и нарисовать что-то похожее на нее, все равно мало кто будет присматриваться.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
А если реализовывать shading в консолеи или на GDI, то это намного сложеее и больше, чем на шейдерах.
Если речь про освещение (без учета посторонних объектов) то ненамного сложнее. Тут я бы сказал важнее что если эти вычисления можно выкинуть на видеокарту, то зачем загружать процессор. Но вот в учебных целях - почему бы и нет.
Ну и, конечно, вызывают сомнения способности консоли эту красоту отобразить. Учитывая разрешение в сотню на сотню точек и два десятка градаций яркости. Хотя разработчикам aalib / caca вроде бы что-то удается.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
На шейдерах можно решать очень много задач, даже больше чем я и вы можем себе представить. Например, строить графики функций в 2D и 3D
Вот как раз для графиков и возможностей OGL1 хватит за глаза, может даже удобнее будет когда машина сама матрицы считает. Неудачный пример.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Например, задумали что-то строить в деревне, то можно сделать на планшете интерактивную сцену.
Распечатка чертежа и нескольких общих видов? Бумажный чертеж все-таки удобнее электронного: не так жалко испортить, больше площадь, легко делать пометки и даже измерения. Как лишняя визуализация, ваш вариант, конечно, имеет право на жизнь - если найдется человек, готовый потратить время на создание 3D-модели. То же с магазинами: проще и полезнее сделать несколько фотографий с разных ракурсов, совсем хорошо - рядом с линейкой. Чем заказывать моделеру перерисовать товар с риском пропустить какую-то деталь. И то же с ремонтом.
То есть все это скорее красивости, чем функционал. Когда они есть это хорошо, но когда нет - не смертельно. И еще раз усомнюсь в источнике моделей - кто их рисовать-то будет и стоит ли оно того?
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Я думаю, что в наших ВУЗ'ах преподаватели сами были запуганы шейдерами, они не смогли перейти на них, а остались на старом OGL.
Думаю, дело просто в меньшем пороге входа. Задача преподавателей ведь не сделать профессионалов, а указать возможные пути. Вот и представьте себе, что перед вами двадцать студентов, которые ни разу не понимают зачем эти страшные матрицы и не менее страшные шейдеры могут пригодиться. Да они-то и один язык программирования толком не знают, а тут лектор начинает вещать, что для рисования треугольника им будет нужно гонять вектора между процессором и видеокартой, потом внутри основной программы написать еще одну, но на другом языке (GLSL / HLSL все же отличаются от Си) и забросить туда.
Вот и используют вместо этого "магию", что-то в роде "а теперь скажем компьютеру нарисовать треугольник - glBegin(GL_TRIANGLES)". "а теперь повернем его на какой-то угол - glRotatef(...)". Если повезет - дойдут до ручного расчета матриц, ведь в OGL1 тоже можно умножить текущую матрицу на явно заданную пользователем.
То есть для отправной точки "трехмерная графика это не так сложно" оно сойдет, а дальше уже можно смело говорить "а теперь забываем OGL1 как устаревший и переходим к шейдерам". И мне кажется, что уже имея общее представление о функционировании трехмерки эту ступеньку будет преодолеть проще.
Но это все в хорошем случае если преподаватель действительно хочет научить, а студенты - научиться именно данному предмету, а бывает это далеко не всегда. И вот в таком случае OGL1 позволит достичь хоть какого-то результата.
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
03.11.2019, 16:19
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Распечатка чертежа и нескольких общих видов? Бумажный чертеж все-таки удобнее электронного: не так жалко испортить, больше площадь, легко делать пометки и даже измерения.
Нет, нет, нет, я совершенно другое имел ввиду. Я имел ввиду 3D, как в игре для простых пользователей, а не для узкого круга специалистов, кто умеет читать инженерные чертежи. Вы открываете 3D квартиру, можете ходить по ней, взаимодействовать с предметами. Покрутить модель квартиры. Приблизить к какому-то объекту. Посмотреть наглядно, как идёт водопровод. На таких примерах интересно учиться. В советское время были журналы Моделист-конструктор. В них предлагалось собрать 3D модель: кораблей, самолётов, бронетехники. Для этого требовались материалы, а OpenGL ES позволяет показать свои работы с планшета.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Учитывая разрешение в сотню на сотню точек и два десятка градаций яркости. Хотя разработчикам aalib / caca вроде бы что-то удается.
Я не знаю, кто это, но они явно гении. Можно и контру страйк по сети сделать на МК при большом желании и запасе времени.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Если речь про освещение (без учета посторонних объектов) то ненамного сложнее. Тут я бы сказал важнее что если эти вычисления можно выкинуть на видеокарту, то зачем загружать процессор. Но вот в учебных целях - почему бы и нет.
Я поэтому и предлагал вам реализовать освещение от точечного источника на простом кубике, который вращается. Я бы не занимался такими извращениями, потому что времени у людей и так мало, а сразу бы начинал с шейдеров, потому что это намного полезнее для изучения матриц и того, как математически устроена освещение.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Как лишняя визуализация, ваш вариант, конечно, имеет право на жизнь - если найдется человек, готовый потратить время на создание 3D-модели.
Тут два варианта. Если говорить про заказы на зарубежных биржах фриланса или про удалённую работу, то заказчик сам позаботится о поиске профессиональных моделлеров. А если мы говорим про изучение комьютерной 3D графики, то зависит от того, нравится ли человеку заниматься конструированием и 3D моделированием. Мне очень нравится. Я далеко не профессионал в моделировании, но как любитель я развиваюсь. Это не трата времени. Это развитие в той области, которую я выбрал, то есть создание интерактивных 3D приложений и игр. А какое применение этому зависит от моих желаний (если для себя, для развития), и от заказов на Upwork, Freelancer.com и т.д. Если человек считает, что теряет время на изучении 3D графики, значит ему нужно заниматься чем-то другим. Я конструирую и моделирую что-то и знаю, что мне это интересно. Так и происходит выбор твоей области, где ты стремишься развиваться с большим энтузиазмом.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
То же с магазинами: проще и полезнее сделать несколько фотографий с разных ракурсов, совсем хорошо - рядом с линейкой. Чем заказывать моделеру перерисовать товар с риском пропустить какую-то деталь. И то же с ремонтом.
Вы хорошенько поищите сайты с конструкторами, а так же, где машины продают, где можно посидеть, системы, которые можно виртуально собрать/разобрать.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ну и, конечно, вызывают сомнения способности консоли эту красоту отобразить.
У меня сомнения в целесообразности попыток отобразить в консоле хоть какую-то 3D графику. Время и так очень быстро бежит и куча есть других дел, которые могут отвлекать. Если удивить хочется кого-то, то намного лучше делать на OpenGL ES для планшета или сматфона, потому что планшет можно свою работу можно показать где-угодно, есть куча туториалов, книг, для обучение - OpenGL ES - это самое то. Я своё мнение не поменяю.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
И еще раз усомнюсь в источнике моделей - кто их рисовать-то будет и стоит ли оно того?
Либо заказчик найдёт кого-то, либо работодатель, либо программист закажет, либо программист сам увлекается конструированием и 3D-моделированием. Я не говорю, что это когда-то будет или это мои догадки. Всё это уже давно есть.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Думаю, дело просто в меньшем пороге входа.
Основная цель - это изучение линейной алгебры, то есть матриц, векторов и т.д. Я в универе изучал линейную алгебру и тут я захотел вспомнить, что такое матрицы. Я начал изучать OGL1 и не понимал, как что работает, всё был сделано за меня и не мог по нему изучать матрицы. Я тоже очень сильно был запуган словом "шейдеры" - очень устрашающе звучит. Но когда я начал изучать шейдеры, я увидел, как легко сочетаются матрицы с шейдерами, как всё просто и логично. Для меня OGL1 оказался не просто очень высоким порогом, а непреодолимым порогом. Поэтому я и агитирую забыть OGL1 (удалённый из многих платформ и из из OGL3.2 Core), даже не касаться его вообще.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Да они-то и один язык программирования толком не знают, а тут лектор начинает вещать, что для рисования треугольника им будет нужно гонять вектора между процессором и видеокартой, потом внутри основной программы написать еще одну, но на другом языке (GLSL / HLSL все же отличаются от Си) и забросить туда.
Лекторы сами знают только OGL1 и они не поняли и нет времени разобраться с основами шейдеров. Их можно понять. Их загрузили сильно бюрократией. Может они думаю, что когда-то когда они постигнут линейную алгебру, они смогут перейти на новый уровень. А студенты думают, что матрица - это фильм такой. Самый лучший и самый простой вариант - это начинать изучать этой книги, и ни с какой другой: WebGL. Программирование трехмерной графики (Авторы: Коичи Мацуда, Роджер Ли) Этой книге нужно поставить памятник. Это не книга, а огромное сокровище. Так как там объяснена работа вертексного и фрагментного шейдера, а так же вывод матриц, основы работы с видео картой и многое другое - так не объяснено ни в одной книге.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
а теперь забываем OGL1 как устаревший и переходим к шейдерам"
Я знал даже с виду смышлёных людей, которые так и не перешли на шейдеры, потому что считали, что это очень сложно для них и сменили направление.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Но это все в хорошем случае если преподаватель действительно хочет научить, а студенты - научиться именно данному предмету, а бывает это далеко не всегда. И вот в таком случае OGL1 позволит достичь хоть какого-то результата.
В западных университетах давно выкинули OGL1. У меня куча книг на английском по основам компьютерной графики и линейной алгебре, где везде используется GLSL или HLSL. Поэтому у них студенты сразу начинают изучать матрицы. Пусть даже они используют вначале библиотеки для работы с матрицами. Моё личное мнение, как я писал выше, что нужно начинать с той книги на WebGL, хостить свои примеры онлайн и иметь возможность демонстрировать свои примеры на планшетах, сматфонах, разных ПК - эта возможно здорово мотивирует. Как развитие - это написание сетевых игр с хостингом на Heroku и с использованием MySQL и MongoDB. Получаем очень мотивированных учеников, потому что даже простая игра, как крестики-нолики, которая реально работает по сети, и имеет базу данных - это комплексное развитие. Вы меня никогда не переубедите, я буду агитировать за начало изучения с WebGL, OGLES2 и переходом на OGL3.0+

Добавлено через 1 час 47 минут
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вот как раз для графиков и возможностей OGL1 хватит за глаза
Для планшетов не то что не хватит, а его там нет. В 2008 GL1 был объявлен deprecated (с выходом OGL3.0), то есть его настоятельно не рекомендовали использовать уже почти 12 лет назад, а в 2009 OGL1 был полностью удалён из OGL3.2 Core. Если оставили для совместимости. Не надо бояться начинать шейдерный. Он только называется так страшно. Сначала можно использовать библиотеку для работы с матрицами. Будет сразу понятно, что происходят аффинные преобразования и что если умножить матрицу переноса на каждую вершину треугольника, то он переместится. Это нужно сразу расписывать. Матрица - это всего лишь компактная запись аффинных преобразований. Умножаем матрицу на каждую вершину и эти вершины оказываются на новой позиции. Надо расписать как получается матрица поворота и станет кристально понятно, а не какой-то там glRotate, который магически что-то делает, тогда уж лучше взять Unity, который используется во многих ВУЗ'ах, как на западе, так и в РФ. В нём можно и примитивы рисовать и матрицы создавать, даже вершинные и фрагментные шейдеры писать на HLSL - какой уровень абстрации кому надо там можно найти. Хотя бы время будет не зря потрачено и человек может зарабатывать, вакансии искать, не будет в одиночестве, что больше никто не использует его технологию вместе с ним. Хотите я вам покажу, как график на WebGL нарисовать? На Web есть преимущество, что можно использовать вторую <canvas> с прозрачностью и вывести числа и тест для подписи осей, а что очень важно, будет работать на планшетах и смартфонах и на всех OS. А не так что собрал для свое OS и не можешь показать другу у которого macOS.

Добавлено через 14 минут
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вот как раз для графиков и возможностей OGL1 хватит за глаза
Раз бы решили потренировать наши навыки на рисовании графиков, то у меня вопрос. Когда вы рисовали графики на OGL1, как вы выводили текст? Правда, же интересный навык рисования графиков? Для математиков-программистов - это одна из интересных областей, где можно и в 3D и динамически выводить, а OGL - это же кроссплатформа, поэтому можно легко и быстро делать графики делать графики на WebGL для платшетов, смартфонов. У меня есть идеи, как можно сделать рисование графиков функционально и удобно в 3D на WebGL. Я распишу позже и мы посмотрим удобно это в плане программирования или нет. Удобно, то что свой код можно опубликовать онлайн и каждый может поиграться с ним, что-то поменять, добавить развить, а потом опубликовать в песочнице, там же позапускать, поделиться ссылкой. Такая работа с графикой очень удобная и мотивирует к развитию. Студенты могут править код, делиться им, запускать на планшетах, публиковать ссылки в VK, откуда их друзья могут в один клик запустить, увидеть код, поменять, сохранить, поделиться своей ссылку. Графика онлайн на WebGL - это очень круто для изучения матриц, векторов, и всей математики на шейдерах. Кстати, много есть сайтов, где изучающие компьютерную графику на WebGL могут делиться своими исходными кодами и запускать свои работы. Например, https://www.shadertoy.com/ где можно разбираться в математике реализованной в фрагментных шейдерах.

Добавлено через 26 минут
Я вспомнил, что трёхмерная графика используется:
  • В медицине в серьезном оборудовании для операций, а так же в демонстрационных роликах, для наглядной демонстрации пациентам процессов в организме.
  • Используется для обучение какого-либо персонала чему-либо, например, вождение, изучение дорожных ситуаций.
  • Для демонстраций катастроф, ДТП с участием машин и людей на скелетной анимации.
  • Виртуальные роботы, демонстрация их работы и виртуальный разбор и принцип работы механизмов.
  • Человекообразные виртуальные роботы для демонстрации процессов: упражнения, поведения, элементы танцев
  • На промышленных предприятиях используются, но не та графика, что на CAD, а демонстрационная графика, для наглядной демонстрации чего-либо
  • В конструкторских бюро для сознания макетов с интерактивной графикой
  • Обучение детей в игровой форме

Я считаю, что 3D графика не разрывна с большим желание и стремлением изобразить что-то в 3D, а значит, что неразрывно связано с 3D редакторами, например, Blender, который бесплатный и легковесный. Должно быть внутренняя сильная потребность развиваться в 3D конструировании, и потребность в изучении математики, которая стоит за всеми состояниями и процессами.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,916
03.11.2019, 18:06
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Вы открываете 3D квартиру, можете ходить по ней, взаимодействовать с предметами.
Читал я, что какая-то компания (там даже не уточнялось какая) делала подобное на движке HalfLife. В любом случае подобные вещи удобнее делать на нормальном компьютере с нормальным экраном и средствами ввода.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
{разработчики aalib / caca} Я не знаю, кто это, но они явно гении.
Согласен. В общих чертах я, конечно, понимаю, как они могли подобное реализовать, но чтобы довести до конца - бр-р-р. почти хочется попробовать!
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Я поэтому и предлагал вам реализовать освещение от точечного источника на простом кубике, который вращается.
https://www.youtube.com/watch?v=D9KuP8Q5qTM
Вот такое сойдет в качестве освещения от направленного источника? С текстурами и даже моделями закрашивания не заморачивался - цвет грани рассчитывается по одной вершине.
Теоретически, цвет возможно интерполировать между вершинами, но мне было лень, да и памяти в контроллере всего 20 кБ, ее и на видеобуфер-то не хватает (320х240 точек, по 16 бит на цвет, плюс задний буфер плюс 16 бит буфер глубины получается 450 кБ), а ведь еще сами вершины хранить надо и полурассчитанные данные. Если добавить еще текстуры и интерполяцию цветов контроллер совсем загнется.
А для компьютера я ведь уже давал название книжки, где авторы делают ровно то же самое, но под DOS. Вместе с текстурами, освещением и всем остальным.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Я бы не занимался такими извращениями, потому что времени у людей и так мало
Еще раз: все зависит от задачи: в моих планах нет углубления в трехмерку. Для практических задач вроде вывода графиков и т.п. хватит и OGL1.
Есть ведь и другие, не менее интересные занятия: те же контроллеры (сейчас пилю полу-медицинский прибор определения пульса, он даже что-то определяет несмотря на мои усилия), механика, интерпретатор Lua, еще Qt или gtk палочкой потыкать надо (не на winapi же гуй делать, правда!). Не говоря об основной работе.
А вот это баловство с ручной растеризацией это именно баловство.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Я начал изучать OGL1 и не понимал, как что работает, всё был сделано за меня и не мог по нему изучать матрицы.
А мне наоборот, трехмерная графика, в том числе OGL1 и та самая ручная растеризация, помогли понять что же такое матрицы и для чего нужна линейная алгебра. Вам, наверное, никто в свое время не подсказал о glMultMatrix, куда можно подсовывать свои матрицы и обойтись без всяких glRotate.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
даже простая игра, как крестики-нолики, которая реально работает по сети, и имеет базу данных - это комплексное развитие. Вы меня никогда не переубедите, я буду агитировать за начало изучения с WebGL, OGLES2 и переходом на OGL3.0+
В таком случае предлагаю не спорить попусту. Я все еще считаю, что при грамотном подходе OGL1 может снизить порог входа, конечно ценой увеличения времени обучения.
Ну и учтите, что для матричного OGL2 все-таки нужны знания о матрицах, векторах и аффинных преобразованиях. А процедурным OGL1 может пользоваться школьник класса восьмого. И это тоже существенный плюс, так как понятия матриц и векторов там таки даются, хотя и как опциональные, но это повысит его заинтересованность в линейной алгебре.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Для планшетов не то что не хватит, а его там нет.
Про вывод графиков на планшете я уже писал - "а зачем?!".
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Не надо бояться начинать шейдерный. Он только называется так страшно
Сейчас бы пугать человека, считавшего матрицы на процессоре расчетом тех же матриц на видеокарте... Я не лезу в OGL2 не потому что страшно, а потому что не нужно. Ну вот нет у меня задач, где это было бы необходимо. Прибавьте все же более простую реализацию простых задач: чтобы нарисовать линию, я говорю "нарисовать линию", а не "выделить буфер, написать пару шейдеров, посчитать матрицы, загрузить шейдеры в видеокарту...". Это не сложно и не страшно, но занимает больше места при том же результате. А задач, где бы действительно пригодились шейдеры, у меня сейчас нет, даже "велосипедных".
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Когда вы рисовали графики на OGL1, как вы выводили текст?
Именно на графиках - никак. Но вообще текст можно выводить, скажем загрузкой шрифта через SDL_ttf или glut, отрисовкай в текстуру и натягиванием ее на прямоугольник.
Где-то у меня валяется попытка реализации игрового GUI на SDL2 + OpenGL1. Как и положено первому велосипеду - скрипит и падает, куда ж без этого. Но формочки, кнопочки, поля ввода, ползунок прокрутки и тому подобную мелочь показывает. Правда делал уже довольно давно, сейчас, конечно, делал бы по-другому, причем начал бы с прикручивания туда Lua для обработки событий.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Удобно, то что свой код можно опубликовать онлайн и каждый может поиграться с ним, что-то поменять, добавить развить, а потом опубликовать в песочнице, там же позапускать, поделиться ссылкой.
А мне наоборот не нравится современная тенденция вываливать все в сеть. Примеры своего кода я могу посмотреть вне зависимости от желания хостинга или провайдера.
Не поймите неправильно: личное мнение это личное мнение, я стараюсь его никому не навязывать.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Я вспомнил, что трёхмерная графика используется:
Для решения подавляющего большинства описанных вами задач нормальный компьютер подойдет гораздо лучше планшета. А нативные приложения будут как минимум не хуже веб.
Вы же не будете составлять чертежи на телефоне, правда? Или ту же скелетную анимацию. Телефон хорошо годится для демонстрации контента "на выезде", но не тогда, когда рядом есть компьютер. И при производстве контента телефон также проигрывает.
0
2 / 1 / 1
Регистрация: 05.04.2019
Сообщений: 14
03.11.2019, 18:41
Дайте гайд, куда копипастить код чтоб у себя проверить, и выше ncur_doom.rar закидывать
VS 2017
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
03.11.2019, 19:38
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Читал я, что какая-то компания (там даже не уточнялось какая) делала подобное на движке HalfLife. В любом случае подобные вещи удобнее делать на нормальном компьютере с нормальным экраном и средствами ввода.
Огромное количество заказов и вакансий по этому поводу. Зависит от требований заказчика на чём делать. Да, может да кросспалтформенном движка, например, на Unity для всех платформ. Конечно, же самой удобной платформой для пользователя является планшет, поэтому в основном требования на VR/AR. Планшет удобно с собой тоскать.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Согласен. В общих чертах я, конечно, понимаю, как они могли подобное реализовать, но чтобы довести до конца - бр-р-р. почти хочется попробовать!
У вас, наверное, очень много свободного времени. А может 3D в консоле это очень перспективно и много вакансий и заказов по ним. Я не обращал внимания. Встречал несколько поделок с ASCII графикой. Может даже какие-то фирмы занимаются разработкой 3D игр в консоле и какие-то профессиональных инструментов. Тех кто будет этим заниматься посмотреть вакансии в вашем городе, посмотреть удалённые вакансии. Может так оказаться, что если кому-то, кто читает нравится 3D графика, то можно найти вакансии по OpenGL ES. Но если изучать, тоо WebGL хватит с головой, а потом можно переходить на OpenGL ES 2/3. Легко можно сделать переход, потому что WebGL 1.0 базируется на OpenGL ES 2. Я только этот способ рекомендую.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
https://www.youtube.com/watch?v=D9KuP8Q5qTM
Вот такое сойдет в качестве освещения от направленного источника? С текстурами и даже моделями закрашивания не заморачивался - цвет грани рассчитывается по одной вершине.
Точеное освещение на этом мониторе. можно реализовать? Я когда-то увлекался. Прошивал по LPT МК 8052. Подлючал LCD, цифры и слова выводил

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А для компьютера я ведь уже давал название книжки, где авторы делают ровно то же самое, но под DOS. Вместе с текстурами, освещением и всем остальным.
Я бы 100% не стал бы замарачиваться и терять время на это.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ну и учтите, что для матричного OGL2 все-таки нужны знания о матрицах, векторах и аффинных преобразованиях. А процедурным OGL1 может пользоваться школьник класса восьмого. И это тоже существенный плюс, так как понятия матриц и векторов там таки даются, хотя и как опциональные, но это повысит его заинтересованность в линейной алгебре.
Я не помню проходили ли мы вектора в школе, но матрицы - не проходили. Но и тут можно обойти. Можно сначала воспользоваться библиотекой, которая сама всё делает. Например, GLM. Она имеет методы: scale, rotate, translate, perspective, lookAt. Но я бы не стал школьника знакомить с C++. Пусть сначала поизучает TypeScript и WebGL, где тоже есть аналог GLM называется glMatrix. Может я просто такой глупый, что не смог пользоваться OGL1 и страшно не люблю эту версию. Я не смог в ней разобраться, поэтому для меня самый простой пусть WebGL/TS -> OpenGL ES 2/C# -> OpenGL 3.0/C#

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Про вывод графиков на планшете я уже писал - "а зачем?!".
Потому что планшеты и смартфоны есть у многих. Если вы как программист не занимаетесь построением графиков, то вопрос: "а зачем вам вообще рисовать какие-то графики?". Если вам не нравится не рисуйте. На WebGL удобно - один раз создал график и он запускается на всех платформах. Можно на планшете, можно на Mac Book и т.д. Нужно вам это или нет это зависит в какой области вы работаете.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Я не лезу в OGL2 не потому что страшно, а потому что не нужно. Ну вот нет у меня задач, где это было бы необходимо. Прибавьте все же более простую реализацию простых задач: чтобы нарисовать линию, я говорю "нарисовать линию", а не "выделить буфер, написать пару шейдеров, посчитать матрицы, загрузить шейдеры в видеокарту...". Это не сложно и не страшно, но занимает больше места при том же результате. А задач, где бы действительно пригодились шейдеры, у меня сейчас нет, даже "велосипедных".
Я понял, вы, наверное, собрали свой компьютер, поставили на него Linux, поэтому вы так переживаете, что лишний килобайт потратите зря. А я не хочу лезть в OGL1. На зарубежных форумах никто со старым OGL1 не поможет. Все скажут, что никто ничего не помнит по старому и переходи на новый. Тот код которого больше одно однотипный из проекта в проект. По нему куча туториалов и книг, а старый нужно выбросить и забыть и никому его никогда не советовать. Меня бесполезно переубеждать, что нужно ничинать с OGL1. Я считаю, что с WebGL.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Как и положено первому велосипеду - скрипит и падает, куда ж без этого. Но формочки, кнопочки, поля ввода, ползунок прокрутки и тому подобную мелочь показывает.
Почти все игры на своих движках используют самописное GUI.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А мне наоборот не нравится современная тенденция вываливать все в сеть.
Для совместных учебных примеров - это очень хорошая вещь, потому что дело быстрее двигается, когда ты работаешь на примером не один. Происходит взаимная мотивация. Программисты на JS и TS выкладывают свои примеры в песочницах, где можно и запустить и посмотреть пример в видео кода на WebGL с графикой.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Для решения подавляющего большинства описанных вами задач нормальный компьютер подойдет гораздо лучше планшета. А нативные приложения будут как минимум не хуже веб.
Планшет удобнее с собою тоскать, чем ноутбук. В маршрутках люди чаще играют на планшетах и сматрфонах, чем на ноутбуках. Да, в некоторых случаях нативное приложение для смартфона или планшета быстрее работает, чем из браузера, поэтому в случае C# нужно изучать OpenGL ES, а в случае C++ - Qt OpenGL ES. Мне интереснее всего делать для планшета, потому что его удобно тоскать, а ещё на него очень много заказов и их всё больше и больше. Игру на своём движке приятнее писать и приятно, когда свои работы удобно показать или на веб в один клик или на планшете. Я считаю, что игры очень полезно писать и приятно писать сразу для всех платформ на WebGL с сетью и базой данных - это намного проще и быстрее для начинающих, чем на чём-то другом. Сейчас Heroku (и пара других хостингов) - это самое то для начинающих и не только начинающих. Для практикующих, я бы сказал.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Вы же не будете составлять чертежи на телефоне, правда?
Я специально выше написал, что речь идёт не о CAD системах, которые используются на производстве. Я не собираюсь писать AutoCAD для, вы меня неправильно поняли. Если вы думаете, что скелетная анимация примеряется только в играх, а в 3D кроме игр и CAD ничего нельзя сделать, то это не так. Не-игровому 3D можно найти огромное количество применений. А главное, что это очень интересно для тех кто увлекается математикой. Графики на планшете в 3D и 2D могут быть много где применены. Можно запросы делать к каким-то API с данными, чтобы отображать их на графиках. Можно делать 3D сайты. Игры в конце концов и VR/AR (правда, я ещё с дополненной реальность не работал, даже в Unity). Есть WebVR, который я пока не пробовал. Вы просто поищите заказы на Upwork и Freelance.com. Поищите удалённые вакансии и посмотрите, как это популярно и как это набирает популярность.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,916
03.11.2019, 20:40
Цитата Сообщение от Kola34 Посмотреть сообщение
Дайте гайд, куда копипастить код чтоб у себя проверить, и выше ncur_doom.rar закидывать
чтоб у себя проверить, там собранные бинарники есть. А чтобы пересобрать у себя, создаете проект, подключаете туда исходники и заголовочники, ищете библиотеки (в архиве для mingw, к msvs-у вроде бы не подходит).
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Точеное освещение на этом мониторе. можно реализовать?
что такое "точечное освещение"? Дисплей обычный графический, без знакогенератора. Что запишешь в память, то и нарисует
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Я не помню проходили ли мы вектора в школе, но матрицы - не проходили.
Вектора точно проходят на геометрии. Матрицы наверное могут проходить в некоторых физмат классах, но вряд ли.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Но я бы не стал школьника знакомить с C++
OpenGL штука процедурная, ее можно и на Си писать, и на Паскале.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Потому что планшеты и смартфоны есть у многих.
Можно != нужно.
Хватит уже рекламы webGL.
Ну позволяет оно выводить трехмерку на телефоне, ну и что. Вы вцепились в какую-то микроскопичесую фичу и преподносите ее как будто ключевую.
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
03.11.2019, 21:13
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
что такое "точечное освещение"? Дисплей обычный графический, без знакогенератора. Что запишешь в память, то и нарисует
Точечным освещением называют освещение, например, от лампочки.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Можно != нужно.
Мне это непросто нужно, а крайне необходимо. Только поэтому я начал изучать Xamarin, который собирает для Android и iOS и который имеет библиотеку OpenTK для связи C# и OpenGL ES. Для графических приложений и игр - это 100% крайне необходимо уметь реализовывать линейную алгебру на шейдерах. На этих устройствах есть графический процессор, он и создан для того, чтобы выводить графику. А графика на WebGL внутри сайтов уже получила большую популярность. Поищите сколько заказов и вакансий по WebGL (и движкам написанных на WebGL)

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Хватит уже рекламы webGL.
Это самый лучший, простой и доступный способ начать изучать 3D графику и шейдеры с помощью этой книги. Это не реклама, потому что мне за это не платят. Я буду предлагать WebGL, потому что это самый лёгкий путь. Правда, с одной стороны я способствую увеличению конкурентов, то с другой, я просто практикуюсь

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
OpenGL штука процедурная, ее можно и на Си писать, и на Паскале.
Проще всего на WebGL, можно добавить GUI на HTML/CSS. Можно на C#, где есть GUI, с которым проще изучать. На WebGL легко запускать на всех платформах, писать учебные игрушки с мультиплеером на Heroku и базой данных на MySQL и MongoDB. Я только за этот вариант и бесполезно меня переубеждать.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Ну позволяет оно выводить трехмерку на телефоне, ну и что. Вы вцепились в какую-то микроскопичесую фичу и преподносите ее как будто ключевую.
На сегодня WebGL и та книга - это ключ к вхождению в 2D и 3D графику. А JavaScript нужно сразу заменять на TypeScript. Есть много графических и игровых фреймворков, которые построены на WebGL. Есть специально разработанный и очень популярный игровой WebGL фреймворк для 2D игр Phaser. Мобильные платформы являются его целевыми платформами. Очень много заказов по нему, вакансий. А есть неигровая высокопроизводительная библиотека для 2D графики на мобильных платформах: Pixi.js. Её используют популярные графические 3D библиотеки, которые работают на мобильных платформах: Three.js и Babylon.js. Можно писать свои шейдеры на GLSL. Полная свобода в обработке графики. Изучать WebGL просто и перспективно. Это мотивирует - написание сетевой игрушки на чистом WebGL (или на фреймворке). Ни на чём так просто нельзя делать кроссплатформенные приложения с бесплатным хостингом, который так просто разворачивается при соединении проекта на GitHub с Heroku. Делаешь push и сервер автоматически разворачивается. Это идеальный набор инструментов для начала программирования с использованием графики.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,916
03.11.2019, 23:45
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Точечным освещением называют освещение, например, от лампочки.
А, точечный источник света.
Именно в той прошивке не делал, но не вижу принципиальной проблемы: вместо константного вектора берем вектор от вершины к источнику. Это делается в gl.c: в функции glDrawTriangleV вместо вектора light считаем тот, который нужен. Правда, конечно, добавится тяжелая функция взятия обратного корня, но ведь и ее можно оптимизировать одним хитрым хаком.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Это самый лучший, простой и доступный способ начать изучать 3D графику
Ну и много в этой книге написано про другие подходы к рисованию 3D графики? Много ли там внимания уделяется различным способам удаления невидимых граней? Сортировка по глубине, разбиение по плоскостям, метод порталов, трассировка лучей.
Много ли внимания уделяется растеризации примитивов, конкретной реализации буфера глубины и его разрядности?
Между прочим, даже в этой теме Folian применил совсем другой подход, не завязанный на матрицы - и в конкретном применении он эффективнее.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
На сегодня WebGL и та книга - это ключ к вхождению в 2D и 3D графику.
Для вас - возможно, но не отказывайте другим пользоваться другими путями. Как минимум можно идти "снизу", с ручной растеризации, можно "сверху", с готовых игровых движков, можно "из прошлого", того же OGL1. И я вот не возьмусь назвать один единственно верный способ. Это как-то отдавало бы фанатизмом.
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
06.11.2019, 13:21
Цитата Сообщение от MaksimK1 Посмотреть сообщение
Как понятно из названия хочется с помощью языков этих в ручную написать 3 мерное пространство, думал делать через 3 мерный массив, но подумав получше понял что идея плохая, кто подскажет как с нуля сделать 3 мерное пространство ?
Я попробую описать как с помощью математики, задать трёхмерные объекты в программе. Как в геометрии описать трёхмерное пространство на примере куба? Очень просто. Нужно задать вершины куба. Вершин у куба восемь штук. Для каждой вершины нужно задать три вещественных числа: (x, y, z) с помощью которых задаётся одна координата вершины. Получается 8 вершин по 3 числа на 1 координату: 8 * 3 = 24 числа. Чтобы перенести эти числа в программу удобно создать массив. Либо можно создать класс/структуру Point для хранения координаты вершины (x, y, z) и создать массив экземпляров Point, либо хранить числа в одном одномерном массиве. Давайте будет хранить координаты куба в одномерном массиве.

Геометрия куба:

Code
1
2
3
4
5
6
7
    //    v6----- v5
    //   /|      /|
    //  v1------v0|
    //  | |     | |
    //  | |v7---|-|v4
    //  |/      |/
    //  v2------v3
Ось X направлена вправо.
Ось Y направлена вверх.
Ось Z направлена на нас.

Пусть центр куба находится в центре координат, а сторона куба равна 1 метру.

Координаты вершин:
v0: (0.5, 0.5, 0.5)
v1: (-0.5, 0.5, 0.5)
v2: (-0.5, -0.5, 0.5)
и т.д.

Переносим куб в программу, создав одномерный массив:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
            //    v6----- v5
            //   /|      /|
            //  v1------v0|
            //  | |     | |
            //  | |v7---|-|v4
            //  |/      |/
            //  v2------v3
 
            float[] positions = new float[]
            {
                0.5f, 0.5f, 0.5f,       // v0: x, y, z
                -0.5f, 0.5f, 0.5f,      // v1
                -0.5f, -0.5f, 0.5f,     // v2
                0.5f, -0.5f, 0.5f,      // v3
                0.5f, -0.5f, -0.5f,     // v4
                0.5f, 0.5f, -0.5f,      // v5
                -0.5f, 0.5f, -0.5f,     // v6
                -0.5f, -0.5f, -0.5f     // v7
            };
Таким способом можно задавать трёхмерные объекты в трёхмерном пространстве в программе. Математика позволяет перенести объект из центра координат в любое место пространства с помощью параллельного переноса (Википедия. Параллельный перенос). Объект перемещается на вектор. Если вы учитесь в школе и ещё не проходили векторы (или в школе может в школах сейчас не проходят векторы), то можете себе представить, что по каждой оси определяют смещение. Допустим, можно сместить объект по оси X на 3, по Y на 2, а по Z на 1. Тогда нужно пробежаться по массиву в цикле и прибавить соответствующее смещение к каждой вершине куба: (x + 3, y + 2, z + 1). Попробуйте в качестве упражнения написать алгоритм параллельного переноса, который преобразует массив координат, либо создаёт новый массив с новыми координатами, где было применено перемещение объекта.
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,916
06.11.2019, 14:20
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Давайте будет хранить координаты куба в одномерном массиве.
В чем преимущество перед структурой / классом? Так-то объект "точка" или "вектор" все же нагляднее.
А если хотите потом вывести как общий одномерный массив в OGL или еще куда, так явное приведение типов никто не отменял. Более того, если мне не изменяет память, в соответствующих функциях задается расстояние между элементами, и туда удобно подставить sizeof(Point). А потом спокойно добавлять в тот же вектор нормали, текстурные координаты и прочее. В случае же одномерного массива, все смещения придется считать вручную, да еще и не в одном месте.
0
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,965
Записей в блоге: 232
06.11.2019, 15:10
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
В чем преимущество перед структурой / классом? Так-то объект "точка" или "вектор" все же нагляднее.
Надо показать, как сделать параллельный перенос используя простейший одномерный массив. Может быть одни ещё структуры и классы не проходили. Нужно нужно будет объяснять, что это такое. Слово "вектор" ему тоже может быть незнакомо. Вы сами писали, что человек может не иметь представления, что обозначают слова "вектор", "матрица". Я не знаю на каком уровне сейчас образование. Может студенты не имеют представления о том, что "матрица" это просто таблица из чисел, а они думают, что у этого слово только одно значение - фильм.

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А если хотите потом вывести как общий одномерный массив в OGL или еще куда, так явное приведение типов никто не отменял.
Я хочу показать, как сделать параллельный перенос без каких либо сторонних библиотек, используя только математику и язык программирования. Если я правильно понял, человек спросил, как работать с 3D объектами без применения библиотек, а только используя математику и язык программирования.

Цитата Сообщение от 8Observer8 Посмотреть сообщение
Таким способом можно задавать трёхмерные объекты в трёхмерном пространстве в программе. Математика позволяет перенести объект из центра координат в любое место пространства с помощью параллельного переноса (Википедия. Параллельный перенос). Объект перемещается на вектор. Если вы учитесь в школе и ещё не проходили векторы (или в школе может в школах сейчас не проходят векторы), то можете себе представить, что по каждой оси определяют смещение. Допустим, можно сместить объект по оси X на 3, по Y на 2, а по Z на 1. Тогда нужно пробежаться по массиву в цикле и прибавить соответствующее смещение к каждой вершине куба: (x + 3, y + 2, z + 1). Попробуйте в качестве упражнения написать алгоритм параллельного переноса, который преобразует массив координат, либо создаёт новый массив с новыми координатами, где было применено перемещение объекта.
Я реализовал параллельный перенос для координат, которые хранятся в одномерном массиве. Метод Translate принимает массив координат куба, а так же принимает значения смещения по каждой оси: tx, ty, tz. Имя "tx" это сокращение от translation, то есть трансляция по X. Трансляция и перенос - это синонимы. Метод Translate принимает массив координат и значения смещения по трём осям, а возвращает новый массив, где к каждой координате вершины куба были применены преобразования параллельного переноса.

MaksimK1, вам задание. Перевести описанную мною идею на Си, C++ или на тот язык, который вам нравится.


Я сделал пример на C#. Может быть вам он поможет сейчас или в будущем:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
using System.Windows.Forms;
 
namespace _3DSpace
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            //    v6----- v5
            //   /|      /|
            //  v1------v0|
            //  | |     | |
            //  | |v7---|-|v4
            //  |/      |/
            //  v2------v3
 
            float[] positions = new float[]
            {
                0.5f, 0.5f, 0.5f,       // v0: x, y, z
                -0.5f, 0.5f, 0.5f,      // v1
                -0.5f, -0.5f, 0.5f,     // v2
                0.5f, -0.5f, 0.5f,      // v3
                0.5f, -0.5f, -0.5f,     // v4
                0.5f, 0.5f, -0.5f,      // v5
                -0.5f, 0.5f, -0.5f,     // v6
                -0.5f, -0.5f, -0.5f     // v7
            };
 
            float[] newPositions = Translate(positions, 3, 1, 5);
        }
 
        private float[] Translate(float[] positions, float tx, float ty, float tz)
        {
            float[] newPositions = new float[positions.Length];
 
            for (int i = 0; i < newPositions.Length; i += 3)
            {
                newPositions[i] = positions[i] + tx;         // x
                newPositions[i + 1] = positions[i + 1] + ty; // y
                newPositions[i + 2] = positions[i + 2] + tz; // z
            }
 
            return newPositions;
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.11.2019, 15:10
Помогаю со студенческими работами здесь

Трёхмерная графика
построить изображение какого-либо геометрического тела как с помошью стандартных функцию glut, так и с помощью glBegin()/glEnd().Помогите...

Трехмерная графика
1. Ввести вектор V с произвольно заданными координатами 2. Выполнить преобразования поворота, сдвига и масштабирования на произвольно...

Трехмерная графика
Можете мне посоветовать какой нибудь материал на эту тему с примерами желательно

трёхмерная графика
Подскажите плиз, как мне вывести на экран трёхмерный график? Можно ли это мделать в TChart? Эсли нельзя , то где можно? Дайте какой-нибудь...

Трехмерная графика surf из двухмерной матрицы
Имеется двухмерная матрица 200 строк 16 столбцов zr1=zeros(200,16); Матрица zr1 - это данные работы программы моделирования 16...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru