Форум программистов, компьютерный форум, киберфорум
DirectX
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
1

Альтернатива D3DFVF_XYZRHW

16.10.2012, 00:58. Показов 2461. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Все пытаюсь понять принципы разработки поверхностного интерфейса (идет прорисовка графики в 3D представлении, а затем 2D элементы управления) под DX.

Очень понравился ключ D3DFVF_XYZRHW при создании фигуры, т.к. дает возможность размещения контролов по заданным координатам без лишних действий, но у него есть одна особенность - все манипуляции с матрицами игнорируются. А значит, если есть необходимость корректировки размера или положения фигуры, то нужно либо редактировать сам вертекс (через Lock() & Unlock), либо создавать его заново.

Иной метод, я озвучивал в другой теме. Фигура создается по нулевым координатам, с размером по умолчанию, а далее все действия происходят через матрицы. Но в этом случае, только с одними контролами будут сотни операций с матрицами.

Есть ли альтернативный метод для проектирования интерфейса под DX? Так сказать, чтобы, и волки были сыты, и овцы целы.

ps. Вариант с Surface к сожалению не очень подходит, ибо к нему операции с альфа каналами прикрутить не удалось.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2012, 00:58
Ответы с готовыми решениями:

Альтернатива CD3DMesh
У меня DirectX 9 (2010), для одного примера из книги мне нужен класс CD3DMesh, но нужного хидера в...

Улучшенная альтернатива HDD или ухудшенная альтернатива SSD
Как я заметил, в ПК для офисных задач самое узкое место - это устройство хранения данных. Поэтому...

Альтернатива F2
Подскажите, пожалуйста, какой может быть альтернатива нажатию кнопки F2 в Views? Задача в...

альтернатива
Здравствуйте, уважаемые. Собираю устройство по одной статейке. Возникли сложности при покупке...

14
117 / 75 / 5
Регистрация: 15.03.2012
Сообщений: 259
16.10.2012, 08:24 2
Ну так, для всех тех, кто ещё догнал, что никакого 3D в DirectX вообще нет поясню, что можно ваще без всяких преобразований рисовать на экране оперируя относительными координатами по всем трём осям в диапазоне от -1.0 до +1.0. Правда координата Z тут особо никакого смысла не имеет.
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
16.10.2012, 13:25  [ТС] 3

Не по теме:

Цитата Сообщение от -=MASTER=- Посмотреть сообщение
Ну так, для всех тех, кто ещё догнал, что никакого 3D в DirectX вообще нет
- Видишь суслика?
- Да.
- А его нет...


Цитата Сообщение от -=MASTER=- Посмотреть сообщение
поясню, что можно ваще без всяких преобразований рисовать на экране оперируя относительными координатами по всем трём осям в диапазоне от -1.0 до +1.0. Правда координата Z тут особо никакого смысла не имеет.
Мне кажется пояснения "как" - как раз и не хватает. Если имеется ввиду, приведения матрицы в ортогональный вид, то я об этом говорил в качестве второго метода. Но рационально ли его использовать для интерфейса не понял, т.к. при прорисовке будет происходить большое количетсво операций с матрицами.
0
117 / 75 / 5
Регистрация: 15.03.2012
Сообщений: 259
16.10.2012, 14:44 4
Цитата Сообщение от DefineTrueFalse Посмотреть сообщение
Если имеется ввиду, приведения матрицы в ортогональный вид
Нет. Имеется ввиду, что просто напросто как обычно создай структуру типа SimpleVertex, в которой как обычно хранятся как минимум координаты точек для вертекс буффера, а вот эти координаты сделай в диапазоне, указанном выше и всё. И не нужны никакие матрицы, будешь просто как в пэйнте рисовать, но сам понимаешь, можно рисовать или комбинацией точек, или треугольников, или квадратов или кривых безье (см тесселяцию и типы входных данных в домэйн и геометрическом шейдерах)
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
16.10.2012, 18:47  [ТС] 5
Цитата Сообщение от -=MASTER=- Посмотреть сообщение
(см тесселяцию и типы входных данных в домэйн и геометрическом шейдерах)
Разве тогда будет отображение с поддержкой 9ой версии? (msdn).
0
117 / 75 / 5
Регистрация: 15.03.2012
Сообщений: 259
16.10.2012, 21:56 6
Цитата Сообщение от DefineTrueFalse Посмотреть сообщение
с поддержкой 9ой версии?
нее ты чё тесселяция только в 11-м, в девятом сплайны отпадают.
Вообще для интерфейса есть Direct2D. Он как раз с 9-го директа вроде идёт

Добавлено через 58 минут
На счёт Direct2D - Отбой, он всё таки только с 10-го директа, хотя на msdn написано, что в 9-м есть какой - то техникал превью....
0
3420 / 1607 / 236
Регистрация: 26.02.2009
Сообщений: 7,856
Записей в блоге: 5
17.10.2012, 20:06 7
Эм... не знаю как там в ДХ настраивается матрица проекций, но в ОпенГЛ можно отдельно её настроить для 2Д режима. В итоге (0,0) - это угол экрана, а противоположный - (ClientWidth,ClientHeight), как многие привыкли в 2Д, но, возможно, останутся доступны операции с матрицами. Не?
0
117 / 75 / 5
Регистрация: 15.03.2012
Сообщений: 259
17.10.2012, 22:37 8
Цитата Сообщение от snake32 Посмотреть сообщение
В итоге (0,0) - это угол экрана
Нее, тут 0,0 - середина экрана

