ラベル Xcode の投稿を表示しています。 すべての投稿を表示
ラベル Xcode の投稿を表示しています。 すべての投稿を表示

2012年4月13日金曜日

ArtPigEditorで書き出した内容をiOSプロジェクトに載せるまでの項目メモ

ArtPigEditor(1.0.1)の出力でようやく動かせたのでメモ.
ArtPig Softの解説2つ(Part1, Part2)が基.

  • ArtPigでFile/Exportで書き出す


    • File/Exportにて書き出す.'ファイル名YYYYMMDDHHMM'なフォルダ内に'APP00000'なフォルダが入り,xml2つと画像群ができる.


  • ArtPigライブラリを取得する


    • ArtPigDownloadから'ArtPigIOS1.0.1.zip'をDownloadする.

    • 解凍しておく('ArtPigIOS1.0.1'フォルダ).


  • Xcodeにプロジェクトのテンプレートを追加する


    • cocos2d-iphoneDownloadから'cocos2d-iphone-1.1-beta2.tar.gz'をDownloadする.

    • 解凍する('cocos2d-iphone-1.1-beta2'フォルダ).

    • 解凍したフォルダ'cocos2d-iphone-1.1-beta2'内にある'install-templates.sh'を'-u'オプションをつけて実行する(もしくはsudo等で管理権限で).
      > ./install-templates.sh -u



  • Xcodeでプログラムを作る


    • 起動して新しいプロジェクトを選択する.


      1. iOSカテゴリにあるcocos2dタブのcocos2dプロジェクトを選択する.

      2. プロジェクト名を付ける.

      3. 作成場所を決める.


    • 'libs'に'ArtPigIOS1.0.1'フォルダを'Add Files to …'メニューで追加する.

    • 'Resources'に'APP00000'フォルダを'Add Files to …'メニューで追加する.

    • プロジェクトのルートアイテム選択する.


      1. PROJECT設定を選び'Build Settings'タブを選ぶ.

      2. タブ中の'All'を選択する.

      3. 'Header Search Paths'を検索して '$(SDKROOT)/usr/include/libxml2' を設定する.



      1. TARGETS設定を選び'Build Phases'タブを選ぶ.

      2. タブ中のLink Binary With Librariesを選ぶ.

      3. '+'ボタンを押しファイル選択から'libxml2.dylib'を探し追加する.


    • HelloWorldLayer.hファイルを編集する.


      1. '@class APAnimation;'行を'#import "cocos2d.h"'行の次に追加する.

      2. 'APAnimation *_animation;'行をHelloWorldLayerクラスのインスタンス変数として追加する.



      3. #import "cocos2d.h"
        @class APAnimation;
        @interface HelloWorldLayer : CCLayer
        {
        APAnimation *_animation;
        }
        +(CCScene *) scene;
        @end



    • HelloWorldLayer.mファイルの拡張子を.mmに変更する.

    • HelloWorldLayer.mmを編集する.


      1. '-(id) init'メソッドを編集する.



      2. -(id) init
        {
        if( (self=[super init])) {
        _animation= [[APAnimation alloc] initWithProjectId:@"APP00000"];
        [self addChild:[_animation rootNode]];
        [_animation play];
        }
        return self;
        }




2009年7月28日火曜日

COLLADA DOMのViewerを動かすまで

動機
拡張子がdaeのファイルを読み込んで描画できたらGoogle SketchUpで色々作って使えて便利そうだなぁ

環境
MacBook: Intel Core 2 Duo/NVIDIA GeForce 9400M, MacOSX: 10.5.7

1.Cg.frameworkのインストール
こちらここから'Cg Install Packages'/MacOSX用をdownloadしてインストール(Cg-2.2_April2009.dmg).
/Library/Frameworks/Cg.framework ができる

2.COLLADA Document Object Model (DOM)のViewer
2.1 ここからdownload(今回はcollada-dom-2.2.zip).
2.2 展開してできたフォルダを${COLLADA-DOM}とする
2.3 アーキテクチャの問題(?)対応 (こちら参照)
$ cd ${COLLADA-DOM}/dom
$ make
$ cp build/mac-1.4/libminizip.a external-libs/minizip/mac/libminizip.a

2.4 問題点をコメントアウト
$ cd ${COLLADA-DOM}/rt
$ vi src/Crt/CrtUtils.cpp (68行目'printf( str );'をコメントアウト '//printf( str );')

2.5 Xcodeで${COLLADA-DOM}/viewer/projects/xcode/viewer.xcodeprojを開く
2.6 ライブラリ検索パスを設定する

再帰を使って書くとこんな感じ
(bulletのライブラリだけ同名と衝突してしまうらしいので記述)
2.7 ビルド
2.8 ${COLLADA-DOM}/viewer/bin/viewer ができる.

3.Viwerを動かす
3.1 ターミナルにて
$ cd ${COLLADA-DOM}/viewer/bin
$ unzip samples.zip (unzipだとカレントフォルダにファイルができる)
$ ./viewer duck.dae


$ ./viewer mushroom.dae


4.SketchUpからexportしたkmzファイルに挑戦
4.1 Google SketchUp 6.0(6.4.245)にて
4.2 モデル作成
(ライブラリーより/ by Jack)
4.3 モデル出力(ファイル/書き出し/3D モデル…), Google Earth 4 (*.kmz)形式
4.4 出力したファイルの拡張子をkmzからzipに変更し, 展開.
4.5 展開後modelフォルダがあり,その中に*.daeファイルがある
4.6 作成したViewerをつかって表示してみる

QC: Quartz Composer のViwerを録画する

動機
某SNSで困ってる(「ムービーを保存または書出ししたい!」等)のを何回か見かけたのと,それへの回答が寄せられていたこと.おいら自身あったら便利そうだなと思ったから

やったこと1.'Render in Image(マクロ)パッチ'の使い方
とりあえず作ったQuartz Composerの絵(Viewer上で合成されている画)が欲しい(そいつを録画するから).そこでこいつ( Quartz Composerによるコンポジションの作成 )Render in Imageまでを学んでほしい.
ちなみにRender in Imageは最初っからQCに入ってるマクロパッチだ.

やったこと2.'MovieExporter'パッチを入れる.
2.1 /Developer/Examples/Quartz Composer/Plugins/MovieExporter フォルダを適当にコピーする(Desktopとか).
2.2 フォルダ内のMovieExporter.xcodeprojを開く(Xcodeで).
2.3 設定をアクティブな構成をRelease, アクティブなターゲットをBuild & Copyとする.

2.4 ビルド
(コピーまで実行してくれる. ${HOME}/Library/Graphics/Quartz Composer Plug-Ins/MovieExporter.plugin ができてる(ハズ).)

やったこと3.撮影(録画)
3.1 QuartzComposerでRender in Imageマクロパッチ(中身は自由に作成する)を配置する.
3.2 MovieExporterを配置してつなぐ.(ついでになにが起きているか見るためにbillboardもつけとく

3.3 MovieExporterのInspectorでファイルパスを設定,確認した後,Export Signalのチェックを入れる(録画開始)

3.4 同チェックをはずす(録画停止)
3.5 ファイルができているのを確認する.



参考
某SNSの掲示板の方々 ありがとうございます


おそらくスクリン・クロラ(お世話になってます!)を用いるのが一番簡単かもねw.

以上.

2008年11月18日火曜日

Quartz Composer: MatrixToParams (同次変換行列をパラメータに分解し,得るパッチ)

4x4の同次変換行列から各パラメータを抜き出して3D Transformationパッチに入れられるようにしてみた.

で,こんな感じ.
名前
MatrixToParams
謝辞
こちらを参考にしました.ありがとうございます.
制約
NSNumberにつめたdoubleを16個しまってあるNSArrayオブジェクトが入力です.これを同次変換行列とみなします.拡大縮小はないことが前提です.
作成環境
MBP (Intel) / MacOSX 10.5.5 / Xcode 3.1 / Quartz Composer 3.1
ビルド
アクティブターゲットを"Build & Copy", アクティブなビルド構成を"Release"にしてビルドすると'${HOME}/Library/Graphics/Quartz\ Composer\ Plug-Ins'の下に'MatrixToParams.plugin'ができてQCで使えるハズです.

使い方
同次変換行列からロール,ピッチ,ヨーおよび平行移動量を取り出します.3D Transformatinパッチにつなぐと便利です.

免責(?):
AS ISでお願いします.とりあえずなんだか動いたよって程度のものだと認識してくださいね.
ダウンロード:
ここ (2010/09/08 変更).
応用例
こんな感じ.


'3D Transformation'パッチの中


'Lighting'パッチの中


実行画面

X軸に90度倒れているのはSingleMarkerDetector(ARToolKit)の出力がそうだから.適当なパッチで90度まわせばOK.


ちなみにここで指摘はされているw.なんでMQOなの?っていわれたら工学ナビさんでARToolKitを知ってそのマネっ子から始めたから.っていう,そんだけなんだけどね.もともとSimpleLiteという一つのパッチで始めて,MQOの表示も一緒だったんだけど分けた方がQCっぽいなっていう安易な発想だったのでこうなったw.

久しぶりに逆運動学とか思い出したよw.

間違いやお気づきの点がありましたらコメントもらえるとうれしいです.

2008年11月14日金曜日

About 'Internal error occurred ... XCCompilerSpecification.m:267'

Maybe, the following error occur due to Xcode 3 early version(?) problem, new one don't happen.

Internal error occurred while creating dependency graph: ASSERTION FAILURE in /SourceCache/DevToolsBase/DevToolsBase-921/pbxcore/SpecificationTypes/XCCompilerSpecification.m:267


However when you met this error, you check your the 'Architectures' setting.
(WARNING: All documents in this site are non-guaranteed.)
1. select the project root item.

2. push Info. button (or apple + 'i'), the 'Project Info' panel is opened.

3. select 'build' tab.

4. see the 'Architectures' in 'Architectures' category.

5. select 'Native Architecture of Build Machine'. (... maybe)

6. close the panel.
7. build.

Quartz Composer / Sample qc project about SingleMarkerDetector and MQOImporter patchs

追記(2010/05/27): FYI 'ARToolKit Coordinate Correction in Quartz Composer'

Don't forget that the ARToolKit is distributed under the GPL for non-commercial user. So, this Single Marker Detector is distributed under the GPL for non-commercial user./If you want to use for professional and commercial, you can't use this patch.


edit(2008/11/28):Thank you for using it.
http://gimpneek.com/blog/2008/11/artoolkit-and-quartz-composer/

edit(2008/11/19): If you did not use the MQOImporter and used other rendering patch, you could use the 'MatrixToParams(download)' patch. the patch can use like these images.



need a mqo file. free MQO files are here.

1. create the "sample1" marker. (print out the "ARToolKit/etc/pattSample1.pdf" file. this file is in SingleMarkerDetector Xcode project.)

2. open Quartz Composer, and choose "Blank Coposition" template.
3. find "MQO Importer patch" from Patch Creator panel.

4. deploy the patch, and open the patch's inspector, select setting tab.


5. push the 'File' button, and set the mqo file. (ex. iMac model)

6. change the inspector tab to input parameters, and adj. the values (In this image's case, change the values about Scale, Angle-X and Y-axis).

7. deploy other patchs and connect the pathcs like following image. Billboard patch's layer number have to set smaller than MQOImporter patch's number.

8. show the printed marker image to the video camera, if the SingleMarkerDetector patch can detect your marker, the mqo objet move in synchronization with the marker motion.

Option:
9. add the lfo patch.



if you didn't know the ARToolKit and now you get interested in the ARToolKit, please check these applied activities on other platforms.

2008年11月13日木曜日

Quartz Composer / How to build the Xcode project of Quartz Composer custom patch.

Don't forget that the ARToolKit is distributed under the GPL for non-commercial user. So, this Single Marker Detector is distributed under the GPL for non-commercial user./If you want to use for professional and commercial, you can't use this patch.


edit 2008/11/18: I made new patch. the patch disassemble the 4x4 homogenous transformation matrix to each paramators. The patch name is 'MatrixToParams'.
images:

tips: About 'Internal error occurred ... XCCompilerSpecification.m:267'



need Xcode.app (about Xcode: http://developer.apple.com/tools/xcode/ ).


1. download the target Xcode project file (like SingleMarkDetector, MQOImporter MatrixToParams).
(download: SingleMarkDetector.zip, MQOImporter.zip, MatrixToParams.zip)
2. unarchive the file.
3. open the folder and double click the .xcodeproj file (open the project by Xcode).
4. click overview item and set "Active Configuration" to "Release".


5. click overview item and set "Active Target" to "Build & Copy".

6. click the build item. (start to build)

7. if successful, you can find the patch file at "${HOME}/Library/Graphics/Quartz Composer Plug-Ins/" folder.

8. if successful, you can find created patch name into the "Patch Creator" panel.

2008年11月12日水曜日

Quartz Composer / Single Marker Detector のXcodeプロジェクト 再び

追記(2010/05/27): FYI 'ARToolKit Coordinate Correction in Quartz Composer'

Don't forget that the ARToolKit is distributed under the GPL for non-commercial user. So, this Single Marker Detector is distributed under the GPL for non-commercial user./If you want to use for professional and commercial, you can't use this patch.
追記(2009/01/10):ダウンロード先のXcodeプロジェクトのzipファイルが壊れていたらしい.修復した.



GPLの配布ってどうすんのぉー.とこいつのことを悩んで忘れかけていたら某所(?)でご要望をいただいたので,突貫でやってみました.微妙にモデルの表示位置がおかしい気がする.などの問題はそのままです.

GPL配布についてはこちらを参考にさせていただきました.感謝!

ということでよろしくお願いします.
謝辞
ARToolKitの成果を利用させていただいています.ARToolKitフォルダ以下のコードやリソース類はARToolKit 2.72.1より配布されていたものです.ありがとうございます.
ライセンス
ARToolKitがnon-commercial利用ではGPL2なのでこれもnon-commercial利用に限ってのGPL2配布です.(あまりよくわかっていないので問題あればご指摘いただけると幸いです.)
そうでない人は使えません.
制約
MQO Importerパッチと連携すると便利です.これ自体は画像からパターンを見つけて変換マトリックスを出力するだけです.
作成環境
MBP (Intel) / MacOSX 10.5.5 / Xcode 3.1(確認 Quartz Composer 3.1)
ビルド
アクティブターゲットを"Build & Copy", アクティブなビルド構成を"Release"にしてビルドすると'${HOME}/Library/Graphics/Quartz\ Composer\ Plug-Ins'の下に'SingleMarkerDetector.plugin'ができてQCで使えるハズです.
使い方
1.QCにパッチを配置後,Video Inputのような画像をinputImageへつないでください.
2.マーカーの種類はパッチのSettingでsample1,2を選べます.画像はpattSample1.pdf, pattSample2.pdfに対応します.
3.うまく認識できれば'outputFound'がTrueに, 'outputMatrix'に出力がでます.
outputMatrixについて.変換の4x4行列が出力されます.立体モデルの座標を変換するための機能です.(中身は16個のdoubleをNSNumberに詰め込んでNSArrayで配列化したポートです.このdoubleの配列がglLoadMatrixdの引数とすればよい(ハズ)です.)
スナップショットのように接続する場合,注意点としてMQO ImporterのレイヤーがBillboardより大きい数字(合成上,手前(?))となるようにすることです.)
スナップショット

免責(?):
AS IS, 無保証でお願いします.とりあえずなんだか動いたよって程度のものだと認識してくださいね.
コードにおかしなところがありましたらご指摘いただけると幸いです.
ダウンロード:
こちらから (2010/09/08 変更)


配布状態に問題ありましたらご指摘ください.よろしくお願いします.
利用等でご不明の点ありましたらコメント等でご連絡ください.できる範囲で答えられたらなー.と思ってます.

2008年10月19日日曜日

NSProgressIndicatorのサンプルを作ってみた.

こちらのエントリーとその一連の流れをみて,何となくタイトルのまんま.Xcode 3.1.1で作ってみたプロジェクトです.こちら



プログレスバーの直感との差はJavaの時もそうでしたが,目的処理の進行バーの描画の進行がそれぞれ別スレッドにしないといけない点だろうか(わたしだけぇー?(だいたひかる風)).

また,そもそも描画というのは命令してすぐに画面に反映されないという辺りも,おそらく直感と差があるところだろうか(わたしだけぇー?(だいたひかる風)).
(描画の命令自体は処理されているが画面への反映はコンピュータ任せ(イベントスレッド終了待ち)ってあたり?)

NSThreadについてはこちらを参考にした.

getter/setterについてはこのエントリーの追記参照のこと.

間違いあればご指摘いただけると幸いです.

2008年10月15日水曜日

QCのパッチ / OpenCVのFaceDetecotrを入れてみる(再度)...

追記(2009/3/1):入出力の扱いはこっちがただしいかも.

追記(2009/2/15):
コロッと書くのを忘れていたが,出力部に関してはこちらを参照のこと!


先日のQRコードネタFaceDetector側も修正してみた.

#import <Quartz/Quartz.h>
#include <cv.h>
@interface OpenCV_FaceDetectorPlugIn : QCPlugIn
{
CvHaarClassifierCascade *cascade;
IplImage *src_img;
int prevW;
int prevH;

}
@property(assign) id<QCPlugInInputImageSource> inputSourceImage;
@property double outputHeight;
@property double outputWidth;
@property double outputY;
@property double outputX;
@property BOOL outputHasFound;

@end
...
@implementation OpenCV_FaceDetectorPlugIn
@dynamic inputSourceImage;
@dynamic outputHeight, outputWidth, outputY, outputX;
@dynamic outputHasFound;

...
- (id) init
{
if(self = [super init]) {
cascade= nil;
src_img= nil;
prevW= 0;
prevH= 0;

}
return self;
}...
- (BOOL) startExecution:(id<QCPlugInContext>)context
{
NSBundle* mainBundle = [NSBundle bundleWithIdentifier:@"com.yourcompany.OpenCV_FaceDetector"];
const char *cascade_name = [[mainBundle pathForResource:@"haarcascade_frontalface_default" ofType:@"xml"] UTF8String];
cascade = (CvHaarClassifierCascade *) cvLoad (cascade_name, 0, 0, 0);

return YES;
}
...
- (BOOL) execute:(id<QCPlugInContext>)context atTime:(NSTimeInterval)time withArguments:(NSDictionary*)arguments
{
id<QCPlugInInputImageSource> image= self.inputSourceImage;
if (!image) {
return YES;
}

[image lockBufferRepresentationWithPixelFormat:QCPlugInPixelFormatBGRA8
colorSpace:[image imageColorSpace]
forBounds:[image imageBounds]];
{
if (src_img==nil
|| prevW!=[image bufferPixelsWide]
|| prevH!=[image bufferPixelsHigh]){
if (src_img!=nil) {
cvReleaseImage(&src_img);
}
src_img= cvCreateImage(cvSize([image bufferPixelsWide], [image bufferPixelsHigh]), IPL_DEPTH_8U, 4);
prevW= [image bufferPixelsWide];
prevH= [image bufferPixelsHigh];
}
src_img->imageData= [image bufferBaseAddress];
//src_img->imageDataOrigin= [image bufferBaseAddress];


IplImage *src_gray = cvCreateImage (cvGetSize (src_img), IPL_DEPTH_8U, 1);
CvMemStorage *storage = cvCreateMemStorage (0);
cvClearMemStorage (storage);
cvCvtColor (src_img, src_gray, CV_BGRA2GRAY);
cvEqualizeHist (src_gray, src_gray);
CvSeq *faces = cvHaarDetectObjects (src_gray, cascade, storage, 1.11, 4, 0, cvSize (40, 40));
int i;
double resultA= 0.0;
CvRect *resultR;
for (i = 0; i < (faces ? faces->total : 0); i++) {
CvRect *r = (CvRect *) cvGetSeqElem (faces, i);
double tmpA= r->width * r->height;
if (resultA<tmpA) {
resultA= tmpA;
resultR= r;
}
}

self.outputHasFound= NO;
if (resultA>0.0) {
self.outputHasFound= YES;
self.outputX= resultR->x;
self.outputY= resultR->y;
self.outputWidth= resultR->width;
self.outputHeight= resultR->height;
}


cvReleaseImage (&src_gray);
cvReleaseMemStorage (&storage);

}
[image unlockBufferRepresentation];

return YES;
}
...
- (void) stopExecution:(id<QCPlugInContext>)context
{
if (src_img!=nil) {
cvReleaseImage(&src_img);
}

}
@end

一応,
イタリック体はIplImageを利用するための記述.
ボールド体は顔検出パッチ用の記述
というつもり.

追加ライブラリは
libcv.dylib, libcxcore.dylib
である.
追加リソースは
haarcascade_frontalface_default.xml (/opt/local/share/opencv/haarcascades/haarcascade_frontalface_default.xml)
である.
プロジェクトのインスペクタで以下を設定した.
アーキテクチャ/アーキテクチャ: Native Architecture of Build Machine
検索パス/ヘッダ検索パス: /opt/local/include/opencv


opencvをportで入れると/opt/local以下に入る.入れ方はこう
> sudo port install opencv


間違いをご指摘いただければ幸いです.

2008年10月5日日曜日

ではNSObjectControllerを挟んでみる.

(これを踏まえ,)ではNSObjectControllerを挟んでみる.
NSSliderをMyValueクラスのvという値と接続する例:
'NSSliderインスタンス'のValueを'MyValue Controller(NSObjectControllerのインスタンス)'にBindingする.
Value: Binding to MyObject Controller
Contorller Key: selection
Model Key Path: value


'MyObject Controller(NSObjectControllerのインスタンス)'のContent Objectを'MyObject(NSObjectのインスタンス(ClassをXcodeで作成しているMyObjectとしたもの))'にBindingする.
Content Object: Binding to MyObject
Model Key Path: self


MyObjectはNSObjectのインスタンスを用意してIdentityタブ中のClassでXcodeのクラスを指定すれば良い.


MyObjectはvaluesetValueのセレクター(メソッド)が動くようにしておくこと.例えば
- (double)value
{
return _value;
}
- (void)setValue:(double)v
{
_value= v;
}



サンプル
 こちら
作成環境
 MBP (Intel) / MacOSX 10.5.5 / Xcode 3.1


間違いがあるかもしれません.間違いをご指摘いただければ幸いです.
(まぁつまるところこの例ではMVCであることの意味はあまり無いということですね.)