点基础知识——OpenGL ES Common/Common-Lite 规范(版本 1.1.12)

3.3点

点的光栅化由下两个函数控制:

Void  PointSize(float  size);

Void  PointSizex(fixed  size);

Size定义了点的尺寸。默认值是1.0。一个小于或等于0的值会导致错误INVALID_VALUE。

点的尺寸会乘上一个距离衰减因子,固定于由PointParameter定义的尺寸范围,参看下面叙述,更固定于依赖执行的点范围去推导出衍生的点尺寸:

{33B531D7-9F63-44D4-A058-D3B74D131085}

这里d是眼坐标中眼和顶点坐标的距离,(0,0,0,1)是眼的坐标,a、b和c是距离衰减函数系数。

点精灵的“能”或“不能”是通过调用POINT_SPRITE_OES符号常量的Enable或Disable设置。点精灵状态的默认值是“不能”。当点精灵是不能时,点的抗锯齿状态是被忽略的。

点精灵的纹理坐标的复位模式由以下命令设置

Void  TexEnv{ixf}(enum  target, enum  pname, T  param);

Void  TexEnv{ixf}(enum  target, enum  pname, T  params);

Target的值是POINT_SPRITE_OES而且pname是COORD_REPLACE_OES。param可能的值是FALSE和TRUE。点精灵的纹理坐标复位的各纹理单元的默认值是disabled。

如果重采样不是enable,源尺寸被当做点宽度传给光栅。

如果重采样是enable,一个执行将随机的淡化点的alpha(参看3.10)值,以取代允许点宽度gobelow给定的极值。在那种情况下,光栅化的点的宽度为:

{A7EAC510-D8CC-4946-94EA-B8D4267AC25C}

淡化因子按如下方法计算:

{6C6728CC-F8DD-487A-A946-9CD3E15F95AC}

距离衰减函数的系数a,b和c,第一个点的尺寸范围,点的淡化极限,由以下函数定义:

Void PointParameter{xf}(enum pname, T  param);

Void PointParameter{xf}v(enum pname,const  T  params);

如果pname是POINT_SIZE_MIN或者POINT_SIZE_MAX,那么param或者params各自指定了更低或者更高的源点尺寸固定的范围。如果更低的范围比更高的范围更大,点尺寸固定值之后的值没有定义。如果pname的值是POINT_DISTANCE_ATTENUATION,那么params指向了参数a,b,c。如果pname是POINT_FADE_THRESHOLD_SIZE,那么param定义的或者params指向的是点的淡出极限。POINT_SIZE_MIN值、POINT_SIZE_MAX值和POINT_FADE_THRESHOLD_SIZE值低于0会导致INVALID_VALUE错误。

点抗锯齿的“能”或“不能”是通过调用POINT_SMOOTH符号常量的Enable或Disable设置。点抗锯齿状态的默认值是“不能”。

3.3.1点光栅化基础

在默认状态,点的光栅化是裁剪它的xw和yw坐标(注意,下标表明这是x和y的窗口坐标)到整数。这个(x,y)的地址,随同与点相应的顶点相关联的数据生成的数据,被作为单个的片元被传递到GL的片元舞台。

宽度不为1.0的点的效果依赖于点抗锯齿和点精灵的状态。

不抗锯齿的点

如果抗锯齿和点精灵都为disable,真实的宽度通过将宽度取整到最近的整数来决定,然后固定到依赖于执行的最大的不抗锯齿的宽度。这个依赖于执行的值必须不小于依赖于执行的最大的抗锯齿点宽,取整到最近的整数值,并且无论如何都不低于1。如果对指定宽度取整得到0值,将会将之置为1。如果结果宽度为基数,那么点

{7E24B2C1-738D-4F83-AF94-27D103F281C0}

是由顶点的xw和yw计算出的,并且基数宽度的方形栅格在(x,y)的中心定义了光栅片元的中心(注意,片元中心取值为半整数的窗口坐标值)。如果宽度是偶数,那么中心点是

{207DE182-4CBF-426A-A815-2064FCE05CC3}

光栅化片元中心是半整数的窗口坐标值,在偶数宽度中心的方形中,在(x,y)。参看图3.2。

{A3736097-AFE9-45FE-A66E-AC7DB2BEEA0C}

