forked from: forked from: forked from: forked from: forked from: RGBCube for AS3
forked from forked from: forked from: forked from: forked from: RGBCube for AS3 (diff: 1)
ActionScript3 source code
/**
* Copyright arere ( http://wonderfl.net/user/arere )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/5IFr
*/
// forked from arere's forked from: forked from: forked from: forked from: RGBCube for AS3
// forked from arere's forked from: forked from: forked from: RGBCube for AS3
// forked from arere's forked from: forked from: RGBCube for AS3
// forked from kotobuki's forked from: RGBCube for AS3
// forked from kotobuki's RGBCube for AS3
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.*;
[SWF(backgroundColor="0x808080")]
public class MeasuringTheTilt_Accelerometer extends BasicView {
// 球
private var sphere:Sphere;
private var fioSystem:Fio;
private var fio:IOModule;
// 加速度センサのx軸を接続したアナログピン
private var xAxisPin:Pin;
// 加速度センサのy軸を接続したアナログピン
private var yAxisPin:Pin;
public function MeasuringTheTilt_Accelerometer() {
var config:Configuration = Fio.FIRMATA;
// 必要ないアナログ入力をすべて出力にセットする
// これによりデータの転送量が少なくなりレスポンスが良くなる
// (ArduinoではA0、A1…はD14、D15に対応する)
config.setDigitalPinMode(17, OUT); // A3
config.setDigitalPinMode(18, OUT); // A4
config.setDigitalPinMode(19, OUT); // A5
config.setDigitalPinMode(20, OUT); // A6
config.setDigitalPinMode(21, OUT); // A7
fioSystem = new Fio([1], config);
fio = fioSystem.ioModule(1);
xAxisPin = fio.analogPin(0);
yAxisPin = fio.analogPin(1);
// 2つの軸のそれぞれにフィルタをセット
// ・細かな変動を取り除くための移動平均フィルタ
// ・-1Gから1Gまでの変化を-1から1までにスケーリングするためのフィルタ
xAxisPin.addFilter(new Convolution(Convolution.MOVING_AVERAGE));
xAxisPin.addFilter(new Scaler(0.30, 0.70, -1, 1));
yAxisPin.addFilter(new Convolution(Convolution.MOVING_AVERAGE));
yAxisPin.addFilter(new Scaler(0.30, 0.70, -1, 1));
/* 立方体のためのマテリアルを準備
var materialsList:MaterialsList = new MaterialsList();
materialsList.addMaterial(new ColorMaterial(0xFF0000), "front");
materialsList.addMaterial(new ColorMaterial(0x00FF00), "back");
materialsList.addMaterial(new ColorMaterial(0x0000FF), "right");
materialsList.addMaterial(new ColorMaterial(0xFFFF00), "left");
materialsList.addMaterial(new ColorMaterial(0xFF00FF), "top");
materialsList.addMaterial(new ColorMaterial(0x00FFFF), "bottom");*/
// 立方体のインスタンスを生成
sphere = new sphere(null,200,12,12);
scene.addChild(sphere);
// カメラをセット
camera.x = 0;
camera.y = 0;
camera.z = -500;
camera.focus = 500;
camera.zoom = 1;
// レンダリング開始
startRendering();
}
override protected function onRenderTick(event:Event = null):void {
// 立方体の角度をセット
sphere.rotationZ = Math.asin(yAxisPin.value) / Math.PI * 180;;
sphere.rotationX = Math.asin(xAxisPin.value) / Math.PI * 180;;
// シーンをレンダリング
renderer.renderScene(scene, camera, viewport);
}
}
}
