Dx9

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Sneaks
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 29.07.2006 (Сб) 12:08

Dx9

Сообщение Sneaks » 07.04.2017 (Пт) 19:55

Доброго всем время суток,
потихоньку разбираюсь в дх9, при поддержки Майкла, конечно же.
Буду сюда писать все свои нубские вопросы.
Собственно говоря назрел очередной:
Вопрос про DrawIndexedPrimitive.
Я так понял при помощи него можно рисовать не только под ряд все вертексы, а и выборочно, согласно списка - индекс буфера.
На примерах я понял что он работает так: когда мы загоняем в вертекс буфер вертекс, мы сразу загоняем и в индекс буфер по аналогии с вертекс буфером, но почему то длинна его не такая как у вертекс буфера.
В общем если не сложно объясните тонкости.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3733
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Dx9

Сообщение Mikle » 07.04.2017 (Пт) 23:04

Sneaks писал(а):когда мы загоняем в вертекс буфер вертекс, мы сразу загоняем и в индекс буфер по аналогии с вертекс буфером,

Неверно. Тут рядом есть тема: viewtopic.php?f=6&t=34270, там в книге довольно подробно расписано про индексы, что они дают, что делают. Там про DX8, но работа индексного буфера осталась совершенно той же.

Sneaks
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 29.07.2006 (Сб) 12:08

Re: Dx9

Сообщение Sneaks » 08.04.2017 (Сб) 11:10

Согласен - был не прав.
В книге все есть.
Тогда следующий теоретический вопрос.
По текстурированию. Все этот геморой с переключением текстур.
Для упращения всего этого дела и сокращения количества переключению в моей голове только две идеи как это сделать:
либо все вертексы надо сначало сортировать по текстурам и в таком порядке закидывать в буфер. Предположим сначало идут все полы с одной текстурой, потом все стены с другой текстурой и потолки.
Но она неудобная если надо будет что либо добавить.
Второй вариант: на каждую текстуру иметь свой буфер.
На мой взгляд это и лучший вариант. Возможно я что то не учел и есть уже готовые решения?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3733
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Dx9

Сообщение Mikle » 08.04.2017 (Сб) 11:24

Sneaks писал(а):на каждую текстуру иметь свой буфер.

Так обычно и делается, только формулируют это более общим образом - на каждый материал свой буфер. Материал не в смысле только D3DMATERIAL9, а и плюс шейдер (или набор строк SetTextureStageState), плюс текстуры.

Sneaks
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 29.07.2006 (Сб) 12:08

Re: Dx9

Сообщение Sneaks » 12.04.2017 (Ср) 13:35

Следующий вопрос :)
Делаю подобие частиц. Два полигона, на него текстуру с альфой все как в примере.
Сортирую по расстоянию, и рисую их в порядке от дальнего к ближнему в один буфер с учетом поворота на камеру.
Вот пример:
https://yadi.sk/d/OaUKAWe_3GtnrV
Управление - стрелочки и PgUp, PgDnw, P(русская З) - добавлять частицы, ограничение 200

Вопрос: можно ли так делать, не слишком это трудозатратное дело для CPU. И есть ли другие решения?
Забыл: решение по разным текстурам: все текстуры закунить в одну физическую, а в полигонах, согласно атласу, ставить tu tv согласно необходимой.
ЗЫ пример рабочий, верней даже черновик. Я на нем эксперементирую и учусь, так что за него сильно не бить, там все в свалке.
В примере есть к стати загрузчик .obj файлов, из минусов обж нашел только то что он много весит, т.к. ни чем не сжат, для обучения пойдет и скидывать с макса можно на прямую.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3733
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Dx9

Сообщение Mikle » 12.04.2017 (Ср) 17:29

Sneaks писал(а):Сортирую по расстоянию

При таком типе частиц этого можно избежать, они подразумевают аддитивный блендинг, в таком случае можно не упорядочивать.
Если частицы движутся средствами CPU каждый кадр, можно не использовать вертексный буфер, а рисовать прямо из массива с помощью DrawPrimitiveUp или DrawIndexedPrimitiveUp.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3733
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Dx9

