凹みTips

C++、JavaScript、Unity、ガジェット等の Tips について雑多に書いています。

C++

Unity でネイティブプラグインの実行時更新を可能にする PatchLibrary を使ってみた

はじめに 主に Windows での開発の話になります。 Unity でネイティブプラグインの開発していると、一番困るのが DLL の更新です。Unity では DLL を読み込むとエディタを再起動するまで解放してくれないため、エディタ実行中に DLL を置き換えることが出来…

Unity で Desktop Duplication API を使ってスクリーンキャプチャしてみた

はじめに 以下のエントリではスクリーンキャプチャを System.Drawing.Graphics.CopyFromScreen() を別スレッドで回して行っていました。 qiita.com ここで触れられているようにネイティブでやった方が速いということもあり、本エントリでは Windows 8 から使…

Unity の Low-Level Native Plugin Interface を使ったテクスチャの更新 (Windows/D3D11 編)

はじめに 本エントリは以下のエントリの続編です。 tips.hecomi.com Low-Level Native Plugin Interface を利用すると OpenGL や DirectX から直接テクスチャの生成や更新を行うことが出来ます。前回のエントリでは Mac OS X 環境下での OpenGL を例に紹介し…

ネイティブプラグインから Unity の関数(Debug.Log 等)を呼び出す

はじめに ネイティブプラグインの作成時にネイティブ側から Unity の Debug.Log() を呼んでデバッグしたくなるときが多々あります。以下のエントリ(英語)で方法が紹介されていたのでやってみました。 Artificial stupidity: C++ Plugin Debug Log ざっくり…

Low-Level Native Plugin Interface を利用してネイティブから Unity のテクスチャを高速に更新する方法を調べてみた

はじめに Unity でネイティブ側(C/C++ 等)で作成したテクスチャを利用する方法はいくつかあって、テラシュールブログさんにまとめられています。 Unityでテクスチャを読む7つの方法 - テラシュールブログ Unityでテクスチャを読む7つの方法 4・5・6につい…

Unity で Android 向けの OpenCV x ArUco を利用した AR アプリを作ってみる

はじめに Unity で Android 用のアプリを作る際、Unity だけで出来ないことをやろうとするとプラグインを利用することになります。Android 向けのプラグインは大きく分けて 2 種類あり、一つは Android の機能を利用する Java プラグイン、もう 1 つは C/C++…

Maker Faire Tokyo 2015 にレゴ x ハードウェア x プロジェクションなシューティングゲーム LITTAI を出展してきた

はじめに 前回の記事で書いたように 8/1、8/2 に東京ビッグサイトにて開催された MFT 2015 へ友達と趣味で制作していた LITTAI というゲームを出展してきました。お越しくださった皆様、ありがとうございました! LITTAI は Lit Table Interface の略の造語…

軽量な AR ライブラリの ArUco を Mac で使ってみた

はじめに ArUco は BSD ライセンスで配布されている OpenCV をベースにした軽量な AR ライブラリです。 ArUco: a minimal library for Augmented Reality applications based on OpenCv | Aplicaciones de la Visión Artificial 以下の様な 2 次元マーカを 1…

OMMF2014 で レゴ x プロジェクションマッピングなゲーム Mont Blanc Pj. を出展してきた

はじめに 仕事が立て込んでいて書くのが遅れてしまいましたが、8/23、24 でソフトピアジャパンで行われた Ogaki Mini Maker Faire 2014 (OMMF2014) に、レゴで出来た自由に組み替えられるステージにプロジェクションしてインタラクティブに遊べるゲーム Mont…

Unity と OpenCV を組み合わせて現実・仮想双方を加工した AR な世界を Oculus Rift 越しに覗いてみた

はじめに 通常のカメラ画に AR オブジェクトを描画すると、解像感や色のズレで AR オブジェクトにバーチャルっぽさを感じてしまいます。そこで逆に現実の世界の方をバーチャルっぽくしてあげることで、AR オブジェクトに感じる違和感が低減されるのではない…

Point Cloud Library 1.7.2 × VS2013 な環境構築 & OpenNIGrabber を使わずに点群を表示してみた

はじめに Point Cloud Libarary(PCL)の勉強を始めました。 PCL - Point Cloud Library (PCL) 【シリーズ「PCLを触ってみよう!」第一回】3D点群処理ライブラリ「Point Cloud Library」の概要 | DERiVE ブログ & メルマガ Point Cloud Library - Wikipedia P…

Ovrvision で色んなエフェクト試してみた

はじめに 以前、Oculus Rift と Ovrvision で現実の世界を OpenCV で加工して見るエントリを書きました(Oculus Rift × OVRVISION × OpenCV で線画だけの世界を覗いてみた - 凹みTips)。今回は、以前のものをちょっとだけ高速化して、かつ他のエフェクトを…

Oculus Rift × OVRVISION × OpenCV で線画だけの世界を覗いてみた

はじめに OVRVISION(オーバービジョン)が届きました! Ovrvision : Oculus Riftに装着するステレオカメラ Oculus Rift にマウントできる軽量、VGA、低レイテンシ、60 fps なステレオカメラです。いくつかのイベントで触らせて頂いていたのですが、完成度が…

Unity でカメラの映像を別ウィンドウ表示してみた

はじめに Oculus Rift のデモを行っていると、HMD をつけていない観客は左右に分割された Oculus Rift 用の映像を見ることになり、デモ効果が薄れてしまいます(本当はフルスクリーンや 3D メガネで立体視したい)。ということを、Twitter で @koukiwf さん…

Unity の Low-level Native Plugin Interface を調べてみた

Unity 5.2 以降について Unity 5.2 より Low-Level Native Plugin Interface のお作法が少し変更になりましたので、最新の情報についてはドキュメントをご参照下さい。 Unity - マニュアル: 低レベルネイティブプラグインインターフェース はじめに Unity で…

Unity で OpenCV で作成したテクスチャをネイティブプラグイン経由で利用してみた

はじめに 有償のプロ版限定ですが、Unity でネイティブプラグインと連携してテクスチャを操作できると、OpenCV で色々変更を加えたりと表現の幅が色々と広がります。調べてみましたのでメモします。 環境 Mac OS X 10.9.1 Unity 4.3.2f1 (Pro) 先行技術 No h…

フォルマントから母音推定してリップシンクを目指してみる

はじめに Oculus Rift を使用して、VR 内のキャラと目が合う、握手できるなどの衝撃体験を @GOROman さんが実現されて話題になっています。 Dive into VR - Oculus Rift + Razer Hydra feat. Miku - YouTube Oculus Rift で 初音ミク と握手をしてみた - Mik…

QML で使える OSC 要素を作ってみた

はじめに 先日書きました Maker Faire Tokyo 2013 でレゴへのプロジェクションマッピングネタで出展してきた - 凹みTips でも使用していた Qt から OSC を扱うカスタム QML 要素を紹介します。 OSC とは OpenSound Control の略で、UDP の上で非常に低遅延な…

Maker Faire Tokyo 2013 でレゴへのプロジェクションマッピングネタで出展してきた

はじめに 11/3、4 で開催されていた Maker Faire Tokyo 2013 に、id:jonki と 凸P(Mont Blanc Pj.)というネタで出展してきました。レゴで作ったステージにゲーム画面をプロジェクションマッピングし、レゴを動かすとゲーム内のブロックも動的に変更された…

Qt Quick 2 で使える OpenCV 用の QML 要素を作ってみた

はじめに 前回(QML から OpenCV で取得したカメラ画を表示してみた - 凹みTips)は、QQmlImageProvider を用いたアプローチで C++ 側で作成したピクセルデータを QML 側で扱う方法を紹介しました。今回は、qmlRegisterType によって登録できる QML 要素から…

QML から OpenCV で取得したカメラ画を表示してみた

修正(2013/09/16) ※ タイトルが内容に即していないため変更しました(旧: Qt Quick 2 で使える OpenCV 用の QML 要素を作ってみた)。 内容に即した記事は次回で書いています。 はじめに OpenCV 始めました。C++ インターフェース使うと C++11 と併せてサ…

Windows でも Node.js C/C++ アドオンを作ってみる

はじめに Linux や Mac で動かしている方が多いと思いますが、Windows でも Node.js を動かすことが出来ます。手順はとても簡単で、インストーラを実行するだけです。 Node.js 日本ユーザグループ 他の PF と比較すると数は減りますが、コンパイルが必要な s…

終了処理をするメンバ関数の違いを吸収してくれるカスタムデリータ

C++

はじめに 次のような微妙に異なる終了処理が必要なクラスが沢山あるときに、それぞれに対して別々のカスタムデリータを用意するのは面倒です。 struct Hoge { Hoge() {} ~Hoge() {} void close() { std::cout << "Hoge::close" << std::endl; }; }; struct F…

Boost.勉強会 #11 東京 での質問への回答

はじめに Boost.勉強会 #11 東京での発表内容(Boost.勉強会 #11 東京で発表してきた - 凹みTips)で頂きましたご質問について、簡単にですが調査しましたのでまとめます。 質問の返答 Emscripten の行数が 12万行になった理由 結論としては「iostream の中…

Boost.勉強会 #11 東京で発表してきた

はじめに 本日、神保町の IIJ さんの本社で行われた Boost.勉強会 #11 東京にて「Hello, C++ + JavaScript World!」というタイトルで発表して来ました。 ちなみに Boost.勉強会ですが、本発表には Boost 成分は1ミリも含まれていないです。。 発表内容 当日…

Qt Quick での C++ × QML バインディングについてまとめてみた

はじめに QML で特定のフォルダ内に含まれる画像をスライドショーする処理を書いてみた - 凹みTips でもチラッと書きましたが、もう少し詳細に Qt Quick での C++ バインディングについて調べてみたのでまとめてみました。 Qt 始めたてなので幾つか間違い含…

QML で特定のフォルダ内に含まれる画像をスライドショーする処理を書いてみた

はじめに QML は JavaScript ベースなので、ファイルを扱うことができません(XHR とかは出来ます)。なので、特定のディレクトリに含まれる画像をスライドショーしたいなぁ、と思っても、画像パスのリストを JS から取得することが出来ず、ファイル名を JS …

Emscripten で C++ の Hello World を JavaScript に変換してみた

はじめに Emscripten は今流行りのコンパイラ基盤 LLVM を利用して C/C++ のコード(正確には LLVM-IR)を JavaScript に変換してくれるコンパイラです。フロントエンドである Clang を利用して C/C++ のコードを LLVM-IR という中間言語へ変換、Emscripten …

可変長引数テンプレートをタプルで受け取ってそれをまた展開する方法アレコレ

C++

はじめに v8 絡みのコードで可変長引数テンプレートを扱いたくて困ってつぶやいていたら、アキラさん(id:faith_and_brave)が教えてくれました: C++ で可変長引数テンプレートを tuple で受け取ってそれをまた展開するときに一番楽な方法ないかな2013-02-2…

Android NDK で OpenGL ES 2.0 x libpng でテクスチャを描画

はじめに 前回三角形を出したので次は画像を読み込んでテクスチャを描画します。 NDK で画像テクスチャを利用する方法は主に 2 通りが挙げられると思います。 Java 側の Bitmap クラスを利用する方法 C/C++ で画像読み込みライブラリ等を利用する方法 今回は…

NativeActivity から OpenGL ES 2.0 で三角形を描画する

はじめに NDK で NativeActivity から OpenGL ES 2.0 使って何かしようと思うと、EGL で初期化する処理を書いたりと、Java で GLSurfaceView 使うよりも手間がかかります。動作させるまで結構時間かかったのでまとめておきます。 三角形の描画 android-ndk/s…

Native Client の導入と Hello World までのまとめ

はじめに Welcome to Native Client - Native Client — Google Developers Google Native Client とは、ブラウザ上でネイティブコードを安全に実行するためのサンドボックス化技術です *1。開発者側から見れば、Chrome 上で高速に動くアプリケーションを既存…

Objective-C で NSThread および GCD で非同期処理した結果を UI に反映する処理を書いてみた

はじめに 前回、Objective-C++ 使って iOS で Boost.Asio してみた - 凹みTips で書いた処理ですが、同期的に処理を行うため HTML を取ってくるまでの間、UI 系はブロックされてしまいます。 そこで UI 系がブロックされないようにするためにはどうすれば良…

Objective-C++ 使って iOS で Boost.Asio してみた

はじめに Objective-C と C++ が混在できる Objective-C++ という魅力的な響きに誘われて、iPhone 上で Boost を動かすってのをやってみました。 やったこと Boost.Asio が iPhone(シミュレータ)上で動いてます! 解説 Boost の導入に関しては以下のエント…

OpenJTalk を使って Node.js で音声合成するモジュール作った

最新版の記事はこちら OpenJTalk の Node.js モジュールを作り直した - 凹みTips はじめに OpenJTalk はフリーの日本語音声合成エンジンです。 Open JTalk 以前、Node.js 用 Open JTalk アドオンを作ってみた - 凹みTipsというエントリを書きましたが、当時…

Node.js で簡単に音声認識できるモジュールを作ってみた #nodefest

はじめに この記事は東京Node学園祭2012 アドベントカレンダーの 23 日目の記事です。現在、オープンソースの大語彙連続音声認識エンジン Julius を利用して音声による家電操作を行なっているのですが、どんな言葉を認識させるかの文法をゴリゴリ書いたり、…

MeCab で非同期に形態素解析する node-mecab-async を作って npm に登録してみた

はじめに node.js の mecab addon 作った - 凹みTipsというタイトルで前に MeCab の Node.js モジュールを作成しました。MeCab モジュールは他の人の手で作られたものが npm や github に幾つか上がっていますが、node-waf でコンパイルする古いものだったり…

