Papervision3D入门第3步

这一篇,我们将一起学习使用几个基本的PV3D内置模型,PV3D的内置模型有平面,球体,立方体,柱状体,等等。这些模型都是些最基本的形状,可能对于开发比较复杂的3D应用没有帮助,但是学习使用它们可以帮助我们深入学习PV3D,在我们做后续试验的时候可以有实验对象 :-)

    我们从球体开始。创建球体对象的代码如下:



1
2
3
4
5
// 创建一个线框材质
_material = new WireframeMaterial(0x000000);

//直径80, 高度和宽度的精度为10
_displayObj = new Sphere(_material,  80, 10, 10);

    直径就很好理解了,精度决定了球的显示效果,大家可以用不同精度试试看 :-)

    显示效果:
[全屏查看]


    完整的代码:




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62

package {
    import flash.display.Sprite;
    import flash.events.Event;

    import org.papervision3d.cameras.Camera3D;
    import org.papervision3d.scenes.MovieScene3D;
    import org.papervision3d.materials.MaterialsList;
    import org.papervision3d.materials.WireframeMaterial;
    import org.papervision3d.core.proto.MaterialObject3D;

    import org.papervision3d.objec ts.DisplayObject3D;
    import org.papervision3d.objec ts.Sphere;

    [SWF(width='200',height='200',backgroundColor='0xFFFFFF',frameRate='30')]
    public class Main extends Sprite
    {
        private var _container :Sprite;
        private var _scene :MovieScene3D;
        private var _camera :Camera3D;

        private var _material:MaterialObject3D;

        private var _displayObj:DisplayObject3D;

        public function Main()
        {
            Init3D();
        }

        private function Init3D():void {            
            // 创建3D舞台的容器
            _container = new Sprite;
            _container.x = 100;
            _container.y = 100;
            addChild( _container );

            // 创建3D舞台
            _scene = new MovieScene3D( _container );

            // 创建摄像头
            _camera = new Camera3D();
            _camera.z = -500;
            _camera.zoom = 5;

            // 创建一个线框材质
            _material = new WireframeMaterial(0x000000);

            _displayObj = new Sphere(_material,  80, 10, 10);

            _scene.addChild(_displayObj);

            this.addEventListener(Event.ENTER_FRAME, OnEnterFrame);
        }

        private function OnEnterFrame(event:Event):void {   
            _displayObj.rotationX += 5;
            _displayObj.rotationY += 5;   

            _scene.renderCamera(_camera);
        }
    }
}


    后面的代码我就不重复了,变化的部分都是_material = new WireframeMaterial(0×000000); 和 _scene.addChild(_displayObj); 两个语句之间的3D显示对象初始化代码,大家应该明白怎么改。后面我只写内置模型类的用法。


    创建立方体比创建平面对象和球体复杂些,需要给立方体对象一个材质列表,告诉它每个面用什么材质。代码如下:




1
2
3
4
5
6
7
8
9
10
11

var materialList:MaterialsList = new MaterialsList();

//六个面的材质        
materialList.addMaterial(new WireframeMaterial(0xFF0000), "top");
materialList.addMaterial(new WireframeMaterial(0xFFFF00), "bottom");
materialList.addMaterial(new WireframeMaterial(0x0000FF), "front");
materialList.addMaterial(new WireframeMaterial(0x00FF00), "back");
materialList.addMaterial(new WireframeMaterial(0x000000), "left");
materialList.addMaterial(new WireframeMaterial(0xCC00CC), "right");

_displayObj = new Cube(materialList, 128, 128, 128, 2, 2, 2);


    显示效果:
[全屏查看]


    大家可以试着把Cube的构造函数参数做些调整,看看显示出来是什么样的。


柱状体的初始化代码:



1
2
3
 
//直径40, 高度100, 显示精度10,上底面直径40
_displayObj = new Cylinder(_material, 40, 100, 10, 10, 40);

    上面代码显示出来是一个圆柱体,如果你把上底面直径设置成1,就变成一个锥形体了 :-)


    显示效果(左:上下底面直径40,右:上底面直径1):
[全屏查看]
[全屏查看]


    呵呵,这一篇的内容好像太过简单了。。。。几个后面试验可能会用到的内置对象就这样演示完了。大家可以自己调调构造函数的参数,看看不同效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值