Да, я с вами согласен. Скажу только, что выбрал DX9 из-за того, что ничего, что предлагает DX10\11 не требуется для системы частиц. Ну и конечно же переписать код под новую версию API не составит большого труда.
Ньютоновская гравитация. Курсор мыши выступает в качестве сверх-тяжелого тела, масса частиц не учитывается и принимается за 1 у.е. Соответственно и взаимодействие между частицами не вычисляется.
Изначально я взял формулу для расчет в векторной форме, там использовался куб расстояния. Потом я вернулся к обычной формуле, просто исправив 3-ку на 2-ку, и так больше и не заглядывал в формулу. Отдельно расстояние не нужно. Спасибо за замечание.
>Как получить похожий эффект без дополнительной текстуры: pastebin.com/sErK2Lsa
Спасибо. Как-то даже не подумал о генерации градиента.
>Да и ДХ10+ не нужен, можно все считать в вершинном шейдере, взаимодействия между частицами то нет.
Да, взаимодействия между частицами нет, но каждый раз нужно обновлять координаты частиц для дальнейших расчетов. Если вы знаете о том, как это можно сделать в DX9 — напишите пожалуйста.
Действительно. Моя невнимательность мне точно когда-то выйдет боком.
Правильная формула:
if (Blend >= ½) R = Target + 2 x Blend — 1
if (Blend < ½) R = Target + Blend
>>К тому же, использовать такие конструкции (как и другие булевы операции) следует весьма осторожно
Смотрел дизасемблированный вариант шейдера, когда занимался профилированием (Nvidia Perf HUD), все выглядело достаточно оптимально. Особо не вчитывался конечно, но ничего подозрительного не увидел.
>>Насколько я понимаю, анимация частиц производится все же на CPU
Да, все расчеты на CPU в несколько потоков.
>>Не слишком ли накладно постоянно лочить буфер?
Накладно, но не настолько. Если верить данным профилировщика, то самое накладное это именно вычисление координат частиц.
>>Не пробовали ли сделать то же самое на D3D?
Уже думаю о том, как переложить все расчеты на GPU. Начиная с DirectX 10 есть возможность изменять буфер напрямую из шейдера, насколько я слышал. Вскоре вполне возможно будет еще одна статья, но уже про D3D10 (11-ый мое оборудование не поддерживает) и вычисление на GPU.
Кстати, в тему о стилях в Qt. Если в собранном приложение использовать стандартный стиль, то в Windows 8 приложение будет выглядеть в классическом стиле Windows.
Вы путаете понятия. ООП — это концепция, парадигма, а паттерн это реализация архитектуры. Интегралы. Просто? А численное интегрирование дифференциальных уравнений сплайнами? Уже не так просто и понятно?
Спасибо. Как-то даже не подумал о генерации градиента.
>Да и ДХ10+ не нужен, можно все считать в вершинном шейдере, взаимодействия между частицами то нет.
Да, взаимодействия между частицами нет, но каждый раз нужно обновлять координаты частиц для дальнейших расчетов. Если вы знаете о том, как это можно сделать в DX9 — напишите пожалуйста.
Правильная формула:
if (Blend >= ½) R = Target + 2 x Blend — 1
if (Blend < ½) R = Target + Blend
>>К тому же, использовать такие конструкции (как и другие булевы операции) следует весьма осторожно
Смотрел дизасемблированный вариант шейдера, когда занимался профилированием (Nvidia Perf HUD), все выглядело достаточно оптимально. Особо не вчитывался конечно, но ничего подозрительного не увидел.
Может вам будет понятна формула в таком виде:
if (Blend >= ½) R = Target + 2 x (Blend-½)
if (Blend < ½) R = Target + 2 x Blend -1
Да, все расчеты на CPU в несколько потоков.
>>Не слишком ли накладно постоянно лочить буфер?
Накладно, но не настолько. Если верить данным профилировщика, то самое накладное это именно вычисление координат частиц.
>>Не пробовали ли сделать то же самое на D3D?
Уже думаю о том, как переложить все расчеты на GPU. Начиная с DirectX 10 есть возможность изменять буфер напрямую из шейдера, насколько я слышал. Вскоре вполне возможно будет еще одна статья, но уже про D3D10 (11-ый мое оборудование не поддерживает) и вычисление на GPU.