Imaginary Code

from kougaku-navi.net

Processingで日時指定&ミリ秒表示付きのタイマーを作る

とある目的でProcessingでタイマーを作ることになったのですが、そこでの要件が「日付込みで終了時刻を設定したい」と「ミリ秒の桁(正確には1/100秒の桁)の表示もしたい」の2つでした。これが地味に面倒だったので、どうやったのかの記録をここに残してお…

ProcessingでターミナルのUIを作る

Processingでカタカタカタッターン! をやりたいとき用にターミナルのUIを作りました。アピールポイントはコマンドの入力履歴機能とメッセージごとに色付けできる機能。www.youtube.com コードはgithubに置いておきます。 github.com ライブラリ化するほどで…

Processingで自作クラスの中にserialEvent()を作る

Processingにおいて外部デバイスとシリアル通信をやるとき、データ受信時の処理を行う関数としてserialEvent()という関数を作ります。serialEvent()の中に書かれるコードは大抵の場合、受信データをパースして欲しいデータを取り出すような処理になるのです…

Processingでシリアルポート選択のUIを作る(JComboBox版)

ProcessingでArduinoとかとシリアル通信するとき、ポートと通信速度をリストから選べるUIが欲しいですよね。はい、作りましょう。 import processing.awt.*; import java.awt.*; import javax.swing.*; import java.awt.event.ActionEvent; import java.awt.…

Processingのシリアル通信で「Error, disabling serialEvent()」というエラーがでたら

ProcessingでArduinoとかとシリアル通信をやるとき、 Error, disabling serialEvent() for <ポート番号> というエラーにでくわすことがあります。 なぜこのエラーがでるのか、なにを疑えばいいのか このエラーメッセージを表示しているのは、Serialライブラ…

RealSense T265 の位置・姿勢情報をOSCで送信し、Processingで受信する

今年の春に発売されたSLAMカメラこと Intel RealSense Tracking Camera T265 ですが、安価で安定した3次元の位置・姿勢トラッキングができて大変良いです。UnityやC++向けには公式のライブラリがありますが、ライブラリのないProcessingとかでも使いたいの…

ProcessingからArduinoへint型のデータを送る

これの逆バージョンの話です。 ArduinoからProcessingへint型のデータを送る - Imaginary Code ヘッダに文字を使う方法 データを分割して送信する際に、先頭に「H」という文字を付けて送る方法です。 Processing int型のデータを上位バイトと下位バイトに分…

さよならダイアリー、こんにちはブログ

2019年春「はてなダイアリー」終了ということで、追い出されることになったので、やむなく「はてなブログ」に移行しました。それと、移行ついでにブログのタイトルを変えました。 リンク切れとか起きそうな気がするけど、人ん所のサービスを使う時のリスクだ…

スマホで作るNintendo Labo

Nintendo Laboが発売されましたね。Toy-Conガレージという自分で作品を作れるモードもあって、すでにTwitterにはいろいろな作品が投稿されています。ちょうどゴールデンウィークなので、工作を楽しんでいる人も多いでしょう。今回はそんなNintendo Laboを、…

PImageに対して図形を直接描画する

Processingで画像処理のプログラムを書いていると、画像(PImage)に対して四角形や円を直接描画したいことがあります。ウィンドウに対する描画命令であるrect()やellipse()をPImageに対して使えたらいいのにねーという話です。間接的にそれを実現する方法に…

Webカメラの映像をストリーミング配信してProcessingやp5.jsで受信する

カメラ映像をネットワーク越しに送受信したいことがたまにありますよね。Processingやp5.jsで作る場合にどうしたらいいかを紹介します。 ストリーミング配信するソフト PCに接続されたWebカメラを使って映像をストリーミング配信したい場合、「Gmax IP Camer…

これから研究をする君へ

●考えるということについて・普段から意識的に頭を使って考える、という練習をしてください。・考えるという行為は運動に似ています。普段からトレーニングをしていない人にはいきなりできません。・机に座っている時だけ考える、というのはだいぶ効率が悪い…

OpenCVで画像の上に別な画像を貼り付ける (位置・サイズ指定あり)

たぶん車輪の再発明だろうし、OpenCV3.0ともなればいい加減このへんをなんとかしたAPIがありそうな気がするけど、探すより作った方が早かったので作った。反省はしてない。 #include <opencv2/opencv.hpp> // 画像を画像に貼り付ける関数 void paste(cv::Mat dst, cv::Mat src, i</opencv2/opencv.hpp>…

Processingで3Dグラフィックスを扱う上での注意点

Processingのグラフィックスの描画系は内部でOpenGLを利用していますが、ProcessingのAPIは特有の癖があるのでOpenGLと同じ感覚でやっていると時々戸惑うことがあります。3DグラフィックスまわりのProcessing特有の仕様について、気をつけておくべき点をここ…

Processingで画面座標に対応する空間座標を計算する

3Dのアプリケーションにおいて、画面をクリックして空間中のオブジェクトの表示位置を指定するときなど、画面の2次元座標に対応する3次元空間座標が欲しいときがあります。こんなとき、どんな計算を行えば良いかについて解説します。コードはProcessing 2.…

Processingで視点の位置・姿勢を取得する

