頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


Blenderで作った3DのデータをSwiftでMetalに使いた〜い2

頭と尻尾はくれてやる!/ Blenderで作った3DのデータをSwiftでMetalに使いた〜い!
↑この続きね。

その2 Objective-Cのファイルをかます

Swiftのファイル ← Cのデータファイル
↑これだとダメだったので考えた苦肉の策がこちら↓
Swiftのファイル ← Objective-C ← Cのデータファイル

間にObjective-Cのファイルをかましてみたのよ。ヘッダーはプロパティを設定してるだけなので略。実装側はこんなの。
//ObjcRobot.m
#import "ObjcRobot.h"
#import "robot3.h"

@implementation ObjcRobot

- (instancetype)init
{
    self = [super init];
    if (self) {
        self.vertices = robot3Vertices;
        self.positions = &robot3Positions[0];
    }
    return self;
}
@end
これをSwfitから使う。
{
    let objcRobot = ObjcRobot()
    println("objcRobot.vertices = \(objcRobot.vertices)")
    println("objcRobot.positions[0] = \(objcRobot.positions[0])")
    println("objcRobot.positions[1] = \(objcRobot.positions[1])")
    println("objcRobot.positions[2] = \(objcRobot.positions[2])”)
}
結果のスクショ

↑ふむ、アクセスできる。

これを使ってメモリ割り当て。
vertexBuffer = device.newBufferWithBytes(objcRobot.positions, length: dataSize, options: nil)
描画成功

↑ちゃんと動いた。まだただ白いだけだけど(フラグメントシェーダで白を返してるだけ)。

でもさ、、、一つのオブジェクトを表示するのに
robot3.h , robot3.c , ObjcRobot.h , ObjcRobot.m
みたいに四つもファイルが必要になるんだよなあ。
Swiftを勉強し始めて思ったのはヘッダーファイルと実装ファイルの両方を書かなくていいのってラクだなあということ。
そう思うとこの方法もなんだかねえ、、、なんて思ってさ。

もういっちょ続く。



<< World of Tanks Blitzって戦車の対戦ゲームがすごい  TopPage  Blenderで作った3DのデータをSwiftでMetalに使いた〜い! >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
http://ringsbell.blog117.fc2.com/tb.php/948-46751d20




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.

FC2Ad