4 / 4 / 0
Регистрация: 01.03.2017
Сообщений: 12
|
|
1 | |
Подскажите по DirectX 9 (для связки с C++ Builder)07.08.2017, 23:56. Показов 1240. Ответов 0
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
|
07.08.2017, 23:56 | |
Ответы с готовыми решениями:
0
Подскажите недорогую камеру для связки pic18f+sim900 Подскажите пожалуйста по поводу связки SLI C++ Builder 6 и DirectX C++ builder и DirectX |
07.08.2017, 23:56 | |
07.08.2017, 23:56 | |
Помогаю со студенческими работами здесь
1
Книга DirectX C++ Builder Книга о DirectX в C++ Builder Возможно ли использование DirectX в среде Borland C++ Builder? Энергосбережение для связки LCD16x2 + 74HC595 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |