programmingの最近のブログ記事

追記 20111011: 実機だと化ける問題は、freetypeのリコンパイルとか色々なことを試したがドツボにハマり、結局現在配布されてるoFのライブラリのままで、プロジェクトのビルド設定の「Architecture」を「armv7」にし、「Valid Architectures」を「i386」「armv7」にしたからだと思う。この問題で4日ぐらいハマったorz。
追記 20111007: 実機だと化ける問題発生中。WHY?

oF+iOSを使う上で一番ネックだったのは、日本語フォントの表示問題。これは「瞬く静寂」さんの制作されたofxTrueTypeFontUC(元ofTrueTypeFontWS)を使うことで解消できた。
ここから最新版をダウンロードして、addonsフォルダにでも突っ込んで、使用個所でインクルードすれば、本家ofTrueTypeFontのように使える。ただ、stringではなくwstringを扱うので、直接文字列を入れる時は
font.drawString(L"あいうえお", 100, 100);
のようにL文字列を入れる必要がある。

iPad-ofxTruetypeFontUC.png

しかしとりあえず日本語フォントをdataフォルダ以下に直接入れて使っているが、システムフォントを使うことは可能なのだろうか?
追記: 201110010
タイトル変更。FreeImageのリコンパイルについてを中心に書き直しました。

openframeworksのiOS版で、iOSシミュレータとiPad2用にFreeImageをリコンパイルする話。
-
解決してみれば、「ダウンロードしたら最初にこれをやれ」って書いてある問題なんだけど、oF007をダウンロードして、そのままXCodeでビルドしてiOSシミュレータでtiff画像を読み込もうとした時に
Detected an attempt to call a symbol in system libraries that is not present on the iPhone:
mktime$UNIX2003 called from function _ZN6LibRaw13get_timestampEi in image imageLoaderExample.
If you are encountering this problem running a simulator binary within gdb, make sure you 'set start-with-shell off' first.
とか出てロードできず、約3日ぐらい詰んでた。藁にも縋る思いでoF Forumに初カキコしたら早速返答が来た(感謝感激)。
ご返答によると「FreeImageライブラリを自分でコンパイルし直してつっこむ」とのこと。
以下、私のやった手順です(参照先)。

1. FreeImageをダウンロードして解凍。
2. このMakefileをダウンロードして(「Makefile.iphone」として保存)、FreeImageフォルダの中に入れる。そして
GCC_VERSION = 4.2
IPHONEOS_DEPLOYMENT_TARGET = 4.3
MACOSX_DEPLOYMENT_TARGET = 10.7

PLATFORM_SIM = iPhoneSimulator
PLATFORM_PHONE = iPhoneOS

ARCH_SIM = i686
ARCH_PHONE = armv6
この辺を自分の環境に合わせて変更。
うちはMAC OS10.7でXCodeのiOS SDKのバージョンが4.3だったのでそれに変更。それからシミュレータとiPad実機はアーキテクチャが違い、iPadはARM(7)であるのに対し、実機はMac OSのアーキテクチャに依存する。うちはシミュレータの時、アーキテクチャがi686じゃなくてi386だったのでそれに変更(ターミナルから「arch」コマンドを打つと自分のマシンのアーキテクチャがわかる)。Makefileの下の方にも「i686」があったので、全置換。
で、うちはiPad2用に使いたかったので、「ARCH_PHONE」を「armv7」に変更した。下の方にも「armv6」があるので全置換でいいと思う。
ちなみにXCode4.2+iOS5だと苦労する(コンパイラのGCCが無くなってLLVM-GCCになってたりする)のでXCode4.1+iOS4.3でやった方が無難だと思う。
うちの設定だとこんな感じ↓
Makefile.iphone
# Configuration for iPhone OS, making static libs
# this will generate both iPhone (arm) and iPhoneSimulator (i386) libs

include Makefile.srcs

CFLAGS =  -g -O2 -Wall -Wmissing-prototypes -std=c99 -ffast-math -fno-strict-aliasing
CXXFLAGS =  -g -O2 -Wall -fno-strict-aliasing

GCC_VERSION = 4.2
IPHONEOS_DEPLOYMENT_TARGET = 4.3
MACOSX_DEPLOYMENT_TARGET = 10.7

PLATFORM_SIM = iPhoneSimulator
PLATFORM_PHONE = iPhoneOS

ARCH_SIM = i386
ARCH_PHONE = armv7

PLATFORM_SIM_DEVELOPER_BIN_DIR = /Developer/Platforms/$(PLATFORM_SIM).platform/Developer/usr/bin
PLATFORM_PHONE_DEVELOPER_BIN_DIR = /Developer/Platforms/$(PLATFORM_PHONE).platform/Developer/usr/bin

SDKROOT_SIM = /Developer/Platforms/$(PLATFORM_SIM).platform/Developer/SDKs/$(PLATFORM_SIM)$(IPHONEOS_DEPLOYMENT_TARGET).sdk
SDKROOT_PHONE = /Developer/Platforms/$(PLATFORM_PHONE).platform/Developer/SDKs/$(PLATFORM_PHONE)$(IPHONEOS_DEPLOYMENT_TARGET).sdk

EXTRA_CFLAGS_SIM += -arch $(ARCH_SIM) -pipe -mdynamic-no-pic -fvisibility=hidden $(INCLUDE) -isysroot $(SDKROOT_SIM)
EXTRA_LDFLAGS_SIM += -arch $(ARCH_SIM) -isysroot $(SDKROOT_SIM) -Wl,-dead_strip
EXTRA_CFLAGS_SIM += -D__IPHONE_OS_VERSION_MIN_REQUIRED=20000 -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET)
EXTRA_LDFLAGS_SIM += -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET)

EXTRA_CFLAGS_PHONE += -arch $(ARCH_PHONE) -pipe -mdynamic-no-pic -fvisibility=hidden $(INCLUDE) -isysroot $(SDKROOT_PHONE)
EXTRA_LDFLAGS_PHONE += -arch $(ARCH_PHONE) -isysroot $(SDKROOT_PHONE) -Wl,-dead_strip
EXTRA_CFLAGS_PHONE += -miphoneos-version-min=$(IPHONEOS_DEPLOYMENT_TARGET)
EXTRA_LDFLAGS_PHONE += -miphoneos-version-min=$(IPHONEOS_DEPLOYMENT_TARGET)

AR_SIM = $(PLATFORM_SIM_DEVELOPER_BIN_DIR)/ar
AR_PHONE = $(PLATFORM_PHONE_DEVELOPER_BIN_DIR)/ar

CC_SIM = $(PLATFORM_SIM_DEVELOPER_BIN_DIR)/gcc-$(GCC_VERSION)
CC_PHONE = $(PLATFORM_PHONE_DEVELOPER_BIN_DIR)/gcc-$(GCC_VERSION)

CFLAGS_SIM = $(CFLAGS) $(EXTRA_CFLAGS_SIM)
LDFLAGS_SIM = $(EXTRA_LDFLAGS_SIM)
CXX_SIM = $(PLATFORM_SIM_DEVELOPER_BIN_DIR)/g++-$(GCC_VERSION)
CXXFLAGS_SIM += $(EXTRA_CFLAGS_SIM) -fvisibility-inlines-hidden
LIBTOOL_SIM = /Developer/Platforms/$(PLATFORM_SIM).platform/Developer/usr/bin/libtool

CFLAGS_PHONE = $(CFLAGS) $(EXTRA_CFLAGS_PHONE)
LDFLAGS_PHONE += $(EXTRA_LDFLAGS_PHONE)
CXX_PHONE = $(PLATFORM_PHONE_DEVELOPER_BIN_DIR)/g++-$(GCC_VERSION)
CXXFLAGS_PHONE += $(EXTRA_CFLAGS_PHONE) -fvisibility-inlines-hidden
LIBTOOL_PHONE = /Developer/Platforms/$(PLATFORM_PHONE).platform/Developer/usr/bin/libtool

TARGET = freeimage
STATICLIB_SIM = lib$(TARGET)-iphonesimulator.a
STATICLIB_PHONE = lib$(TARGET)-iphone.a
HEADER = Source/FreeImage.h

.SUFFIXES: .o-i386 .o-arm
MODULES_ARM = $(SRCS:.c=.o-arm)
MODULES_ARM := $(MODULES_ARM:.cpp=.o-arm)
MODULES_i386 = $(SRCS:.c=.o-i386)
MODULES_i386 := $(MODULES_i386:.cpp=.o-i386)

default: all

all: dist

dist: FreeImage
	cp *.a Dist
	cp Source/FreeImage.h Dist

FreeImage: $(STATICLIB_SIM) $(STATICLIB_PHONE)

$(STATICLIB_SIM): $(MODULES_i386)
	$(LIBTOOL_SIM) -arch_only i386 -o $@ $(MODULES_i386)

.c.o-i386:
	$(CC_SIM) $(CFLAGS_SIM) -c $< -o $@

.cpp.o-i386:
	$(CXX_SIM) $(CXXFLAGS_SIM) -c $< -o $@

$(STATICLIB_PHONE): $(MODULES_ARM)
	$(LIBTOOL_PHONE) -arch_only armv7 -o $@ $(MODULES_ARM)

.c.o-arm:
	$(CC_PHONE) $(CFLAGS_PHONE) -c $< -o $@

.cpp.o-arm:
	$(CXX_PHONE) $(CXXFLAGS_PHONE) -c $< -o $@

clean:
	rm -f core Dist/*.* u2dtmp* $(MODULES_i386) $(MODULES_ARM) $(STATICLIB_SIM) $(STATICLIB_PHONE)
3. ターミナルからcdでFreeImageまで移動し、Makefileをmake -f Makefile.iphoneで実行する。
4. 実行後できたlibfreeimage-iphone.aとlibfreeimage-iphonesimulator.aをoFの/libs/FreeImage/lib/iphoneの中に入れる。
5. oFの適当なexampleをコピーし、開き、Targets -> Build SettingsのUser-Defined以下LIB_FREEIMAGE_IPHONEを→後述。
"$(OF_PATH)/libs/FreeImage/lib/iphone/libfreeimage-iphone.a" "$(OF_PATH)/libs/FreeImage/lib/iphone/libfreeimage-iphonesimulator.a"
に変更。
OF_CORE_LIBSの
 $(LIB_FREEIMAGE)
を削除。

そして、XCodeのソースツリーの「libs」にoF/libs/FreeImageフォルダを追加。そしてソースツリーの「openFrameworks>iPhone+OF Lib.xcodeproj」を選択し、Build Settingsの「Architectures」を「Optimized (armv7)」に。
「Valid Architectures」を「i386」「armv7」に。
下の方の「LIB_FREEIMAGE_IPHONE」を「"$(OF_PATH)/libs/FreeImage/lib/iphone/libfreeimage-iphone.a" "$(OF_PATH)/libs/FreeImage/lib/iphone/libfreeimage-iphonesimulator.a"」に。
これらはPROJECTとTARGETSの両方にやる必要がある。
それからソースツリーの「○○Example」をクリックして、同様のビルド設定をする。
それからiOSシミュレータをリセットする必要があるので、iOSシミュレータを起動してメニューからiOSシミュレータ>「コンテンツと設定をリセット」。

これでビルドすればFreeImageに関してはいけた。
あとはgluとfreetypeも必要に応じてリコンパイルをやらなくてはいけない。でもfreetypeのだけはうまくいかず、現状のoFのライブラリを突っ込み直したら普通に通った。多分アーキテクチャの設定を明示したからだろうな。
ここのprisonerjohn氏の記事とarturo氏の返信を合わせて実装。 読み込み時に
    nextTexture.setUseTexture(false);
しているのでそのまま描画ができず、drawする直前に
    if(currImage){
        currImage->setImageType(OF_IMAGE_COLOR_ALPHA);
        currImage->setUseTexture(true);
        currImage->draw(0, 0);
    }
すると描画された。
ちょっと詰まったので、openFrameworksのappから(lolipopアカウントで)メールを送信する方法。なんでlolipopかというとgmail等のSSL方式のメールだと難しそうだったから。

arturoc氏のofxMailUtilsをダウンロード。
自分のプロジェクトに追加する。さらに、アドオンofxThreadを使っているのでこれもインクルード。
そしてofxMailUtils.hの32行目付近
#define OFX_SMTP_HOST "localhost"
#define OFX_SMTP_PORT 25
をSMTPサーバの設定に書き換え。
#define OFX_SMTP_HOST "smtp.lolipop.jp"
#define OFX_SMTP_PORT 25
に変更。
次にtestApp.cppの10行目付近
	account.accountName="account_name"; // this is just to show the name of the account where the message arrive
	account.user="user@mail.com";		// login to your mail account
	account.password="passwd";			// password of your mail account
	account.host="mail.server.com";		// pop3 server
	account.accountName="otakio"; // this is just to show the name of the account where the message arrive
	account.user="xxxx@lolipop.jp";		// login to your mail account
	account.password="xxxxxxxx";			// password of your mail account
	account.host="pop3.lolipop.jp";		// pop3 server
等に書き換え。同36行目付近
	message.recipients.push_back("xxxxl@server.com");
	message.sender="me@mail.com";
	message.subject="subject of the message";
	message.recipients.push_back("xxxx@gmail.com");		//受信者
	message.sender="xxxx@lolipop.jp";		//送信メールアドレス
	message.subject="subject of the message";		//件名
等に変換。
これで実行すると受信トレイの表示はできるのだが、メールの送信でエラーが起きてシャットダウンする。これはlolipopがAUTH_LOGIN認証を使っているせい。
なのでofxSmtpClient.cppを少々いじる必要がある(oFではPOCOライブラリを使っているのでこの辺りで詰まった方はPOCOのドキュメントを参照されたい。
ofxSmtpClient.cpp 13行目付近
		session->login();
		session->login(Poco::Net::SMTPClientSession::AUTH_LOGIN, "username", "password");
に書き換える(usernameとpasswordは自分の環境で。ofxMailUtils.hでdefineしてもよい。)
これで通った。ネットワーク及びPOCOについては全然詳しくないので行き当たりばったりの解決ですが。
参照:
send a mail: openFrameworks - forum
sending email with file attachments - openFrameworks - forum
ムサビのデザイン|コレクションと教育でたどるデザイン史」のサイトが公開されました。
久しぶりにFlash書きましたがポスター・図録他のトータルデザインが中野豪雄大センパイなので少々緊張致しました。。。
展覧会は先程見させていただきましたが、これまで何かの折にチラッとしか見たことのなかった(けどその一瞬にもの凄い凝視して中身見たいな〜と思っていた)貴重書の数々がついにお披露目になっていて、ほんとに一冊一冊抱きしめてイイコイイコしてやりたい気持ちになってしまいます。モリスとか、キルヒャーとか、ユーゲントとか、モリソンとか、トンプソンとか。あと、マックス・ビルのキッチン用時計、欲しいなぁ。ムサビの先生による解説映像や対談の映像も勉強になります。久しぶりにデザインの勉強したな。。。

てつじこと佐藤哲至氏の展示にプログラミングで技術協力しました。

fukugan2011.jpg
複眼思考 2011
2011年3月7日(月)〜12日(土)
art space kimura ASK?+ASK?P
11:30~19:00(最終日17:00まで)
出品者
陣内利博 佐藤哲至 野沢陽太 児玉 駿 結城亜寿香 
瀬尾 宙 今井玲香 佐藤 翔 高橋 圭 能登翔平 平田有加 細沼千夏

彼は今、研究室旅行に行っておりますが、開発間に合うといいけど。笑
内容は、ぜひ現地で。



ここのところのプログラミングのまとめ。
あまりこういうものをまとめたことがないのだが、ひとつは恥ずかしくてそんなことできなかったのと、大事なことは使い方だと思っているからなんだけど、色んな先行事例にお世話になりまくっているのでもし役に立てばと思い、つまりそうな箇所を時間のある時に残してみることにした。

●openFrameworksからARToolkitPlusを使う
oFのForumからアドオン「ofxARToolkitPlus」を入手して使う。
しかし特定のマーカーIDが検出されたか否か、あるいは検出されたマーカーの総数は取得できるが、特定のマーカーIDが何個検出されたか、とか、特定のマーカーIDの情報を取得するのがデフォルトではできないので、カスタマイズが必要。
独自マーカーは使えないと思うが、最初から4096個のIDが用意されてるのでそれを活用した方が能率的。

●openFrameworksからAppleScriptを実行する
Finderに命令を出したり、他のアプリを起動したりしたい時、AppleScriptを呼び出したい。
c++のsystem("命令");を使う。

system("osascript -e 'tell app \"Finder\" to sleep'");
とか
system("osascript -e 'tell app \"Google Earth\" to activate'");
とかで一行程度のものなら実行可能。 もしくはあらかじめAppleScriptエディタでコンパイルしたものを
system("osascript xxx.scpt");
で実行できる。 これなら複数行の命令でも実行可能。 というかAppleScriptに限らずなんでも実行できる。 もしscptファイルがアプリのdataフォルダ内にある場合、
	string command =  "osascript '" + ofToDataPath("xxx.scpt", false) + "'";
	system(command.c_str());
で実行可能。
ちなみにブラウザ起動だけはoFで
	ofLaunchBrowser("http://www.yahoo.co.jp/");
が用意されてる。中身はsystemメソッドで呼び出している。

●openFrameworksでbox2dを使う
oF UNOFFICIALからoFのアドオン「ofxBox2d」を入手して使う。
box2d凄い。

●openFrameworksでMacBook等の緊急モーションセンサを使う
oFのアドオンページから「ofxSuddenMotion」を入手して使う。


Box2d_suddenMotion1.png

Box2d_suddenMotion2.png

画像じゃ伝わらないですが、MacBook Proを傾けるとbox2dを使った丸に重力がかかる、というサンプルを作ってみました。
asahi400.gif
(画像: 武蔵野美術大学美術館・図書館HPより)

タッチパネルシステムのお手伝いをした展覧会がムサビで開催されてます。大正から第二次大戦期にかけての子供向けの「絵雑誌」の展覧会です。絵雑誌とは文章と絵で構成された見開き完結の絵本のようなもので、一枚一枚違う作家さんの作品になっています。
通常の閲覧方法だけではなく、作家別に一覧して見られるようになっているので、お気に入りの作家を見つけるのも楽しみの一つだと思います(ほんとにみなさん特徴あって面白いです)。
ご興味ありましたらぜひ!

【コドモアサヒの時代】     
会 期|2010年11月08日(月) ー12月18日(土)
休館日|日曜日・祝日
時 間|10時00分--18時00分 (ただし土曜日は17時まで)
会 場|武蔵野美術大学 図書館展示室

詳細はこちら

 1  |  2  |  3  |  4  |  5  | All pages »

プロフィール

アイテム

  • america2.JPG
  • america1.JPG
  • america2.JPG
  • america1.JPG
  • chirashi4.png
  • meishi.jpg
  • R0012425.JPG
  • iPad-ofxTruetypeFontUC.png
  • R0012399.JPG
  • R0012383.JPG