Scaling of the point sprites (Direc3D 9)

旧巷老猫 提交于 2019-12-10 21:56:06

问题


Tell me please what values should ​​I set for D3DRS_POINTSCALE_A, D3DRS_POINTSCALE_B, D3DRS_POINTSCALE_С to point sprites scaled just like other objects in the scene. The parameters A = 0 B = 0 and C = 1 (proposed by F. D. Luna) not suitable because the scale is not accurate enough and the distance between the particles (point sprites) can be greater than it should be. If I replace the point sprites to billboards, the scale of the particles is correct, but the rendering is much slower. Help me please because the speed of rendering particles for my task is very important but the precise of their scale is very important too.

Direct3D computes the screen-space point size according to the following formula: MSDN - Point Sprites I can not understand what values ​​should be set for A, B, C to scaling was correct

P.S. Sorry for my english I'm from Russia


回答1:


Directx uses this function to determine scaled size of a point:

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

eye_distance is generated by:

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

So to answer your question:

D3DRS_POINTSCALE_A is the constant

D3DRS_POINTSCALE_B is the Linear element (scales eye_distance) and

D3DRS_POINTSCALE_C is the quadratic element (scales eye_distance squared).



来源:https://stackoverflow.com/questions/8988130/scaling-of-the-point-sprites-direc3d-9

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!