AdobeのHTML5開発 Eg?
http://labs.adobe.com/technologies/edge/OpenGL ES上に日本語文字 on iPhone
http://dixq.net/forum/viewtopic.php?f=3&t=5904&hilit=opengl+es+%E6%96%87%E5%AD%97+%E5%88%97+%E8%A1%A8%E7%A4%BA見たがよくわからない
テクスチャを準備してそこに文字を記載するってやりかたであるようだ。
とりあえず文字列を渡してテクスチャのIDを返すメソッドを作成。
GLuint createCharTexture(NSString* str);
某本のgraphicUtil.hへ追加
// 文字を描画するテクスチャ GLuint createCharTexture(NSString* str){ GLuint texture; // 画像ファイルを展開しCGImageRefを生成 CGImageRef image = [UIImage imageNamed:@"moji_tex.png"].CGImage; // 画像の大きさを取得 size_t width = CGImageGetWidth(image); size_t height = CGImageGetHeight(image); GLubyte* imageData = (GLubyte *) malloc(width * height * 4); CGContextRef imageContext = CGBitmapContextCreate(imageData, width, height, 8, width * 4, CGImageGetColorSpace(image), kCGImageAlphaPremultipliedLast); CGContextDrawImage(imageContext, CGRectMake(0, 0, (CGFloat)width, (CGFloat)height), image); // 文字列を描画 ※フォントが小さいので100にした UIFont *tFont = [UIFont systemFontOfSize:100]; UIGraphicsPushContext(imageContext); // [[UIColor whiteColor] set];白のとき UIColor *color = [UIColor colorWithRed:0.0 green:0.5 blue:1.0 alpha:1.0]; [color set]; // テクスチャへ文字を記載(UIKitとCoreGraphics間の問題?座標系のY軸の上下反転される対策) CGContextScaleCTM(imageContext, 1, -1); CGContextTranslateCTM(imageContext, 0, -512/2); CGPoint point = CGPointMake(0.0f, 0.0f); [str drawAtPoint:point withFont:tFont]; UIGraphicsPopContext(); CGContextRelease(imageContext); // OpenGL用のテクスチャ生成 glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData); free(imageData); return texture; }
某iPhoneOpenGL本に出るgraphicUtil.mmへ追加する。
◯使用方法
透明で512×512pxのmoji_tex.pngを用意しXCodeのResourcesに格納。
@interface Hoge : GameBase {
GLuint mojiID;
・Hoge.hファイル
// initなど mojiID = createCharTexture(@"書きたい文字"); // 実際に記載 drawメソッドなどへ drawTextureは某本のメソッド drawTexture(100.0f, 100.0f, 128.0f, 128.0f, mojiID, 255, 255, 255, 255);
・Hoge.mファイル
とりあえずで、固定の色、大きさになっている・・・・。
今後、色やサイズを指定できるをようにしたい。
位置や文字数もおかしい・・・。
今後テクスチャには画像ファイルを用意せずにやれるならやりたいためにとりあえず、コードの断片をブログに置いておく(注意:今使えない)
↓
// 使えない CGRect imageRect; imageRect.origin = CGPointMake(0.0f, 0.0f); imageRect.size = CGSizeMake(512.0f, 512.0f); // コンテキストの生成 CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef imageContext = CGBitmapContextCreate(nil, // 最適なメモリ自動確保はnil imageRect.size.width, imageRect.size.height, 8, imageRect.size.width * 4, colorSpace, kCGImageAlphaPremultipliedLast); CGColorSpaceRelease(colorSpace); // イメージを取り出す CGImageRef image = CGBitmapContextCreateImage(imageContext); GLubyte* imageData = (GLubyte *) malloc(imageRect.size.width * imageRect.size.height * 4); ||< (注意:今使えない) <h3>NSSearchPathForDirectoriesInDomainsってなんだ??(iPhone)</h3> NSSearchPathForDirectoriesInDomainsが参照しているものを ブログによっては「特殊ディレクトリ」「文章フォルダ」「Documentsフォルダ」と どこを指してるか不明であった。 私のブログは殴り書きなのでいいが(w)、きちんと明記してほしい。 >|objc| NSLog(@"writableDBPath:%@", writableDBPath);
このサイトのコードを実行して上記のログみて理解した。
特殊ディレクトリDocumentsってのは
/Users/【ユーザ名】/Library/Application Support/iPhone Simulator/【シミュレータのバージョン】/Applications/【バージョン名みたいな文字の羅列】/Documents/
でした。
このサイトのサンプルは
// 例の「特殊ディレクトリ」 NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"sample.db"]; || になければ、 >|objc| // "Resources"フォルダへドラッグしたsqliteファイル(sample.db) NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"sample.db"];
からコピーされるって意味。
だから@"sample.db"のコピー元の名前を万が一ミスったら、特殊ディレクトリの中のsqliteファイルをデリートする
SQLite のラッパー「fmdb」が便利
ラッパークラスつくろうと思ったらfmdbがよさげhttp://tokyo.supersoftware.co.jp/tech/iphone/2011/01/082144.html
fmdbをさらに有効活用しているやり方
http://d.hatena.ne.jp/ttshrk/20110225/1298636841
https://github.com/ccgus/fmdb.git
これでfmdbフォルダごと落ちるのでディレクトリ作成しなくていい
↓中身
find fmdb/ -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g' |____ | |____.git | | |____branches | | |____config | | |____description | | |____HEAD | | |____hooks | | | |____applypatch-msg.sample | | | |____commit-msg.sample | | | |____post-commit.sample | | | |____post-receive.sample | | | |____post-update.sample | | | |____pre-applypatch.sample | | | |____pre-commit.sample | | | |____pre-rebase.sample | | | |____prepare-commit-msg.sample | | | |____update.sample | | |____index | | |____info | | | |____exclude | | |____logs | | | |____HEAD | | | |____refs | | | | |____heads | | | | | |____master | | |____objects | | | |____info | | | |____pack | | | | |____pack-9f4e6673d6c6fd1ec05fcf07fb91f66af078f279.idx | | | | |____pack-9f4e6673d6c6fd1ec05fcf07fb91f66af078f279.pack | | |____packed-refs | | |____refs | | | |____heads | | | | |____master | | | |____remotes | | | | |____origin | | | | | |____HEAD | | | |____tags | |____.gitignore | |____CHANGES_AND_TODO_LIST.txt | |____CONTRIBUTORS.txt | |____fmdb.1 | |____fmdb.xcodeproj | | |____project.pbxproj | |____fmdb_Prefix.pch | |____LICENSE.txt | |____README.markdown | |____src | | |____FMDatabase.h | | |____FMDatabase.m | | |____FMDatabaseAdditions.h | | |____FMDatabaseAdditions.m | | |____fmdb.m | | |____FMResultSet.h | | |____FMResultSet.m
#import "FMDatabase.h" #import "FMDatabaseAdditions.h" #import "FMResultSet.h"
hoge.hにfmdbの〜.hファイルのインポート忘れずに。〜.mはいらない
C++プログラマのための、最短 Objective-C 入門
C++プログラマでなくても便利→+-の意味を今日知った
http://kosuke-komiya.info/wiki/index.php?IntroductionObjectiveC
iPhoneアプリとデータベース(MySQL+PHP)連携
http://thinkit.co.jp/article/1210/1ここに「第2回 iPhoneアプリとデータベースサーバの連携」の記事がある
文字を読むのが煩わしいのであとでコピペで出来るようにまとめる
ソースコードとHOW TOでできるように記事書いてたらなぁ・・
まず、
「iPhone向けのプロジェクトはこちらからダウンロードしてください。 」の「こちら」から「PlantRental_r3.zip」ファイルをDL。
解答する
「PlantRental_r3」ディレクトリの中身
・plantrental.phpと「plantimages」・・・PHP用
・PlantRentalSales・・・iPhoneのプロジェクト
・XCodeでPlantRentalSalesのプロジェクトを開く
Project -> Edit Project Setting -> ポップアップで開いたウィンドウから「Build」タブ選択 -> Base SDKを選択 -> iOS 4.3とかにする
「RentalDB.m」をいじる
#define SERVER_URL @"https://msyk.net:1220/plantrental.php?" #define IMAGE_ROOT @"https://msyk.net:1220/plantimages/"
→この著者のサーバはもうサーバが死んでる
#define SERVER_URL @"http://localhost/rental/plantrental.php?" #define IMAGE_ROOT @"http://localhost/rental/plantimages/"
こう書き換える
PHP側では「rental」ってディレクトリを作成して配置する。
XMAPPのMySQLを起動
以下のようにすると「sample_schema.txt」からDBやテーブルやテストデータもろもろが作られる
※「sample_schema.txt」の中身でコメントアウトされているので注意!!
「web」ユーザと「password」パスワードがつく
#CREATE USER 'web'@'localhost' IDENTIFIED BY 'password';
#GRANT SELECT, INSERT, DELETE, UPDATE ON TABLE rental_db.* TO 'web';
↓
CREATE USER 'web'@'localhost' IDENTIFIED BY 'password'; GRANT SELECT, INSERT, DELETE, UPDATE ON TABLE rental_db.* TO 'web';
cd Downloads/PlantRental_r3 /Applications/xampp/xamppfiles/bin/mysql -u root -p < sample_schema.txt
XAMPPの初期パスワードは空欄みたいなので「Enter password: 」はそのままEnter!