//背景
ofBackground(color);
//スムース
ofEnableSmoothing();
ofDisableSmoothing();
//円の解像度
ofSetCircleResolution(resolution);
//図形を色で埋める
ofFill();
//色の指定
ofSetHexColor(0xb5de10);
//Text
ofDrawBitmapString("str",x,y);
//ポリゴンモードの指定
ofSetPolyMode(OF_POLY_WINDING_ODD);
//アルファブレンド用の設定
ofEnableAlphaBlending();
ofDisableAlphaBlending();
//線幅
ofSetLineWidth(size);
//描画
ofBeginShape();
//ここに以下の頂点系の処理を書く
ofEndShape(bool bClose=false);
//頂点
ofVertex(x,y);
//Curve用の頂点(指定した頂点を通るようにカーブを作成可能)
ofCurveVertex(x,y);
//Circle
ofDrawCircle(x,y,r /*円のサイズ*/);
ofDrawEllipse(x,y,w,h);
//Hole
ofNextContour(true);
//中心位置変更
ofPushMatrix();
ofTranslate(x,y);
ofPopMatrix();
//Scale変更
ofScale(x,y);
Raspberry Pi 2 & openFrameworks でI2C接続のジャイロセンサー(InvenSense ITG-3200)を使う
Raspberry Pi2 & openFrameworksでI2C接続のジャイロセンサーを使ってみた
InvenSense ITG-3200のブレイクアウトボードをSwitchScienceで購入し、セッティングやコードは、こちらのページを参考にしました。Raspberry PiにおけるwiringPiとI2C自体のセッティングは、ググると色々あるのでopenFrameworksの部分のみ。wiringPiI2CSetupを使ったらとにかく楽でした。
openFrameworksのコード
#include "ofApp.h"
#include "wiringPiI2C.h"
using namespace std;
const auto itgAddress = 0x69;
const char WHO_AM_I = 0x00;
const char SMPLRT_DIV= 0x15;
const char DLPF_FS = 0x16;
const char GYRO_XOUT_H = 0x1D;
const char GYRO_XOUT_L = 0x1E;
const char GYRO_YOUT_H = 0x1F;
const char GYRO_YOUT_L = 0x20;
const char GYRO_ZOUT_H = 0x21;
const char GYRO_ZOUT_L = 0x22;
const char DLPF_CFG_0 = 1<<0;
const char DLPF_CFG_1 = 1<<1;
const char DLPF_CFG_2 = 1<<2;
const char DLPF_FS_SEL_0 = 1<<3;
const char DLPF_FS_SEL_1 = 1<<4;
auto fd = -1;
//--------------------------------------------------------------
void ofApp::setup(){
//I2C Setting
fd = wiringPiI2CSetup(itgAddress);
cout << "fd:" << fd << "\n";
cout << "WHO_AM_I:" << wiringPiI2CReadReg16(fd,WHO_AM_I) << "\n";
cout << "Write DLPF_FS:" << wiringPiI2CWriteReg8(fd,DLPF_FS,(DLPF_FS_SEL_0|DLPF_FS_SEL_1|DLPF_CFG_0)) << "\n";
cout << "Write SMPLRT_DIV:" << wiringPiI2CWriteReg8(fd,SMPLRT_DIV,9) << "\n";
ofSetFullscreen(true);
}
//--------------------------------------------------------------
void ofApp::update(){
}
//--------------------------------------------------------------
void ofApp::draw(){
ofPushMatrix();
ofTranslate(0,ofGetHeight()/2);
ofBackground(0);
function getValue = [](char H,char L){
int data = 0;
data = static_cast(wiringPiI2CReadReg8(fd,H)) << 8;
data += static_cast(wiringPiI2CReadReg8(fd,L));
return data;
};
ofSetColor(255);
const auto MAX_DATA = 10000;
auto x = getValue(GYRO_XOUT_H,GYRO_XOUT_L);
ofRect(0,0,ofGetWidth()/3.,ofMap(x,-MAX_DATA,MAX_DATA,ofGetHeight()/2.,-ofGetHeight()/2.));
ofTranslate(ofGetWidth()/3,0);
auto y = getValue(GYRO_YOUT_H,GYRO_YOUT_L);
ofRect(0,0,ofGetWidth()/3,ofMap(y,-MAX_DATA,MAX_DATA,ofGetHeight()/2,-ofGetHeight()/2));
ofTranslate(ofGetWidth()/3,0);
auto z = getValue(GYRO_ZOUT_H,GYRO_ZOUT_L);
ofRect(0,0,ofGetWidth()/3,ofMap(z,-MAX_DATA,MAX_DATA,ofGetHeight()/2,-ofGetHeight()/2));
ofPopMatrix();
}
Raspberry Pi用のopenFrameworksがNightly Buildでしか動かせなかった。けれど、openFrameworks0.9.0からC++11になってたのでfunctionやラムダ式を使ってみました。
Raspberry Pi2 & openFrameworks TIPS
ofxRPiCameraVideoGrabber
Sampleをmakeすると
could not convert ‘ofGLProgrammableRenderer::TYPE’ from ‘const string {aka const std::basic_string<char>}’ to ‘std::shared_ptr<ofBaseRenderer>’ ofSetCurrentRenderer(ofGLProgrammableRenderer::TYPE);
とでる。
こちらを参考にmain.cppを以下に変更
int main{
ofGLESWindowSettings settings;
settings.width = 1280;
settings.height = 720;
settings.setGLESVersion(2);
ofCreateWindow(settings);
ofRunApp( new testApp());
}
でmake成功した
makeオプション指定を楽にする
makeする時にいちいち、オプション指定するのが面倒くさいので
cd
ls -a
で表示される
.profile
に
nano .profile
してnanoでオープンして
export MAKEFLAGS=-j4 PLATFORM_VARIANT=rpi2
と書き込むと
openFrameworksのExampleフォルダ等で
make
するだけで、コンパイルが走る!
GPIOの番号を表示
gpio readall
openFrameworksからgpioを使う場合は、wiringPiを使うようです。GPIOの番号は、Raspberry PiとwiringPiで割当が違うようで番号を調べてる中で、上記のコマンドを見つけました。
接続されているI2Cデバイスを探す
i2cdetect -y 1
addonの追加
addonフォルダにて
git clone 使いたいofxAddonのリポジトリURL
プロジェクトフォルダのaddons.makeにAddon名を記入
ofxAddon
debug
Program received signal SIGILL, Illegal instruction と出て起動時に止まってしまう問題。gdbで以下のコマンドを打つと取り敢えず回避できる。
handle SIGILL nostop
handle SIGINT nonstop
#マルチネ10 随筆Mix
マルチネレコード!! #マルチネ10 pic.twitter.com/5jLP8GEK6m
— mirrorboy (@mirrorboy) 2015, 8月 2
マルチネ絡みで、kzさんのTell Your Worldの歌詞に「たくさんの天は線になって 」ってあるけれど、マルチネのレーベルメイトの皆様とのステージは、それを体現している。普段Twitterで、お互い見合ってるだけだったりするけど、同じハレの舞台に並んでるのはユカイである。
社長打ち上げられた #マルチネ10 pic.twitter.com/48ZVPe92aI
— mirrorboy (@mirrorboy) 2015, 8月 2
ありがとう と @tomad に言いたい。Yo! そして天まで飛ばそう
Budda Brandだ #マルチネ10 https://t.co/cYhJgkkDki
— mirrorboy (@mirrorboy) 2015, 8月 2
#マルチネ10 part.2 https://t.co/MLhzSpozZf
— mirrorboy (@mirrorboy) 2015, 8月 2
KAGAMI #マルチネ10 https://t.co/NmJPD6Pith
— mirrorboy (@mirrorboy) 2015, 8月 2
DJの手にかかれば音楽は、生き続けるんだなって思う。その事実は作曲者だけでなく、DJをする側の希望にもなっている。Still Aliveってやつだ。
DJ Newtown is still aliveなんだ!! #マルチネ10 https://t.co/L3Irzx7iHj
— mirrorboy (@mirrorboy) 2015, 8月 2
24時間ずっと!!! #マルチネ10 https://t.co/7siIKyYNZT
— mirrorboy (@mirrorboy) 2015, 8月 2
ほ、ほーっ、ホアアーッ!! ホアーッ!! #マルチネ10 https://t.co/lKYmjChPiQ
— mirrorboy (@mirrorboy) 2015, 8月 2
Flying between Starやで⭐️ お世話になりました #マルチネ10 https://t.co/Iy0wicdtHp
— mirrorboy (@mirrorboy) 2015, 8月 2
数年前までは、DJ newtownをどうやって掛けるかに終始していた気がする。そしてMaltine RecordsからリリースしたJean Seberg EPは、DJ newtownへのリスペクトだった。もちろん、好きすぎるモノがあると、そこで思考は停止してしまうので、トラック制作で周りの方々を乗り越える事は全く出来なかった。徐々にプログラムやインタラクションデザインに興味が移っていった。
パズラムだー!ゴリラ被りしてたw #マルチネ10 https://t.co/zj72f6LdhK
— mirrorboy (@mirrorboy) 2015, 8月 2
最近は猿のお面被ってプレイしてるんだけれど、パズラムさんチームと完全に被ってたw ごめん!我々は「続・猿の惑星」ネタであって、カブチネ以来マルチネのイベントご無沙汰してたので、気がついてなかったのです。それじゃあ次、何被るんだ?という話しになったので、核爆弾的には、ミュータントになるのが良いかななんて思う。変化をするのは嫌じゃないというか、逆に脅迫概念みたいなのがあって宿命かなと思う。Change of Life。
DJしてたらSeeed StudioのEric Pan氏と名刺交換できた! #マルチネ10 pic.twitter.com/QO1o0KZFjG
— mirrorboy (@mirrorboy)
マルチネレコーズは、日本的な文脈をいかしたカットアップハウス(≒ナードコア)を再発見したところが一番好きだったし、コバルト爆弾αΩとしてはJ-Pop×テクノもしくは、渋谷系×秋葉系という試みと呼応して、DENPA!!!→Maltine→MOGRAが生まれていくダイナミックで楽しい時を過ごさせて貰ったので関係者には感謝している。
DJ Newtown is still aliveなんだ!! #マルチネ10 https://t.co/L3Irzx7iHj
— mirrorboy (@mirrorboy) 2015, 8月 2
24時間ずっと!!! #マルチネ10 https://t.co/7siIKyYNZT
— mirrorboy (@mirrorboy) 2015, 8月 2
ほ、ほーっ、ホアアーッ!! ホアーッ!! #マルチネ10 https://t.co/lKYmjChPiQ
— mirrorboy (@mirrorboy) 2015, 8月 2
Flying between Starやで⭐️ お世話になりました #マルチネ10 https://t.co/Iy0wicdtHp
— mirrorboy (@mirrorboy) 2015, 8月 2
数年前までは、DJ newtownをどうやって掛けるかに終始していた気がする。そしてMaltine RecordsからリリースしたJean Seberg EPは、DJ newtownへのリスペクトだった。もちろん、好きすぎるモノがあると、そこで思考は停止してしまうので、トラック制作で周りの方々を乗り越える事は全く出来なかった。徐々にプログラムやインタラクションデザインに興味が移っていった6年だった。
ここ最近は、日本的なマッシュアップというのが根付いて来た事もあって、(その辺の経緯はMaltine Bookのインタビューで話しました。)刹那的なテクノロジーと日本的な文脈を掛けあわせて、西洋化とは違った何かを残したい・創りたいと思って生きていて、テクノロジー側のSeeed StudioのEric Panと挨拶ができるのは、非常に意味ありげだ。
きゅんくんキタ! #マルチネ10 https://t.co/R06Ib1V8Vm
— mirrorboy (@mirrorboy) 2015, 8月 2
秋葉原のギークな側面を担う「きゅんくん」も、深センのMaker Faireで行ったAkiparty以来の仲間だけど、よくよく考えたらマルチネ絡み(tofubeatsのMVに出演してる!)だったりもしたのでステージに誘ってみた。今回は運悪くコバルト爆弾αΩのステージの時間に間に合わなかったんだけど、今後一緒に何かしでかしたい。
コバルト爆弾αΩ リハーサルの幼女ダブステップです #マルチネ10 https://t.co/HuUXrb8VIq
— mirrorboy (@mirrorboy) 2015, 8月 2
2週連続BE TOGETHER #マルチネ10 https://t.co/J6x0ecvYaU
— ちんさつちゃん (@papilio17) 2015, 8月 2
warp #マルチネ10 https://t.co/CitJA4A1iF
— has (@hasu_has) 2015, 8月 2
前述のとおり、DENPA!!!的?MOGRA的?Maltine的?DJが流行するにつれてアイデンティティが無くなっていく6年だったわけだが。その後Maxを使ってDJに合わせて完璧な映像を創りたいという思いがあったけど、センスや能力が皆無だったので当然上手く行かなかった。現在の論理的な帰結として、音と映像が一番合っている(アウラ感がある)ビデオを流すことに落ち着いている。つまりミュージックビデオでDJするというのをやっている。マルチネの中だと周りにそういったチームが居ないのでいい意味で浮くことができた。そして浮いた先には、天があった。
マウスポジションをゲームオブジェクトにレイキャストし、プレイヤーキャラからの回転角度を取得する #unity3d
マウスの方向にキャラクターを向ける場合などに利用できる。
Code
void Turning ()
{
Ray camRay = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit floorHit;
if (Physics.Raycast (camRay, out floorHit, camRayLength, floorMask)) {
Vector3 playerToMouse = floorHit.point - transform.position;
playerToMouse.y = 0f;
Quaternion newRotation = Quaternion.LookRotation (playerToMouse);
playerRigidbody.MoveRotation (newRotation);
}
}
