点精灵的缩放(Direct3D 9)

时间:2012-01-24 14:03:21

标签: directx rendering scaling particle-system

请告诉我,我应该为D3DRS_POINTSCALE_A,D3DRS_POINTSCALE_B,D3DRS_POINTSCALE_С设置哪些值来指定精灵,就像场景中的其他对象一样。参数A = 0 B = 0和C = 1(由F.D.Luna提出)不合适,因为刻度不够准确并且颗粒之间的距离(点精灵)可能大于它应该的距离。如果我将点精灵替换为广告牌,则粒子的比例是正确的,但渲染速度要慢得多。请帮助我,因为为我的任务渲染粒子的速度非常重要,但它们的精确度也非常重要。

Direct3D根据以下公式计算屏幕空间点大小: MSDN - Point Sprites我无法理解应为A,B,C设置哪些值以使缩放正确

P.S。对不起我的英语我来自俄罗斯

1 个答案:

答案 0 :(得分:0)

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的平方)。