Node.js でマルチスレッド対応のネイティブモジュールを作成する

はじめに 前回(Node.js で C++ アドオンから EventEmitter のイベントリスナを呼ぶ - 凹みTips)、C++ のネイティブモジュールから EventEmitter を利用して JavaScript 側で定義したイベントリスナを呼ぶ方法を紹介しました。ただ Node.js はシングルスレ…

Node.js で C++ アドオンから EventEmitter のイベントリスナを呼ぶ

はじめに EventEmitter は Socket.IO などでも採用されているように、次のようなコードでイベントリスナの登録/処理ができるモジュールです。 var EventEmitter = require('events').EventEmitter; var ev = new EventEmitter(); ev.on('hoge', function(dat…

Mac OS X で node-gyp するのに -std=c++0x つけようとしてハマったけど解決した

はじめに node-waf はオワコンと聞いて node-gyp を使おうと思ったのですが、Mac で相当ハマったのでメモします。 環境 Mac OS X 10.8 Ubuntu 10.04 (比較検証用) 問題点 公式 の HelloWorld を C++11 風に書いてモジュール作れるかなぁ、と試してみました…

boost::asio::serial_port で ZigBee と会話してみた

はじめに 部屋やベランダにセンサ仕掛けて色んな値取ってきたいなぁ、と思い ZigBee 始めました。通信部分は Boost Asio Serial_port 使ったのでプラットフォーム依存しないと思います(多分)。 ZigBee 事始め 超お手軽無線モジュールXBee 2012年 03月号 […

node.js の exec の同期版を作ってみた

はじめに タイトル通り node.js の exec 関数の同期版を作ってみたというお話です。 問題点 node.js の child_process から使える exec 関数は非同期に行われるので、例えば A という処理をコンソール上で行なって成否判定をしてから、 B を行いたい、といっ…

node.js の mecab addon 作った

はじめに node.js のオレオレアドオンを拡充していきたいと思います。目的は MeCab そのものでなく、どちらかというと文字列をカタカナに変換したかっただけなのですが、そういえば v8::Array 使ったこと無いなぁと思い、勉強も兼ねて書いてみました。 ちな…

関数/メンバ関数の最初の引数の型を調べる

C++

はじめに とある事情である型の引数を持つメンバ関数があるかどうか調べたいと思って次のようなことをつぶやきました。 ある型の引数を持つメンバ関数を持っているかどうか調べるのってどう書くんだろう。調べてみよう。2012-06-09 20:12:29 via TweetDeckす…

node.js で JavaScript 側で定義した関数を C++ から呼ぶ方法

はじめに 例えば、なんか重い作業が回っていて、それが終わったら JavaScript 側で予めセットしておいた関数を呼びたい!みたいなときに使えます。 参考ページ Callbacks from Threaded Node.js C++ Extension | Brave New Method コード ここでは関数の名前…

v8 で Context をスレッド間で共有してみた

はじめに v8 を利用して、JavaScript 側で定義したコールバックが別スレッドから呼びたかったのでやってみました。具体的には、音声認識エンジン Julius にて、発話待機開始・発話開始・認識終了などのイベントが非同期でやってくるので、それらを JavaScrip…

Node.js 用 Open JTalk アドオンを作ってみた

はじめに Twitterの内容をベラベラ喋ったり、こっちの問いかけに応答してくれるようなシステムを作ろうと思っているので、その一環として作ってみました。 内容は過去の継ぎ接ぎのような感じです。 v8 を利用した C++ から JavaScript へクラスを簡単にエク…

JavaScript から iRemocon/Julius/OpenJTalk を制御できるようにした

はじめに v8 を利用した C++ から JavaScript へクラスを簡単にエクスポートするヤツ作ってみた - 凹みTips にて作った C++ クラスを JavaScript に持っていくヤツをちょっと改良しました HAS-Project/v8.hpp at master · hecomi/HAS-Project · GitHub creat…

v8 を利用した C++ から JavaScript へクラスを簡単にエクスポートするヤツ作ってみた

はじめに 前回、v8 を利用した C++ から JavaScript 側へ簡単に関数をエクスポートして実行するクラスを作ってみた - 凹みTips というエントリを書いたのですが、今回はクラスも簡単にエクスポートできるようにしてみました。前回の内容も踏まえて紹介します…

C++ から JavaScript 側へ簡単に関数をエクスポートして実行するクラスを作ってみた

はじめに V8 と戯れてました。…もとい虐められてました。V8 流行ってから相当経つし、ネット上にかなりの情報が転がってるだろう、とタカをくくって取り組み始めたのですが、やりたかったことを実現しようとすると、うーむ、となってしまい結構悩みました(…