图3.2不抗锯齿点的光栅化。叉代表阴影区域中的点背光栅化后产生的片元中心。虚线代表半整型坐标。

所有的片元都是通过光栅化一个不抗锯齿的点而生产的,它们被分派了相同的关联数据,这些数据是伴随点的顶点,分别用纹理坐标s,t和r来取代s/q,t/q,和r/q。如果q小于等于0,那么结果是未定义的。

抗锯齿的点

如果抗锯齿的值是enable,并且点精灵的值是disable,那么点光栅化为每个片元区域生产一个片元。片元区域是网格线和当前点的边界圆的交点决定的(图3.3)。每个片元的覆盖值是圆区域和相应的片元区域的交叉点的窗口坐标区域(参看3.2)。这个值被保存起来并在光栅化的最后一步使用(参看3.9)。其它相关的片元数据都和不抗锯齿点一样的方式得到。

{E681B467-03EB-4D1E-9B80-622199C4833A}

图3.3.抗锯齿点的光栅化。黑点代表被光栅化的点。阴影区域定义了宽度。X标记代表了光栅化后生成的片元中心。一个片元计算出的覆盖值是基于覆盖相应的片元区域的阴影区域的部分。实现代表整型坐标。

点抗锯齿的时候并不是所有的宽度都需要被支持,但1.0的宽度必须被支持。如果需要对一个不支持的宽度做抗锯齿,那么需要用最近邻的支持的宽度来代替。支持的宽度范围在这个范围里以均匀间距渐变的宽度都是依赖于执行的。范围和渐变可以通过第6章介绍的查询机制来获得。例如,如果宽度范围是0.1到2.0,而且渐变宽度是0.1,那么宽度0.1,0.2,…,1.9,2.0都是支持的。

点精灵

当点精灵是enable,那么点的光栅化为每个帧缓存像素生成一个片元,片元的中心在一个以(xw,yw)点为中心的方形区域中,区域的边长等于当前点的尺寸。

各片元的相应的数据的决定方式和不抗锯齿是一样的。尽管如此,对于COORD_REPLACE_OES是TRUE的各个纹理单元,纹理坐标都被点精灵的纹理坐标代替。s坐标从0到1的穿过点变化,水平的从左到右,t坐标从0到1变化,垂直的从顶到底。r和q坐标各自被常量0和1代替。

下面的公式用来计算s和t的坐标:

{03774845-0722-4A8C-9DAA-C49EB286AFC8}

{8D8C1F55-1A48-4B9A-A8A3-F835734ADE2D}

size是点的尺寸,xf和yf是整型的片元窗口坐标,xw和yw是精确的、非圆形的顶点窗口坐标。

点精灵的宽度支持必须是支持抗锯齿点的超集。不需要证明,这些宽度必须是相等的空间。如果一个不支持的宽度,它最近邻的支持宽度将会用来替代它。

3.3.2点光栅化状态

该状态需要控制由浮点值定义的点宽度组成的点光栅化,三个浮点值定义了最小、最大点尺寸和点的淡出的起始值,三个浮点值定义了距离衰减系数,一个位指定是否抗锯齿,一个位指定是否使用点精灵,一个位用于各个纹理单元的点精灵纹理坐标替代模式。

3.3.3点多重采样光栅化

如果MULTISAMPLE为enable,并且SAMPLE_BUFFERS的值是1,那么点利用如下算法来光栅化,不管点抗锯齿(POINT_SMOOTH)是enable或disable。点光栅化利用一个或多个样本点与中心在点(xw,yw)的区域为每个帧像素生成一个片元。这个区域是一个圆,当POINT_SPRITE_OES是disable时与当前点有同样的直径,当POINT_SPRITE_OES是enabled时区域的边长与当前点的宽度一样。与样本点相应的覆盖值与区域的交叉为1,其它的覆盖值是0。所有和各片元样本相应的数据都是相应的点被光栅化得到的,除了当POINT_SPRITE_OES是enabled时的纹理坐标;这些纹理坐标的计算在3.3节中描述过了。

当POINT_SPRITE_OES是disabled时,点尺寸范围和渐变数量和这些被支持的抗锯齿点是等价的。当POINT_SPRITE_OES是enabled时,被设置的支持的尺寸和没有多重采样的点精灵是等价的。

http://www.moandroid.com/?p=1033

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值