Форум программистов, компьютерный форум, киберфорум
DirectX
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
26 / 1 / 1
Регистрация: 27.06.2021
Сообщений: 72

DirectX11 как преобразовать видовые координаты в координаты вью порта?

29.07.2022, 16:39. Показов 2025. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Люди, получил координаты вида(перемножил мировые координаты на матрицу вида), результат: 0.20, -1, 6.3, 1. И задался вопросом: а как эти координаты перевести в координаты вью порта, чтобы я бесперспективную модель смог интерпретировать на экран. Я катастрофически новичок в графическом программировании, так что не судите строго пожалуйста.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.07.2022, 16:39
Ответы с готовыми решениями:

Vb.net directx, slimdx преобразовать экранные координаты мыши в 3d координаты
vb.net directx, slimdx преобразовать экранные координаты мыши в 3d координаты необходимо передвигать объекты мышью по плоскости XY,...

Даны координаты двух вершин треугольника A(2;-3) , B(-2;4) и координаты точки пересечения медиан этого треугольника M(2;2) . Найти координаты вершины
Даны координаты двух вершин треугольника A(2;-3) , B(-2;4) и координаты точки пересечения медиан этого треугольника M(2;2) . Найти...

OpenTK. Как перевести координаты клика мыши в координаты сцены?
Здравствуйте! Пишу на OpenTK C#(winForm). Есть матрица камеры и матрица перспективы. Viewport на всю область. Как перевести...

9
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
29.07.2022, 17:08
Цитата Сообщение от Shert Посмотреть сообщение
результат: 0.20, -1, 6.3, 1
Это координаты одной вершины или что?
Цитата Сообщение от Shert Посмотреть сообщение
И задался вопросом: а как эти координаты перевести в координаты вью порта, чтобы я бесперспективную модель смог интерпретировать на экран.
Нужно умножить ещё на матрицу проекции(если она не единичная) и разделить на полученную w компоненту. Тогда получишь нормализованные координаты. Перевести их в диапазон [0..1], т.е. прибавить 1.0 и умножить на 0.5. Затем перевести в координаты вьюпорта, т.е. уможить x и y на ширину и высоту (добавив смещение, если вьюпорт не на весь фреймбуфер).
1
26 / 1 / 1
Регистрация: 27.06.2021
Сообщений: 72
29.07.2022, 17:23  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Это координаты одной вершины или что?
Да - это координаты одной вершины.

Цитата Сообщение от zayats80888 Посмотреть сообщение
Нужно умножить ещё на матрицу проекции(если она не единичная) и разделить на полученную w компоненту. Тогда получишь нормализованные координаты.
Понял, спасибо. То, что нужно!

Цитата Сообщение от zayats80888 Посмотреть сообщение
Перевести их в диапазон [0..1], т.е. прибавить 1.0 и умножить на 0.5. Затем перевести в координаты вьюпорта, т.е. уможить x и y на ширину и высоту (добавив смещение, если вьюпорт не на весь фреймбуфер).
Вот контекст этих действий я совсем не понял, ведь мы уже на предыдущем шаге получили нормализованные координаты(умножив на матрицу перспективы и поделив на w) и можем спокойно интерпретировать их на вью порт, зачем лишние действия?
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
29.07.2022, 17:32
Цитата Сообщение от Shert Посмотреть сообщение
ведь мы уже на предыдущем шаге получили нормализованные координаты(умножив на матрицу перспективы и поделив на w) и можем спокойно интерпретировать их на вью порт, зачем лишние действия?
Я с directX не знаком, но разве они не в диапазоне [-1..1]?

