基本几何体
如果你熟悉Maya,3DstudioMax,或CINEMA4d等建模软件,会发现软件里往往有一些内置的基本形体.基本体是一些基本的几何图形如平面,球体,立方体.大多数建模软件通过单击拖拽等操作就可以创建出基本体,或修改它.当然也可以自己建,但3d建模软件里的基本体为建模者提供了一种捷径.
Papervision3D也包含一些基本形体.Papervision3D没有图形界面不能通过点击拖拽等操作来创建几何体.但在程序里却可以随时方便的使用它们.
修改Papervision3D里的几何体比3D建模软件中困难的多,还是因为没有图形界面.然而使用更加复杂的模型是可能的,Papervision3D允许你将建模软件中创建的模型导入到应用中.第8章我们将细看下从3d软件中导出模型和将模型导入到工程.
本章,我们首先花些时间来加深对定点和三角面的理解—每个3d对象的基本元素.接着,我们将认识下每一个基本几何体,尝试下如何创建并将其加入到场景中.并将探讨怎样将子对象加入到父对象而不是直接加入到场景.最后,我们将完成一个包含所探讨对象的例子程序.
本章包含:
● 3d几何体详解
● 不屑是什么意思Papervision3D如何将3d信息转入到2d屏幕
● 创建并添加基本形体
● 3d对象的嵌套
在创建形体之前,我们将仔细下3d对象的组成.同时将简单的探讨下转换3d对象到2d图形的
处理过程,称其为渲染管道.
3d对象的基本元素
日常生活中不难想象3维,而且我们一直都是3维世界的一部分.在计算机的屏幕上,3d是不同的因为屏幕只是2d的.现在通过图解来熟悉下2d屏幕里的第三维.
顶点
3d几何中,每个形体都由一组顶点(vertices)组成,常称作verts(单数:vertex),顶点是3d空间的一个点.在Flash中定义sprite的位置时,设置2个轴(x,y).顶点有三个坐标,设置z轴.3d坐标的顺序为(x,y,z.)
三角面
顶点形成三角形,称做:面,或三角面,每个三角面有3个顶点组成.一些3d程序有时允许创建一个有4个顶点组成的面,称做:四角面,但Papervision3D只能识别三角面.因为顶点通过(x,y,z)坐标确定了三角面的形状并可以三角面面向任何方向.当你绘制多个三角面并将它们依次摆
放到3d空间时,你便可以创造出任何形状.Papervision3D中图形都涉及到三角形网格.通过三角形网格创建3d对象.
下图显示了用上图的三角网格组成的形体,不过我们将其中的一个旋转了90度.虽然所有的顶点和三角形都是绘制在2d屏幕上,但却可以在屏幕上看到3d对象的宽度,高度和深度.
如果你熟悉3d建模,可能会对Papervision3D里的多边形规则感到惊讶.大多数建模软件多边形被定义成面,至少有4个角由2个或多个三角形组合而成,Papervision3D不能识别这样的多边形,也不含有Polygon类.实际上oahPapervision3D仅支持三角面或三角多边形.
通过设置顶点x,y,z的坐标,Papervision3D便知如何在2d屏幕上创建它们以便产生3d的视觉.换句话说,Papervision3D知道如何在2d空间中表示3d形体.
Papervision3D类库中,类Vertices3D负责创建顶点,TriangleMesh3D类负责创建由顶点和三角面组成的3d对象.如我们所见,用这些可很容易创建出基本体.
当顶点确定了对象的形状时,三角面则是材质的轮廓,可以是简单颜色或位图甚至视频.Papervision3D包含了各种各样的材质类,可用其创建有趣并真实的物体.前面已经涉及到
了材质,但只是简单的使用了线框和颜色等基础材质.(第4章通篇讲解如何使用材质).
渲染管道
发布工程,为了让2d屏幕出现3d视觉,Papervision3D还需要处理几个过程.将3d信息转换到2d屏幕,这个过程的顺序称为:渲染管道(rendering pipeline).Papervision3D的渲染管道为:
初始化 投影 渲染
前节中当构建好第一个应用,初始完一个球体发布后便会在屏幕上显示.现在用球体的例子说明下渲染管道.
考个会计证要多少钱初始化 这部分完成视角(viewport),场景(scene),摄影机(camera),渲染引擎(renderer)和3d对象的创建.某些对象只须创建一次.第2章在init()中创建的有默认线框材质的球体就是标准的初始化.
投影 将3d坐标转换到2d屏幕上.前面说过,3d对象由顶点组成,每个顶点有3个坐标.2d的屏幕仅有x轴和y轴,不能简单的将3d对象匹配到2d屏幕上.Papervision3D获取到每个顶点的3d坐
标并将它们投影到2d平面上,计算出在屏幕上每个顶点所处的位置.投影的过程只处理顶点,不处理三角面和材质.在球体的例子中,Papervision3D获取球体的3d顶点,每次渲染时进行如何投影到2d屏幕上的计算工作.
渲染 在屏幕绘制出图形的过程.此过程用附着的材质信息组成2d投影数据.此过程使用Flash图形API的lineTo()方法绘制三角形.为了添加材质,使用了Flash图形API的beginBitmapFill()方法.材质通常是BitmapData对象,填充到三角形后往往会被缩放及扭曲.
渲染部分不识别3d坐标.只对2d的投影感兴趣.到目前为止这部分最耗处理器.
创建并添加基本形体
Papervision3D提供了以下几种基本体:
● 平面(Plane)
● 球体(Sphere)
● 圆柱体(Cylinder)comfortable
● 圆锥体(Cone)
● 立方体(Cube)
● 箭头(Arrow)
● 上海新东方精英英语纸飞机(PaperPlane)
箭头和纸飞机的形状比其余的对象的形状稍微特殊,可能在现实应用中经常使用.从Papervision3D库刚开始时,纸飞机便是本库中的一部分,目的是为开发者提供一种用来执行
全面测试的简单对象.另一方面,纸飞机与多数3d建模软件里面的犹他茶壶(Utah teapot)的作用类似.
犹他州茶壶是一种3d模型,Martin Newell,1975年在妻子Sandra为他们的茶服务建立模型的建议下创建的.众所周知对于快速测试非常有用.原始的茶壶模型现在陈列在加拿大计算机历史博物馆中
Papervision3D里的基本形体很容易使用.我们将通过例子来说明每个基本体如何创建并如何加入到场景中.
在第2章我们写过一个模板类,所以不必一遍一遍的写基本的代码.我们已经知道了如何以模板为基础开始新工程,每当你准备动手敲一遍本书的代码时都可以这样做.可以在Fla中处理并调用你的第一个PlaneExample例子程序.如果用的是flex,flashbuilder通常是一个ActionScript工程伴随一个同名的文档类在文档类中调用.现在我们来看一下第一个基本体:P
免费日语学习lane
Plane
平面是基本体中最简单的形体.如果你不旋转它,它看起来就是一个2d矩形.只需要将其引入,创建后加入到场景即可.
前面已经建立了一个PlaneExample,现在只需要加入几行代码.
package {
import flash.events.Event;
import org.papervision3d.view.BasicView;
import org.papervision3d.objects.primitives.Plane;
public class PlaneExample extends BasicView
{
private var plane:Plane;
public function PlaneExample()
{
stage.frameRate = 40;
init();
startRendering();
}
private function init():void
{
plane = new Plane(null,300,300,1,1);
scene.addChild(plane);
}
override protected function onRenderTick (e:Event=null):void
{
RenderTick();
}
}
}
为了创建一个平面我们添加了什么代码?为了使用Plane类及属性方法,首先需要导入它.所有的基本几何体位于包org.papervision3d.objects.primitives.之后为Plane实例变量指定变量plane.使其作为类属性,不是局部变量,以确保其在构造器外可以进行访问如render方法.阿糖胞苷英文之后,通过传递一些参数到Plane构造器来创建一个Plane并使用addChild()将其添加到场景中.如果我们发布此例子,应该可以看到有2个三角面组成的简单plane.
科比退役信
现在看一下,我们传递到Plane构造器的5个参数:
| 参数 | 数据类型 | 默认值 | 说明 |
1 | material | MaterialObject3D | null | 应用到plane的材质 |
2 | width | Number | 瑜伽功法0 | 学习淘宝设置plane的width |
3 | height | Number | 0 | 设置plane的height |
4 | gmentsW | Number | 0 | 设置水平段的数量 |
5 | SegmentsH | Number | 0 | 设置竖直段的数量 |
| | | | |
例子中material为null,将应用默认的线框材质WireframeMaterial.第5,6个参数定义了段的数量.用下图来说明:
左侧的plane有一个宽度段和一个高度段.中间的有2个宽度段和一个高度段.右侧的plane有2个宽度和2个高度段.正如所见,每增加一个宽度或高度段会多2个三角面片.
在plane上附着一个图片,有一个常见的问题,当旋转plane时图片会被扭曲.可以通过增加段的数量来避免此问题.增加段数的同时也必须加倍小心.增加的段数越多,需要消耗更多的渲染能力.太多的三角面片会导致Flash player很难控制此对象.通常来说整个场景的段数总数最好在3000以下.