0

我从awayd3D开始,在4.0beta版本上没有找到解决方案,我可以向你求助。

我在互联网上做了很多研究,希望找到关于灯光使用的解释,但很少有与每个版本 3 相关的解释。

我意识到这个场景(http://goupix.com/test/)。您可以使用 WASD 键或箭头键来移动。

为了实现这个场景,我有几个文件: Exploration.as:创建场景、相机和灯光。光:

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:使用为我的装饰生成的表 ClassGenerateobjet.as:由 ClassGeneratemap 调用并将元素放置在场景中

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

我真的不知道如何使用我放置的灯。我不知道这是否确实是一种正确的光。

我希望你能帮助我。谢谢

4

1 回答 1

0

从 Away3d 的 GitHub 中提取示例会有所帮助。

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;
    }
于 2012-05-20T01:50:50.447 回答