Добавлено через 9 минут
Цитата Сообщение от snake32 Посмотреть сообщение
возможно, останутся доступны операции с матрицами. Не?
Да причём тут матрицы едрить раскодрить. Я ж говорю, что никакого 3Д на самом деле нет, то что ты загружаешь меш или там заполняешь вертексные структуры с типа 3Д координатами - это всего лишь иллюзия в твоей голове, тоесть это только ты представляешь, как там всё выглядит в 3д, компьютеру же надо это отобразить на 2-х мерном экране монитора, для этого и существуют матрицы приведения, тоесть матрицы мира, вида и проекций. Матрица мира и вида - это то, что работает опять же в твоей фантазии и если после этого не применить матрицу проекций, ты скорее всего ничего на экране не увидишь, т.к. она и создана для выбора маленького кусочка с матрицы вида и отображения проецированного изображения на экране....уж не знаю как и объяснить точнее. В общем матрица проекций приводит твои воображаемые крутые 3д координаты к координатам в диапазоне от -1 до +1. Ты свободно можешь проецировать свои крутые сцены с использованием матриц мира вида и проекций на экран, но никто тебе не мешает одновременно оверлеем рисовать прямо на экране без приведения матрицами к нужным координатам сразу в диапазоне от -1 до +1 - тоесть как вариант GUI

Добавлено через 15 минут

Не по теме:

P.S.: Ребят, никак не могу вкурить, если делать приложения на Visual Studio Express, их можно продавать или это будет нарушением лицензии? (без MFC, ATL и прочей черганда, используя только Win32)



Добавлено через 4 минуты
Цитата Сообщение от snake32 Посмотреть сообщение
останутся доступны операции с матрицами. Не?
А куда они денутся? Можно работать с матрицами и без стандартных матриц вида и проекций, создав собственные, можно ваще без директ икса, а можно и без компьютера - на листе бумаге.
0
3420 / 1607 / 236
Регистрация: 26.02.2009
Сообщений: 7,856
Записей в блоге: 5
18.10.2012, 01:27 9
Цитата Сообщение от -=MASTER=- Посмотреть сообщение
Нее, тут 0,0 - середина экрана
Да ладна! А если я заменю
C++
1
2
3
4
5
D3DXMATRIX proj;// матрица проекций
//D3DXMatrixPerspectiveFovLH( &proj, D3DXToRadian(45.0f), ClientWidth/ClientHeight, 1.0f, 100.0f );
//на
D3DXMatrixOrthoOffCenterLH( &proj, 0.0f, ClientWidth, 0.0f, ClientHeight, -1.0f, 1.0f );
m_pD3DDevice->SetTransform( D3DTS_PROJECTION, &proj );
Где 0,0 будет?
0
117 / 75 / 5
Регистрация: 15.03.2012
Сообщений: 259
18.10.2012, 08:55 10
Цитата Сообщение от snake32 Посмотреть сообщение
Где 0,0 будет?
Не путай новичков всякими отхождениями от стандартной записи в учениках и примерах
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
18.10.2012, 16:30  [ТС] 11
Цитата Сообщение от snake32 Посмотреть сообщение
Эм... не знаю как там в ДХ настраивается матрица проекций, но в ОпенГЛ можно отдельно её настроить для 2Д режима. В итоге (0,0) - это угол экрана, а противоположный - (ClientWidth,ClientHeight), как многие привыкли в 2Д, но, возможно, остану
Я уже воспроизводил озвученное, через изменение матрицы проекций. Есть ссылка в первом посте.

Вопрос по сути звучит так. Что рациональней использовать для создания интерфейса под DX. Объекты с флагом D3DFVF_XYZRHW (абсолютые координаты), изменение которых, будет происходить через Lock&Unlock или объекты с флагом D3DFVF_XYZ, изменение которых будет происходит через матрицы.

Главная задача, избежать "потери" контролов при изменении разрешения. Но т.к. подобная операция не будет происходить каждую минуту, то можно спокойно залезать в вертекс и изменять его. Но если "привязать" положение контрола к положению курсора, то здесь уже однозначно нужно смотреть в сторону работы с матрицами, другого решения средствами DX9 я не нашел.
0
3420 / 1607 / 236
Регистрация: 26.02.2009
Сообщений: 7,856
Записей в блоге: 5
18.10.2012, 22:49 12
А как в примерах к DX'у идёт визуализация UI? Видел там много разных контролов...
0
117 / 75 / 5
Регистрация: 15.03.2012
Сообщений: 259
18.10.2012, 23:23 13
Цитата Сообщение от snake32 Посмотреть сообщение
DX'у идёт визуализация UI
Она там сделана так - см. рис.
Миниатюры
Альтернатива D3DFVF_XYZRHW  
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
18.10.2012, 23:50  [ТС] 14
Цитата Сообщение от snake32 Посмотреть сообщение
А как в примерах к DX'у идёт визуализация UI? Видел там много разных контролов...
У них там что-то вроде фреймворка и если кратко, то через D3DFVF_XYZRHW. Но многое из представленного там реализовано только для примера. Поэтому исходить из этого "трудно".
1
warchief
19.10.2012, 04:20     Альтернатива D3DFVF_XYZRHW
  #15

Не по теме:

Цитата Сообщение от snake32 Посмотреть сообщение
m_pD3DDevice->SetTransform( D3DTS_PROJECTION, &proj );
как хорошо что в DX11 такой команды больше нет, и все что там нужно, это решить - умножать на ортогональную или перспективную

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2012, 04:20

Альтернатива IN()
Есть простой запрос выводящий количество определённых записей за каждый час суток за определённый...

Альтернатива 1С
На сегодняшний фирма, на которой работает жена, пользуется системой 1С, но чувствуется негативное...

Альтернатива NOT IN
Всем привет! Погомите найти альтернативое решение в запросе. С начало предистория. В базе...

Альтернатива GET
Столкнулся с проблемой что гугл хром опцией «Предсказывать сетевые действия для ускорения загрузки...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru