第二个问题:创建了一个立方体后,怎样为为这个立方体添加材质?
首先最简单的材质,我们会想到颜色,颜色是最容易理解。因此我们在这里应该学会如何为我们的物体添加材质。
- package
- {
- import flash.display.Sprite;
- import flash.events.*;
- import sandy.core.Scene3D;
- import sandy.core.scenegraph.*;
- import sandy.primitive.*;
- import sandy.core.data.*;
- import sandy.materials.*;
- import sandy.materials.attributes.*;
- public class My3D2 extends Sprite
- {
- private var scenne:Scene3D;
- private var camera:Camera3D;
- private var ranY:Number=0.5;
- private var box:Box;
- public function My3D2()
- {
- camera=new Camera3D(400,400);//设定摄影机大小和位置
- camera.z=-300;
- var root:Group=createScene();
- scenne=new Scene3D("scene1",this,camera,root);//创建带摄像机的场景
- addEventListener(Event.ENTER_FRAME,Run);
- }
- private function createScene():Group
- {
- var g:Group=new Group();
- box=new Box("box",100,100,100);
- var materialAttr:MaterialAttributes = new MaterialAttributes(
- new LineAttributes( 0.5, 0x2111BB, 0.4 ),
- new LightAttributes( true, 0.1)
- );//创建材质属性,线性光,
- var material:Material = new ColorMaterial( 0xFFCC33, 1, materialAttr );//创建颜色材质
- material.lightingEnable = true;
- var app:Appearance = new Appearance( material );//为物体创建材质表面
- box.rotateX=10;
- box.rotateY=0;
- box.appearance = app;//指定材质表面
- g.addChild(box);
- return g;
- }
- private function Run(event:Event):void
- {
- scenne.render();
- box.rotateX+=1;//让立方体会在x轴上旋转
- box.rotateY+=1;//让立方体会在y轴上旋转
- }
- }
- }
说明:创建了立方体后,我们可以为我们的立方体添加材质或者指定立方体的颜色属性,这时候我们需要使用到显示颜色材质的类和函数,sandy为我们提供了一个类。
- var materialAttr:MaterialAttributes = new MaterialAttributes(
- new LineAttributes( 0.5, 0x2111BB, 0.4 ),
- new LightAttributes( true, 0.1)
- );//创建材质属性,线性光,
- var material:Material = new ColorMaterial( 0xFFCC33, 1, materialAttr );//创建颜色材质
- material.lightingEnable = true;
- var app:Appearance = new Appearance( material );//为物体创建材质表面
ColorMaterial( 0xFFCC33, 1, materialAttr );//创建颜色材质,
参数一,指定颜色, 透明度,材质属性,这个参数默认为null,我们为这个立方体制作一个可见光和线性光
ColorMaterial | () | constructor |
//函数原型
public function ColorMaterial(p_nColor:uint = 0x00, p_nAlpha:Number = 1, p_oAttr:MaterialAttributes = null)
Creates a new ColorMaterial.
创建了颜色的属性,为了指定物体,这时候还要制作一个表面赋给立方体。
var app:Appearance = new Appearance( material );//为物体创建材质表面
box.appearance = app;//指定材质表面,
最后场景渲染;
scenne.render();
这里就创造出一个具有颜色的立方体了