Форум программистов, компьютерный форум, киберфорум
DirectX
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
4 / 4 / 0
Регистрация: 01.03.2017
Сообщений: 12
1

Подскажите по DirectX 9 (для связки с C++ Builder)

07.08.2017, 23:56. Показов 1240. Ответов 0

Author24 — интернет-сервис помощи студентам
1) Стоит ли использовать индексирование вершин? Или это практически бесполезная приблуда?
С одной стороны, пишут, что индексирование вершин уменьшает размер данных о геометрии => немного ускоряет их обработку.
С другой стороны, в объектах со сложной геометрией вершины смежных полигонов имеют настолько разные параметры (нормали и текстурные координаты), что вместо одной (индексированной 2 раза) вершины смежных полигонов приходится использовать 2 разные вершины.

2) Как правильно заполнить структуру D3DPRESENT_PARAMETERS?
В инете полно советов по типовому заполнение данной структуры, и нигде-ничего не объясняется.
У меня заполняется типовым образом:
Кликните здесь для просмотра всего текста
// Ïàðàìåòðû ïîêàçà
D3DPRESENT_PARAMETERS D3DPP;
D3DPP.BackBufferWidth = ClientWidth;
D3DPP.BackBufferHeight = ClientHeight;
D3DPP.BackBufferFormat = D3DFMT_A8R8G8B8; //ôîðìàò ïèêñåëåé
D3DPP.BackBufferCount = 1;
D3DPP.MultiSampleType = D3DMULTISAMPLE_8_SAMPLES;
D3DPP.MultiSampleQuality= 0;
D3DPP.SwapEffect = D3DSWAPEFFECT_DISCARD;
D3DPP.hDeviceWindow = Handle;
D3DPP.Windowed = true; // ïîëíîýêðàííûé ðåæèì
D3DPP.EnableAutoDepthStencil = true;
D3DPP.AutoDepthStencilFormat = D3DFMT_D24S8; // ôîðìàò áóôåðà
D3DPP.Flags = 0;
D3DPP.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
D3DPP.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;

Но лучший ли это вариант?
Например, в сети попадался код, в котором:
2.1) перед заполнением стоит "ZeroMemory(&D3DPP, sizeof(D3DPP) );". Зачем?
2.2) "D3DPP.BackBufferFormat = D3DFMT_UNKNOWN;". Что значит D3DFMT_UNKNOWN, зачем?

Ещё несколько вопросов:
2.3) Как выбрать значение для D3DPP.BackBufferFormat? Или использовать всегда только D3DFMT_A8R8G8B8?
2.4) Почему D3DPP.BackBufferCount везде равно 1? А можно 17? В чём разница?
2.5) "MultiSampleType — Используемый для вторичного буфера тип множественной выборки. Подробная информация об этом параметре содержится в документации SDK." А на пальцах, что за штука? Зачем и как использовать? Есть подозрения, что это как-то связано со сглаживанием (см. ниже). Сюда же значение поля MultiSampleQuality -- как выбрать?
2.6) "SwapEffect = D3DSWAPEFFECT_DISCARD". Опять-таки, зна значит поле, и почему всегда D3DSWAPEFFECT_DISCARD?
2.7) EnableAutoDepthStencil. Тут вроде понятно, что оно включает. Но непонятно, зачем нужен сам буфер глубины и что будет если его не включать?
2.8) "D3DPP.AutoDepthStencilFormat = D3DFMT_D24S8;" Насколько хорош данный формат для буфера глубины? В смысле "D3DFMT_D24S8 - 32-битный буфер глубины, когда 24 бита резервируются для канала глубины и 8 битов резервируется для канала трафарета." Без вариантов лучше?
2.9) "D3DPP.Flags" везде ставь ноль и будет тебе счастье... А если почставь не ноль, то что?
2.10) D3DPP.FullScreen_RefreshRateInHz. Везде пишут что надо D3DPRESENT_RATE_DEFAULT. А если поставить значение 159, что будет? А если мне нужно рендерить 1 FPS, тогда можно поставить единицу? А D3DPRESENT_RATE_DEFAULT как определяет частоту рендеринга? Равно текущей частоте обновления экрана?
2.11) Аналогично, поле есть зачем-то советуют везде одно и тоже, а хочется сделать осознанный выбор. В смысле для D3DPP.PresentationInterval всегда ставь D3DPRESENT_INTERVAL_IMMEDIATE.

3) Как правильно подключить DirectX 9 к C++ Builder 6?
В частности, какие нужны lib-файлы и h-файлы... вроде больше никаких типов файлов для этого не надо.
Либы вроде нужно конвертировать спец утилитой в билдеровский формат.
(Я уже писал на билдере, но подключал кое-как на скорую руку, вроде работает, но щас хочу сделать по всем правилам, как надо.)

4) Как правильно сделать сглаживание в DirectX 9?
В одном месте прочёл, что нужно для структуры D3DPRESENT_PARAMETERS правильно установить значение полей MultiSampleType и MultiSampleQuality. Но в целом написано весьма мутновато. Так как же?

5) Какие нюансы есть при использовании функции D3DXMatrixPerspectiveFovLH?
В том числе:
5.1) везде почему-то fovy == D3DX_PI * 0.25f;
5.2) Где-то попадалось, что в значениях zn и zf существуют ограничения, поэтому нельзя юзать произвольные.

6) Понимаю, что DirectX9 сильно заточен под использование матриц, но может есть варианты получше матриц? А то перемножение матриц тяжелая операция + весят не мало. (Иногда вместо матриц юзаю вектора, затем перед вызовом DX-функции преобразую в матрицу, но неудобно.)

7) Что такое rhw при D3DFVF_XYZRHW?
Понадобилось сделать интерфейс, ну т.е. 2д графику. Судя по инету, лучший вариант, использование формата вершин с флагом D3DFVF_XYZRHW. При заполнении возник вопрос: что такое rhw значение вершины, и чем его заполнять?
Кстати, пробовал заполнять и нулём и единицей -- полигон не рисуется. Если переделать прогу в формат D3DFVF_XYZ, то всё норм (естественно грешу на rhw-значение вершин).

P.S.: хм, как это "... тема содержит запрещённые слова: вопросы"...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.08.2017, 23:56
Ответы с готовыми решениями:

Подскажите недорогую камеру для связки pic18f+sim900
У меня связка pic18f14k50+sym900b, дипломный проект. Уже освоил работу с sms, отправку данных на...

Подскажите пожалуйста по поводу связки SLI
Подскажите пожалуйста по поводу связки SLI, хотел купить одну gtx 770, но посмотрел на форумах и...

C++ Builder 6 и DirectX
Целый день облазил инет и так нечего подходящего не нашел. Можете привести примеры использования...

C++ builder и DirectX
Как подключить DirectX к builder'е, искал но не нашел.

0
07.08.2017, 23:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.08.2017, 23:56
Помогаю со студенческими работами здесь

Книга DirectX C++ Builder
Здравствуйте ув. формучане. Я проковырял до дыр весь интернет и не нашел книги по Directx на C++...

Книга о DirectX в C++ Builder
скажите название хорошей книги по DirectX в среде C++ Builder, если такова имеется Начал изучать...

Возможно ли использование DirectX в среде Borland C++ Builder?
если возможно,то можно просто проинсталлировать DirectX SDK на BCB и радоваться жизни?

Энергосбережение для связки LCD16x2 + 74HC595
Доброго времени суток, коллеги! Прошу помочь советом. Задумал организовать энергосбережение для...


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

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