3次元のCG空間において、空間に対する視点(カメラ)の位置・姿勢の情報が欲しいときがあります。例えば、監視カメラを表現したいときや、自分中心の移動を行いたいときなど。これに関するTipsを紹介します。Processingでは、getMatrix()という命令を使うと…

OpenGLで描画された画面をOpenCVのcv::Mat形式の画像として取得する

たぶんこんな感じ。描画フォーマットを自動判別するのはやってない。 cv::Mat getScreen() { int width = glutGet(GLUT_WINDOW_WIDTH); int height = glutGet(GLUT_WINDOW_HEIGHT); int bits = glutGet(GLUT_WINDOW_BUFFER_SIZE); int type = CV_8UC4; // ま…

RICOH THETAで撮影した写真やライブ映像をProcessingで全天球表示する

RICOH THETAは2013年の発売以来多くのユーザに親しまれ、バージョンアップを重ねて着実に進化を遂げてきました。2014年に発売されたRICOH THETA m15では動画撮影に対応し、そしてつい先日発売されたRICOH THETA Sでは念願のライブ映像出力(HDMI/USB)が搭載…

OpenCV虎の巻

講義用に作ったOpenCVのインストール&ファーストプログラミングガイドを公開しました。 kougaku/OpenCV-Toranomaki - GitHub Windows版 Mac版 HTMLやらMarkdownもいいけど、素のテキストファイルで書くのがいちばん楽でいいなぁ。この手のただのドキュメン…

OpenCV用のプロジェクトジェネレータを作りました

OpenCVを使ったプログラミングは最初のプロジェクトの設定がめんどいですよね。あの作業を授業でやろうとするとこれまた大変。経験上、どれだけドキュメントを丁寧に書いても「先生動きません!」→「手順通りやってねぇだろゴルァ!」みたいなことが必ず起こ…

Processing用のOculus Riftのライブラリを作りました

DK2向けにヘッドトラッキングとレンズ補正をやってくれるProcessing用のちゃんとしたライブラリが見当たらなかったので、先人たちの偉業を組み合わせて新しく作りました。先人たちに感謝。 ダウンロードページ(GitHub) kougaku/OculusRiftP5ページ右下の「…

SimpleOpenNIをMac OS X Yosemite (10.10.2)で動かす

OSや開発環境のバージョンが上がって過去のソフトウェアが動かなくなることは世の常ですが、最近ひさしぶりにProcessingでSimpleOpenNIを使おうと思ったら案の定つまったので、そのインストールメモです。 環境 Mac OS X Yosemite(バージョン 10.10.2) Pro…

Macでメタセコイアを動かそう

モデリングソフトとして根強い人気のあるメタセコイアですが、惜しいことにWindows版しかありません。でも大丈夫。MacでWindowsアプリを動かす方法があります。というわけで、Macでメタセコイアを動かす方法について説明します。 導入環境 これまで「Macでメ…

Processingでコード側の設定で強制的にPresent Modeにする

普通に公式にある情報なんですが、こうすると普通に実行しても強制的にPresent Mode(フルスクリーン)になります。 boolean sketchFullScreen() { return true; } void setup() { size(displayWidth, displayHeight); } void draw() { } Window Size and Fu…

ProcessingでCGと画像の合成をやるときの背景画像の描画

Processingにおいて3次元の描画モード(P3D)の時にimage()で画像を描くと、3次元空間中に画像が板状に配置された状態になる。これはこれで便利なのだが、ARのように3DCGと2Dの背景画像を合成するようなプログラムを作ろうとした時に、CGが背景画像に埋も…

Processingでフルスクリーンと通常のウィンドウを切り替える

この話は前にも書いているが、前のコードではフルスクリーン化した際にウィンドウ本体へのフォーカスが失われるという症状があることがわかったので、そのあたりを修正した。具体的には this.requestFocus(); という1行を加えればよい。ついでに通常のウィン…

Processingでウィンドウのサイズをマウスで変更&最大化できるようにする

フォーラムにあったコードほぼそのままだけど、import文を足して動作するコードにしたものがこちら。描画領域のサイズ(widthとheight)はウィンドウ変更に連動して値が変わるようになっている。 import java.awt.event.ComponentAdapter; import java.awt.e…

Processingで複数のウィンドウを作る

PAppletの派生クラスでもう1つのウィンドウ上で動くアプレットの内容を記述し、PFrameを使ってそのアプレットを動かすウィンドウを作る感じ。なんか毎回こういうの書いてる気がするなー。 PFrame.pde import java.awt.Frame; import java.awt.Insets; publi…

Arduinoにおけるコマンドラインインタフェースの雛型

ArduinoとPC間のシリアル通信において、ターミナルからキーボード入力でコマンドを打ち込んで対話的に動かしたいときのプログラム例です。たまに忘れるので覚書きとして。 Arduinoのプログラム void setup() { Serial.begin(9600); Serial.setTimeout(15000U…

mbedJS + p5.jsでWebブラウザからmbedを制御する

mbedJSを使うと、mbedでWebページ連動のハードウェアを作ることができます。今回はmbedJSの導入方法を説明し、mbedJSとp5.jsの連携、iPadでの利用などについて紹介します。 mbedJSとは mbedJSはmbedをネットワーク経由で制御するためのサーバファームウェア…