頭と尻尾はくれてやる!

iOSアプリなどの開発日記です


Metalでテクスチャを持つdaeファイルを描画する

dae形式のデータをMetalで描画する場合、

scn/daeファイルから3DオブジェクトをMetalで描画する

↑ここではdaeファイルからSCNNodeオブジェクトとした後にMTKMeshオブジェクトを作成した。

今回、テクスチャ付きのdaeファイルを描こうとしたらすんなりといかなかった。

Xcodeで見たdaeファイル

↑Xcodeでプロジェクトに追加したdaeファイルを見てみるとこのように見える。
半球の表面にメモを書いてる。作成はBlender。

テクスチャ画像

↑ちなみにテクスチャ画像。
-(void)setupEyeballTexture
{
    MTKTextureLoader *textureLoader = [[MTKTextureLoader alloc] initWithDevice:device];
    
    UIImage *image = [UIImage imageNamed:@"parts.scnassets/eyeballTexture.png"];
    
    NSError *error = nil;
    eyeballTexture = [textureLoader newTextureWithCGImage:image.CGImage options:nil error:&error];
}
↑テクスチャの読み込みはこんな感じ(eyeball、つまり眼球をイメージしてる)。
これをフラグメントシェーダに渡し、描画してみると、、、

表示結果(間違い)

↑んー、、、?微妙なずれ方だな、、、全く表示されないわけでもないからテクスチャ座標がでたらめというわけでもないだろうし、、、何が起きてるんだろう?

いろいろと調べてようやく判明したのは、テクスチャ画像の上下を逆にすればOK。

頂点シェーダでフラグメントシェーダに渡す内容を
{
    //out.texCoords = in.texCoord;
    out.texCoords = float2(in.texCoord.x , 1.0-in.texCoord.y);
}
↑例えばこのようにして上下反転すれば、、、

表示結果(正常)

↑意図通りに表示された。
シェーダで余計な処理はしたくない!と思えばテクスチャ画像をあらかじめ上下反転させておいてもOK。

そういえばそういうものだったな、と後で気付いたわ。
スポンサーサイト




<< ARKitで眼球をオブジェクトとして描画してみる  TopPage  MTLTextureに値を出力してコンピュートシェーダで利用したい >>

コメント


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

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1296-ee21846f




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