- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第四章景深排序Z排序
第四章 景深排序 Z-排序
正确的排序场景中的3D对象,是能否正确的在屏幕上画出场景的关键。Away3D使用画家算法在屏幕上画出组成场景的元素,在大多数时间里,Away3D能以正确的排序画出这些元素显示场景,可能有些读者认为:这样的过程成是很容易的。然而在有些情形下,对在场景中3D对象的Away3D的排序作调整是必须的。这一章 展示了这样的情形,并介绍了能手工改正排序过程的方法。
Away3D也包含了一些附加的渲染器,它能用于自动地调整3D对象在场景中的排序。展示出这些渲染器,并探索了它们可能的影响Away3D应用程序执行的性能。
这一章涵盖以下的内容:
画家算法
如何排序场景
如何影响或强迫3D对象的排序次序
一些附加的渲染器
4-1 画家算法
画家算法参考了被雇用的画家绘画技法,在这种技法里,场景里最远的部分首先画出来,而后场景中较近的部分,逐次地画在它先一幅的上面。下面的图像,来自维基有关文章,显示出绘画采用的一些步骤画出野外的景象。
景象中最远的背景山,山首先画出,草地和灌木而后画出,最后,画出的树林覆盖在它们上面。
4-1-1 Z-排序或景深排序
Z-排序或景深排序是一种用于排序组成3D对象元素的技术,排序是根据在用照相机观察它们时,它们的远近情况而排列的。而后允许这些3D对象元素用画家算法,以这样的次序:从场景中最远的背景开始到最近的背景顺序描绘到屏幕上。
在大多数情况下,这个算法的工作是好的,并没有附加的必要步骤以改正后的顺序画出3D对象元素。然而有些情形下,这个算法是失败的,为理解画家算法失败的情形,首先我们看看组成一个3D对象的元素在场景里是如何排序的。
4-2 场景排序
场景中每一个元素的距离用一单个数来表示,叫景深,或叫z深度,计算景深,使用组成该元素的每个顶点,沿照相机本地坐标系统z轴的位置的平均值表示。一个很容易的方式来想象照相机本地空间,这就是设想,照相机坐落在原点,并直接朝z轴的正方向,在下面的图中,阐明了这一情形。
组成三角形的各顶点的坐标值,标记在图里面,这些坐标值是用于照相机的本地空间里的,为计算三角形的景深,z深度,我们取这些坐标值的z分量(即是:110,100,和90),取其平均值取整最后是100。
即使各顶点的深度范围是从90到110,以后用这单一的值100作为此三角形的景深z深度。既然单一的z深度的平均值不能精确的描绘场景内原始的相对位置,那么在排序3D对象元素时,根据它们的景深z深度就可导致与实际不一致的情形。
为证实3D对象元素不能依景深正确的排序这一情况,让我们新建一个叫ZSorting的例子。在初始化场景函数intScene()中,我们将建立两个三角形,这两个三角形从照相机的视角来看,一重叠了另一个。
package
{
Import away3d.primitives.Triangle;
public class ZSorting extends Away3DTemplate
{
public function ZSorting()
{
super();
}
protected override function initScene():void
{
super.initScene();
camera.z=0;
var triangleA:Triangle=new Triangle(
{
x: -30,
y: 0,
z: 500,
rotationY: -5,
yUp: false,
bothsides: true
}
);
var triangleB:Triangle=new Triangle(
{
x: 30,
y: 0,
z: 499,
rotationY: 60,
文档评论(0)