In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: Prototyping Lab: Recipe 9.4

/**
 * Copyright izayoi.net ( http://wonderfl.net/user/izayoi.net )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/mL1I
 */

// forked from kotobuki's Prototyping Lab: Recipe 9.4
package {
  import flash.events.Event;

  import org.papervision3d.cameras.*;
  import org.papervision3d.materials.*;
  import org.papervision3d.materials.utils.MaterialsList;
  import org.papervision3d.objects.*;
  import org.papervision3d.objects.primitives.Cube;
  import org.papervision3d.scenes.*;
  import org.papervision3d.view.*;

  import funnel.*;
  import funnel.gui.*;

  public class MeasuringTheTilt extends BasicView {
    // Arduino
    private var arduino:Arduino;

    // 加速度センサのx軸に接続したピン
    private var xAxisPin:Pin;

    // 加速度センサのy軸に接続したピン
    private var yAxisPin:Pin;

    private var zAyisPin:Pin;

    // 立方体
    private var cube:Cube;

    public function MeasuringTheTilt() {
      // Arduinoのインスタンスを生成
      arduino = new Arduino(Arduino.FIRMATA);

      // x軸とy軸に接続したピンを初期化
      xAxisPin = arduino.analogPin(3);
      yAxisPin = arduino.analogPin(4);
      zAyisPin = arduino.analogPin(5);

      // x軸とy軸に細かな変動を取り除くためのConvolutionフィルタと
      // スケーリングするためのScalerフィルタをセットする
      xAxisPin.addFilter(new Convolution(
                         Convolution.MOVING_AVERAGE));
      xAxisPin.addFilter(new Scaler(0.3, 0.7, -1, 1));
      yAxisPin.addFilter(new Convolution(
                         Convolution.MOVING_AVERAGE));
      yAxisPin.addFilter(new Scaler(0.3, 0.7, -1, 1));
      zAyisPin.addFilter(new Convolution(
                         Convolution.MOVING_AVERAGE));
      zAyisPin.addFilter(new Scaler(0.3, 0.7, -1, 1));
      // 確認用のGUIを生成してセット
      var gui:ArduinoGUI = new ArduinoGUI();
      addChild(gui);
      arduino.gui = gui;

      // 立方体のためのマテリアルを準備
      var mat:MaterialsList = new MaterialsList();
      mat.addMaterial(new ColorMaterial(0xFF0000), "front");
      mat.addMaterial(new ColorMaterial(0x00FF00), "back");
      mat.addMaterial(new ColorMaterial(0x0000FF), "right");
      mat.addMaterial(new ColorMaterial(0xFFFF00), "left");
      mat.addMaterial(new ColorMaterial(0xFF00FF), "top");
      mat.addMaterial(new ColorMaterial(0x00FFFF), "bottom");

      // 立方体のインスタンスを生成
      cube = new Cube(mat, 400, 400, 400);
      scene.addChild(cube);

      // レンダリング開始
      startRendering();
    }

    override protected function onRenderTick(e:Event = null):void {
      // 立方体の角度をセット
      cube.rotationZ
        = Math.asin(yAxisPin.value) * 180 / Math.PI;
      cube.rotationX
        = Math.asin(xAxisPin.value) * 180 / Math.PI;
      cube.rotationY
        = Math.asin(zAyisPin.value) * 180 / Math.PI;

      // シーンをレンダリング
      renderer.renderScene(scene, camera, viewport);
    }
  }
}