Away3D & Directional Light w/ Rotating Meshes

Posted by seethru on Game Development See other posts from Game Development or by seethru
Published on 2013-07-03T14:30:29Z Indexed on 2013/07/03 17:20 UTC
Read the original article Hit count: 402

Filed under:
|

This is likely a stupid error but I can't seem to find what I've done wrong.

I've got a simple scene with 10 cylinders rotating at a default speed.

If I grab one of these cylinders I can rotate it in the opposite direction or at a greater speed.

I have a single directional light in the scene.

It would appear that the directional light is only calculated at initialization and not on further frames. The shadow created by the light rotates with the cylinder giving the impression that the light is rotating when it isn't.

Camera & Light Initialization

_view = new View3D();
addChild(_view);

_view.antiAlias = 4;
_view.backgroundColor = 0xFFFFFF;
_view.camera.z = -850;
_view.camera.y = 0;
_view.camera.x = 0;
_view.camera.lookAt(new Vector3D());

_view.camera.lens = new PerspectiveLens(15);
_view.mousePicker = PickingType.RAYCAST_BEST_HIT;

_light = new DirectionalLight();
_light.z = -850;
_light.direction = new Vector3D(1, 1, 1);
_light.color = 0xFFFFFF;
_light.ambient = 0.1;
_light.diffuse = 0.7;
_view.scene.addChild(_light);

Mesh and Material creation

var material:TextureMaterial = new TextureMaterial(createPow2Texture(sprite, _colors[i]) , true, false, true);
material.animateUVs = true;
material.lightPicker = _lightPicker;

cylinder = new Mesh(new CylinderGeometry(radius, radius, 13, 70, 1, true, true), material);
cylinder.subMeshes[0].scaleU = spriteWidth / sprite.width;
cylinder.y = y;
cylinder.mouseEnabled = true;
cylinder.pickingCollider = PickingColliderType.AS3_BEST_HIT;
cylinder.addEventListener(MouseEvent3D.MOUSE_OVER, onMouseOverMesh);
cylinder.addEventListener(MouseEvent3D.MOUSE_MOVE, onMouseOverMesh);
cylinder.addEventListener(MouseEvent3D.MOUSE_OUT, onMouseOutMesh);
_cylinders.push(cylinder);

Frame

private function onEnterFrame(event:Event):void
{
    for each (var mesh:Mesh in _cylinders)
    {
        if (mesh == _mouseOverMesh)
            continue;

        mesh.rotationY += 0.25;
    }
    _view.render();
}

© Game Development or respective owner

Related posts about flash

Related posts about actionscript-3