How to use the lights in multi class in away3d 4.0 Beta?

1.5k views Asked by At

I started in awayd3D and have not found a solution on a version 4.0beta, I can appeal to you.

I have done many research on the internet hoping to find an explanation of the use of lights but the few explanations related to each version 3.

I realize this scene (http://goupix.com/test/). You can use the WASD keys or arrow keys to move.

To achieve this scene, I have several files: Exploration.as: Creates the scene, the camera and light. light:

PointLight light = new ();
light.x = -2000;
light.y = 1000;
light.z = -1000;
light.color 0xffeeaa = / / Here, select the new color of the light source
view.scene.addChild (light);

ClassGeneratemap.as: uses a table generated for my decor ClassGenerateobjet.as: Called by ClassGeneratemap and place the elements in the scene

public function onAssetComplete(event:AssetEvent):void {
    if ( event.asset.assetType == AssetType.MESH && event.asset.assetNamespace == token ) {
        AssetLibrary.removeEventListener(AssetEvent.ASSET_COMPLETE, onAssetComplete);               
        trace("position : " + posX + " : " + posY );
        mesh = event.asset as Mesh;
        mesh.geometry.scale(1);
        mesh.x = -posX * instData.scale;
        mesh.z = posY * instData.scale;
        mesh.castsShadows = true ;
        //trace("position : " + mesh.x + " : " + mesh.z );
        instExploration.scene.addChild( mesh );
    }//End If
}//End onAssetComplete

I really do not see how to use the light that I placed. I do not know if indeed this is the right kind of light.

I hope you can help me. Thank you

1

There are 1 answers

2
Jason Sturges On

Pulling examples from Away3d's GitHub would help.

https://github.com/away3d/away3d-examples-fp11

    /**
     * Initialize the lights
     */
    private function initLights():void
    {
        moonLight = new DirectionalLight();
        moonLight.position = new Vector3D(3500, 4500, 10000); // Appear to come from the moon in the sky box.
        moonLight.lookAt(new Vector3D(0, 0, 0));
        moonLight.diffuse = 0.5;
        moonLight.specular = 0.25;
        moonLight.color = 0xFFFFFF;
        scene.addChild(moonLight);

        cameraLight = new PointLight();
        cameraLight.diffuse = 0.25;
        cameraLight.specular = 0.25;
        cameraLight.color = 0xFFFFFF;
        cameraLight.radius = 1000;
        cameraLight.fallOff = 2000;
        scene.addChild(cameraLight);

        skyLight = new DirectionalLight();
        skyLight.diffuse = 0.1;
        skyLight.specular = 0.1;
        skyLight.color = 0xFFFFFF;
        scene.addChild(skyLight);

        lightPicker = new StaticLightPicker([moonLight, cameraLight, skyLight]);

        //create a global fog method
        fogMethod = new FogMethod(0, 200000, 0x000000);
    }

    private function createTreeShadow(x:Number, z:Number):void
    {
        // Paint on the terrain's shadow blend layer
        var matrix:Matrix = new Matrix();
        var dx:Number = (x/terrainWidth + 0.5)*512 - 8;
        var dy:Number = (-z/terrainDepth + 0.5)*512 - 8;
        matrix.translate(dx, dy);
        var treeShadowBitmapData = new BitmapData(16, 16, false, 0x0000FF);
        treeShadowBitmapData.draw(createGradientSprite(16, 16, 0, 1), matrix);
        blendBitmapData.draw(treeShadowBitmapData, matrix, null, BlendMode.ADD);

        // Update the terrain.
        blendTexture.bitmapData = blendBitmapData; // TODO: invalidation routine not active for blending texture
    }

    /**
     * Initialize the material
     */
    private function initMaterials():void
    {
        //create skybox texture
        cubeTexture = new BitmapCubeTexture(new EnvPosX().bitmapData, new EnvNegX().bitmapData, new EnvPosY().bitmapData, new EnvNegY().bitmapData, new EnvPosZ().bitmapData, new EnvNegZ().bitmapData);

        //create tree material
        trunkMaterial = new TextureMaterial(new BitmapTexture(new TrunkDiffuse().bitmapData));
        trunkMaterial.normalMap = new BitmapTexture(new TrunkNormals().bitmapData);
        trunkMaterial.specularMap = new BitmapTexture(new TrunkSpecular().bitmapData);
        trunkMaterial.diffuseMethod = new BasicDiffuseMethod();
        trunkMaterial.specularMethod = new BasicSpecularMethod();
        trunkMaterial.addMethod(fogMethod);
        trunkMaterial.lightPicker = lightPicker;

        //create leaf material
        leafMaterial = new TextureMaterial(new BitmapTexture(new LeafDiffuse().bitmapData));
        leafMaterial.addMethod(fogMethod);
        leafMaterial.lightPicker = lightPicker;

        //create height map
        heightMapData = new BitmapData(512, 512, false, 0x0);
        heightMapData.perlinNoise(200, 200, 4, uint(1000*Math.random()), false, true, 7, true);
        heightMapData.draw(createGradientSprite(512, 512, 1, 0));

        //create terrain diffuse method
        blendBitmapData = heightMapData.clone();
        blendBitmapData.threshold(blendBitmapData, blendBitmapData.rect, destPoint, ">", 0x444444, 0xFF00FF00, 0xFFFFFF, true);
        blendBitmapData.colorTransform(blendBitmapData.rect, new ColorTransform(1, 1, 1, 1, 255, 0, 0, 0));
        blendBitmapData.applyFilter(blendBitmapData, blendBitmapData.rect, destPoint, new BlurFilter(16, 16, 3));
        blendTexture = new BitmapTexture(blendBitmapData);
        terrainMethod = new TerrainDiffuseMethod([new BitmapTexture(new Grass().bitmapData), new BitmapTexture(new Rock().bitmapData), new BitmapTexture(new BitmapData(512, 512, false, 0x000000))], blendTexture, [1, 20, 20, 1]);

        //create terrain material
        terrainMaterial = new TextureMaterial(new BitmapTexture(heightMapData));
        terrainMaterial.diffuseMethod = terrainMethod;
        terrainMaterial.addMethod(new FogMethod(0, 200000, 0x000000)); //TODO: global fog method affects splats when updated
        terrainMaterial.lightPicker = lightPicker;
    }