|
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
|
|
Отрисовка 3Д фигур19.04.2017, 15:32. Показов 4122. Ответов 13
Метки нет (Все метки)
Добрый день!
Есть сложность в программирование 3Д фигуры(куб). Подскажите порядок преобразований для отрисовки фигуры. В данный момент использую такой: 1. Рисую куб в 2Д в мировых координатах(ресую один квадрат, затем другой и соединяю их вершины) 2. С помощью матрицы преобразований перевожу координаты вершин куба в видовые координаты 3. С помощью матрицы(ортографической) преобразований перевожу координаты вершин куба(они уже видовые) в координаты проекции 4. Преобразовую в декартовы координаты Вопрос не связан с OpenGL или конкретным языком, подумал тут есть люди разбирающиеся в координатной геометрии.
0
|
|
| 19.04.2017, 15:32 | |
|
Ответы с готовыми решениями:
13
Отрисовка фигур разных размеров Отрисовка фигур Отрисовка фигур |
|
Модератор
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
|
|
| 19.04.2017, 15:43 | |
|
egor2116, обычно так:
-есть вектор в однородных координатах (координаты вершины) -есть матрица в однородных координатах задающая преобразование полученная перемножением в требуемой очередности нужных матриц поворота, переноса, отражения, масштабирования и проецирования -умножая их получаем преобразованный вектор который переводится в растр по заданным правилам обычно путем приведения двух из четырех координат вектора к координатам окна на экране
1
|
|
|
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
|
|
| 19.04.2017, 15:48 [ТС] | |
|
О, первый вопрос, почему матрицы 4х разрядные, у нас же координаты вершин фигуры 3х(x,y,z), зачем нужна четвертая координата, она нигде в расчетах не участвует ?
0
|
|
|
Модератор
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
|
|
| 19.04.2017, 15:57 | |
|
egor2116, человек взывающий к людям разбирающимся в координатной геометрии должен знать зачем нужна четвертая координата. я думаю. я читал вот это "компьютерная графика шикин боресков"
1
|
|
|
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
|
||
| 19.04.2017, 16:01 [ТС] | ||
Выше вы описали тоже что и я. Я уже написал программу, только есть ряд проблем и главная из них что после перевода в декартову систему куб становится пирамидой ![]() Добавлено через 22 секунды Спс за книгу, посмотрю.
0
|
||
|
Модератор
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
|
|
| 19.04.2017, 16:13 | |
Сообщение было отмечено egor2116 как решение
Решение
egor2116, смысл в том что есть определённые математические приемы. Если вы изобрели их повторно что в принципе несложно для простейших случаев но что-то пошло не так давайте рассмотрим ваши выкладки
0
|
|
|
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
|
||||||||
| 20.04.2017, 08:26 [ТС] | ||||||||
0
|
||||||||
| 20.04.2017, 09:25 | ||||||||||||
Сообщение было отмечено egor2116 как решение
РешениеДобавлено через 8 минут egor2116, вот так рисуется кубик на JavaScript и WebGL: ch08/PointLightedCube_animation index.html
main.js
1
|
||||||||||||
| 20.04.2017, 09:29 | |||||||||||
|
Тот вариант кубика с шейдингом по Гуро, а этот более продвинутый по Фонгу: ch08/LightedCube_perFragment
index.html
main.js
0
|
|||||||||||
|
584 / 387 / 216
Регистрация: 20.01.2013
Сообщений: 1,169
|
|||
| 20.04.2017, 09:38 [ТС] | |||
Может они участвуют в вычислениях дек. координат, а у меня неправильная формула ? Еще подталкивает на это сомнение то, что в векторе наблюдения(е) первый параметр отвечающий поидее за поворот вокруг оси Х, участвует в расчете матрицы как раз в 4ой строке. Добавлено через 4 минуты
Используя библиотеки нарисовать кубик не проблема, мне как раз нужно(в своем роде) и реализовать эту библиотеку.
0
|
|||
| 20.04.2017, 09:56 | ||||||||||||||
А всякий случай отмечу, то в тех примерах на JavaScript все операции с матрицами и другие вспомогательные функции находятся по ссылкам:
Добавлено через 10 минут - одна матрица повернёт его на один угол вокруг какой-то оси - вторая на другой, вокруг какого-то вектора - третья матрица переместит на столько-то в таком-то направлении - и т.д. Все эти матрицы можно перемножить и получить результирующее преобразование. Такая матрица называется матрицей модели, она моделирует все проделанные преобразования. Её мы можем умножить на координаты вектор каждой вершины объекта (ModelMatrix * Position). Тогда мы переведём куб в пространство мировых координат. Далее, мы можем создать матрицу вида хранит в себе свои преобразования (перемещение, вращение, масштабирование), которые преобразуют куб так, как мы зададим в lookAt. Мы её умножаем на предыдущий результат: ViewMatrix * ModelMatrix * Position. Так мы перевели позицию куба в мировых координатах в пространство камеры. Потом мы можем задать плоскости отсечения, создав матрицу, которую умножаем на предыдущий результат: ProjectionMatrix ViewMatrix * ModelMatrix * Position. Тем самым мы переводим объект из пространства камеры в пространство с отсечением (в виде параллелепипеда - ortho, или пирамиды - perspective). Если это перспективная матрица, то координаты ещё испытают преобразование масштабирования. Эти преобразования зашиты в матрицу проекции. Она же проецирует 3D координаты объекта на 2D плоскость экрана. И она же получается переводит из пространства с отсечением в пространство проекции на 2D плоскость экрана.
0
|
||||||||||||||
|
Модератор
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
|
||
| 20.04.2017, 10:30 | ||
|
Добавлено через 2 минуты ..на самом деле вращения перенос и проецирование физически реально осознать головой и карандашом
1
|
||
| 20.04.2017, 11:23 | |
|
egor2116, наиболее полная книга по компьютерной графике, 1264 страницы: Computer Graphics: Principles and Practice (3rd Edition)
1
|
|
| 20.04.2017, 12:53 | |||||||||
Дело в том что для перевода из 3D в пиксели нужно перспективное преобразование. Формула его простая
Поэтому его и не применяют, а делитель таскают с собой. Примерный сценарий (самый простой, но его обычно и достаточно)- задали какие-то исходные координаты с w = 1 - что-то с ними делаем, применяем матрицы, w не трогаем - наконец применили "перспективную" матрицу проекции - в результате нужный делитель попал в w (тут он уже != 1) - теперь просто делим на w, переходим от однородных к декартовым, получаем пиксели. НО! начиная с этого момента никакие матрицы мы уже применять не можем. Ну обычно самому на w делить и не нужно, это сделает сам рендер ![]() Добавлено через 7 минут
1
|
|||||||||
| 20.04.2017, 12:53 | |
|
Помогаю со студенческими работами здесь
14
Отрисовка объёмных фигур
Неправильная отрисовка фигур Отрисовка закрашенных фигур Отрисовка сложных фигур на canvas Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|