Добавлено через 2 минуты
Цитата Сообщение от zayats80888 Посмотреть сообщение
Перевести их в диапазон [0..1], т.е. прибавить 1.0 и умножить на 0.5
Подправлю, сначала умножить на 0.5, а потом прибавить единицу.
0
26 / 1 / 1
Регистрация: 27.06.2021
Сообщений: 72
29.07.2022, 17:40  [ТС]
Цитата Сообщение от zayats80888 Посмотреть сообщение
Я с directX не знаком, но разве они не в диапазоне [-1..1]?
Ну вот у меня такая ситуация: я умножил координаты вида на матрицу перспективы и получил координаты перспективы(они не входили в диапазон [-1...1]), поделил на w и получил нормализованные координаты, которые входят в диапазон [-1...1]. Далее я тоже самое проделал с ещё четырьмя вершинами(так как рисую пирамиду). Попробовал для проверки полученные результаты отобразить на листочке бумаги и сравнить с картинкой на мониторе, итог: результаты сходятся. И исходя из этого, я сделал вывод, что: дальнейшие манипуляции с координатами не имеют никакого смысла.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
29.07.2022, 17:42
Лучший ответ Сообщение было отмечено Shert как решение

Решение

Shert, в документации формула такая (из нормализованных в экранные)
X = (X + 1) * Viewport.Width * 0.5 + Viewport.TopLeftX
Y = (1 - Y) * Viewport.Height * 0.5 + Viewport.TopLeftY
Z = Viewport.MinDepth + Z * (Viewport.MaxDepth - Viewport.MinDepth)
https://docs.microsoft.com/en-... dfrom=MSDN
1
26 / 1 / 1
Регистрация: 27.06.2021
Сообщений: 72
29.07.2022, 17:45  [ТС]
Спасибо за источник, буду разбираться!
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
29.07.2022, 17:46
Цитата Сообщение от zayats80888 Посмотреть сообщение
Подправлю, сначала умножить на 0.5, а потом прибавить единицу.
Нет, туплю, изначально было верно, формула c MSDN подтверждает.
0
26 / 1 / 1
Регистрация: 27.06.2021
Сообщений: 72
29.07.2022, 18:50  [ТС]
X = (X + 1) * Viewport.Width * 0.5 + Viewport.TopLeftX
Y = (1 - Y) * Viewport.Height * 0.5 + Viewport.TopLeftY
Z = Viewport.MinDepth + Z * (Viewport.MaxDepth - Viewport.MinDepth)
Такс, я разобрался. Данные формулы перевели координаты вью порта в координаты пикселей на экране. Хорошо, спасибо. Буду знать
0
154 / 0 / 0
Регистрация: 23.05.2022
Сообщений: 26
30.07.2022, 22:12
обьясните мне cpp basic style === как это сделать на простом си с двумерными уравнениями или просто варами

Добавлено через 1 минуту
чтотакое вьюпорт - как это переводится в язык 1+1=2 cpp basic style?

Добавлено через 4 минуты
у меня формула

я ее списал из досовского туториала

x2d=x3d/z3d+160
y2d=y3d/z3d+100

она короче обьясняет как 3d [k1,k2,k3] превратить в 2d [kk1,kk2]

как мою формулу сделать через вашу формулу
тобишь досовскую формула превратить в вьюпорт формулу

а между ними в центре должна быть масса простых уравнений - переходная формула
разжуйте
или дайте мне книгу ссылку на новый тутор про вьюпорты и 3d to 2d///...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.07.2022, 22:12
Помогаю со студенческими работами здесь

Как автоматически преобразовать координаты в контексте CClientDC?
я создаю контекст устройства - CClientDC dc(this); dc.SetMapMode(MM_LOMETRIC); dc.SetWindowOrg(-1030,1030);а теперь я...

Отрисовка графика функции: как преобразовать координаты?
Рисую график функции sin x - 2y = 1 Сначала отрисовываю координатные оси и координатную сетку. За единицу на осях координат принимаю 20...

Найти как можно более точные координаты точки, если известны координаты других точек и примерные расстояния до них
Всем привет! Задача: найти как можно более точные координаты точки, если известны координаты других точек и примерные расстояния до них. ...

Как найти координаты конца отрезка, зная координаты начала, длину отрезка и вектор направления?
На плоскости даны длина отрезка l, координаты начала отрезка , и координаты вектора направления По какой формуле можно найти координаты...

Преобразовать координаты GPS
Приветствую Всех. Прошу подсказать, как правильно преобразовать градусы, минуты, секунды в десятичные градусы. Сам сделал так, но...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru