Point (Direct3D 9) 的点子画面

支持 Direct3D 9 中的点子画面,可) (粒子系统的高性能渲染。 点子画面是泛型点的泛化,可根据纹理的定义呈现任意形状。

点基元呈现控件

Direct3D 9 支持其他参数,用于控制 (点基元) 的点子画面的呈现。 这些参数可使点为可变大小并应用完整纹理贴图。 每个点的大小由应用程序指定的大小和 Direct3D 计算的基于距离的函数共同确定。 应用程序可以根据每个顶点指定点大小,也可以通过设置 D3DRS POINTSIZE 来指定点大小 _ ,该大小适用于没有每顶点大小的点。 点大小以相机空间单位表示,但当应用程序传递转换后的灵活顶点格式 (FVF) 顶点时除外。 在这种情况下,不会应用基于距离的函数,并且在呈现器目标上以像素为单位表示点大小。

呈现点时,根据 D3DRS POINTSPRITEENABLE 的设置计算和使用纹理坐标 _ 。 如果此值设置为 TRUE,则设置纹理坐标,以便每个点都显示完全纹理。 通常,这仅在点明显大于一个像素时才有用。 如果 _ 将 D3DRS POINTSPRITEENABLE 设置为 FALSE,则每个点的顶点纹理坐标将用于整个点。

点大小计算

点大小由 D3DRS POINTSCALEENABLE 确定 _ 。 如果此值设置为 " FALSE",则使用应用程序指定的点大小作为 (转换后) 大小的屏幕空间。 在屏幕空间中传递到 Direct3D 的顶点没有计算点大小;指定的点大小被解释为屏幕空间大小。

如果 D3DRS _ POINTSCALEENABLE 为 TRUE,则 Direct3D 会根据以下公式计算屏幕空间点大小。 应用程序指定的点大小用相机空间单位表示。

S s = Vh * s i * sqrt (1/ (A + B * D ₑ + C * ( d ₑ² ) ) )

在此公式中,输入点大小 S i是每个顶点或 D3DRS _ POINTSIZE 呈现状态的值。 点缩放系数 D3DRS _ POINTSCALE _ A、D3DRS _ POINTSCALE _ B 和 D3DRS _ POINTSCALE _ C 由点 A、B 和 c 表示。视区的高度,即 V h,是表示视区的 D3DVIEWPORT9 结构的高度成员。 D ₑ,通过获取点 (X ₑ,Y ₑ,Z ₑ) 的眼睛空间位置,并执行以下操作来计算从眼睛到位置 (眼睛) 的距离。

D ₑ = sqrt (X ₑ² + Y ₑ² + Z ₑ²)

最大点大小(Pm ₐₓ)是通过获取 D3DCAPS9 结构的 MaxPointSize 成员或 D3DRS _ POINTSIZE MAX render 状态中的较小者来确定的 _ 。 最小点大小(Pmin)是通过查询 D3DRS POINTSIZE min 的值来确定的 _ _ 。 因此,最终屏幕空间的大小是以下列方式确定的。

  • 如果 Ss > Pm ₐₓ,则 S = P m ₐₓ
  • 如果 < P分钟,则 s = p 分钟
  • 否则为 s

点呈现

屏幕空间大小的屏幕空间点,P = ( X,Y,Z,W) )将栅格化为以下四个顶点的四边形。

( ( X + S/2,Y + S/2,Z,W) , ( X + S/2,Y-S/2,Z,W) , ( X-S/2,Y-S/2,Z,W) , ( X-S/2,Y + S/2,Z,W) )

顶点颜色属性在每个顶点上重复;因此,每个点总是用固定颜色呈现。

纹理索引的分配由 D3DRS _ POINTSPRITEENABLE 呈现状态设置控制。 如果 _ "D3DRS POINTSPRITEENABLE" 设置为 " FALSE",则在每个顶点处复制顶点纹理坐标。 如果 _ 将 D3DRS POINTSPRITEENABLE 设置为 TRUE,则将四个顶点处的纹理坐标设置为以下值。

(为) ,0. F, (0. F,1. F) , (1. F,.0) (

下图显示了此特点。

带有带标签的顶点的正方形的关系图 (u,v) 和 (x,y) 坐标值

启用剪辑后,按以下方式裁剪点。 如果顶点超出了要呈现场景的 D3DVIEWPORT9 结构的深度值(MinZ 和 MaxZ)的范围,则该点在视图为 "截锥" 之外,不会呈现。 如果考虑到点大小,则完全在 X 和 Y 的视区的外部,则不会呈现该点;将呈现其余点。 点位置可能在 X 或 Y 的视区外,但仍部分可见。

可能会也可能不会将点正确剪裁到用户定义的剪辑平面。 如果 _ 未在 D3DCAPS9 结构的 PrimitiveMiscCaps 成员中设置 D3DPMISCCAPS CLIPPLANESCALEDPOINTS,则仅根据顶点位置,将点剪辑到用户定义的剪辑平面,并忽略点大小。 在这种情况下,当顶点位置位于剪辑平面内时,将完全呈现刻度点,当顶点位置位于剪辑平面之外时,它们将被丢弃。 应用程序可以通过将边框几何添加到最大点大小的剪辑平面来防止潜在的项目。

如果设置了 D3DPMISCCAPS _ CLIPPLANESCALEDPOINTS 位,则缩放后的点将正确剪裁到用户定义的剪辑平面。

硬件顶点处理可能会也可能不支持点大小。 例如,如果在 _ 硬件抽象层上使用 D3DCREATE 硬件 VERTEXPROCESSING 创建了一个设备 _ , (hal) 设备 (D3DDEVTYPE _ hal) ,其中 D3DCAPS9 结构的 MaxPointSize 成员设置为1.0 或0.0,则所有点都是一个像素。 若要呈现小于1.0 的像素点子画面,必须使用 FVF TL (转换和点亮) 顶点或软件顶点处理 (D3DCREATE _ software _ VERTEXPROCESSING) ,在这种情况下,Direct3D 运行时将模拟点动画处理渲染。

执行顶点处理并支持将 MaxPointSize 设置为大于 1.0 f-的硬件设备需要为 nontransformed sprite 执行大小计算,并且需要正确设置每顶点或 D3DRS _ POINTSIZED3DRS _ POINTSIZE for TL 顶点。

有关点、线条和三角形的呈现规则的信息,请参阅 光栅化规则 (Direct3D 9)

顶点管道