Масштабирование точечных спрайтов (Direc3D 9) - PullRequest
3 голосов
/ 24 января 2012

Скажите, пожалуйста, какие значения я должен установить для D3DRS_POINTSCALE_A, D3DRS_POINTSCALE_B, D3DRS_POINTSCALE_С, чтобы указывать спрайты, масштабируемые так же, как и другие объекты в сцене.Параметры A = 0, B = 0 и C = 1 (предложенные FD Luna) не подходят, потому что масштаб недостаточно точен, а расстояние между частицами (точечными спрайтами) может быть больше, чем должно быть.Если я заменю точечные спрайты на рекламные щиты, масштаб частиц будет правильным, но рендеринг будет намного медленнее.Помогите мне, пожалуйста, потому что скорость рендеринга частиц для моей задачи очень важна, но также важна точность их масштаба.

Direct3D вычисляет размер точки пространства экрана в соответствии со следующей формулой: MSDN - Спрайты точек Не могу понять, какие значения должны быть установлены для A, B, C, чтобы масштабирование былоправильно

PS Извините за мой английский я из России

1 Ответ

0 голосов
/ 30 апреля 2018

Directx использует эту функцию, чтобы определить масштабированный размер точки:

out_scale = viewport_height * in_scale * sqrt( 1/( A + B * eye_distance + C * (eye_distance^2) ) )

eye_distance генерируется:

eye_position = sqrt(X^2 + Y^2 + Z^2)

Итак, чтобы ответить на ваш вопрос:

D3DRS_POINTSCALE_A - это константа

D3DRS_POINTSCALE_B - это линейный элемент (масштаб eye_distance), а

D3DRS_POINTSCALE_C - квадратичный элемент (масштаб eye_distance в квадрате).

...