Сообщение Mikle » 12.04.2017 (Ср) 19:29

Посмотри в теме моей игры BeQuits, там есть исходник, в нём модуль modCloud.bas - это весь дым, в модуле всего 5 Public процедур:
CloudInit - вызывается однократно в начале после инициализации D3D.
CloudTerminate - вызывается однократно в конце перед уничтожением D3D.
CloudAdd - добавить одну частицу дыма.
CloudTick - вызывается периодически (у меня 200 раз в секунду).
CloudDraw - вызывается из цикла рендера для рисования дыма.
Всё! Можно брать модуль и вставлять в другой проект, ничего лишнего. А твой проект читать очень тяжело, всё намешано, ещё и форматирование отсутствует.

Sneaks
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 29.07.2006 (Сб) 12:08

Re: Dx9

Сообщение Sneaks » 13.04.2017 (Чт) 9:25

Ну то что намешано я предупреждал, это эксперементальный, там все и сразу и в разных вариациях.
слямзил у тебя рендер стейты и все заработало.
Обидно что не понимаю что произошло.
Да и DrawPrimitiveUp не понятен. Начал искать в инете чем он отличается от обычного DrawPrimitive, толкового описания не нашел.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3733
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Dx9

Сообщение Mikle » 13.04.2017 (Чт) 9:48

Sneaks писал(а):DrawPrimitiveUp не понятен.

Это рендер геометрии без использования вертексного буфера, прямо из массива в памяти. Это медленнее, чем с использованием вертексного буфера, но, когда ты каждый кадр меняешь в вертексном буфере данные и засылаешь их туда (SetData или Lock, не важно), это получается то же самое, если не медленнее.
Sneaks писал(а):слямзил у тебя рендер стейты и все заработало.
Обидно что не понимаю что произошло.

Не начинай делать большой проект, пока не понял мелочи, погрязнешь. Делай маленькие тесты, примерно как примеры из книги, задавай вопросы, на примере таких маленьких проектов отвечать легче.

Sneaks
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 29.07.2006 (Сб) 12:08

Re: Dx9

Сообщение Sneaks » 17.04.2017 (Пн) 13:53

Переделал на примитивАП тесты показали:
200 частиц с АП: падение с 2600 до 1000 фпс
так же 200 частиц но с буфером: падение с 2600 до 1700 фпс.
Я так понял по производительности если я буду передвигать частицы в буфере каждый кадр то выходит одинаково. Но за счет того что я передвигаю частицы по таймеру и перерисовываю их в буфере, соответственно тогда же, т.е. реже чем каждый кадр то и фпс в итоге выше.
В общем пока не нашел применения дроПримитивАПам, думал можно через него рисовать скинед меши, но по логике этих же частиц, выгодней через буфер, т.к. менять его не обязательно каждый кадр, то выходит даже дешевле.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3733
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Dx9

Сообщение Mikle » 17.04.2017 (Пн) 14:34

Тут не всё так просто. С "ап"ом буфер фактически обновляется столько раз в секунду, какой fps, поэтому при больших fps просадка больше. При реальных игровых fps, особенно при включенном vSync, влияние будет меньше.

Sneaks
Новичок
Новичок
 
Сообщения: 39
Зарегистрирован: 29.07.2006 (Сб) 12:08

Re: Dx9

Сообщение Sneaks » 13.09.2017 (Ср) 10:46

Продолжаю изучение, рисую полигоны с разными текстурами и остальными стейжами, дело дошло до скининг меш. По что сам ручками выставляю координаты точек, и их закидываю в буфер, все вроде нормально, наткнулся что это может делать как то сама видеокарта. Вопрос: может ли? и если да, то в какую сторону копать?

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 3733
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Dx9

Сообщение Mikle » 13.09.2017 (Ср) 13:31

Sneaks писал(а):Вопрос: может ли? и если да, то в какую сторону копать?

В сторону создания анимированной модели в редакторе и экспорта её в .x.
Сам я этим не занимался, делаю анимацию своими велосипедами.


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList