閉じる

UI言語[UI Language]

記事自体は翻訳されません! 記事によって英語版があったりなかったりします。翻訳がある記事は文頭に記載があるよ!
Each articles themselves will not be translated by this setting. Some of article has translation and some of them doesn't. You will notice if the article has its translation by its preamble!

テーマ[Theme]


アイキャッチ画像

iPhoneでGL_TEXTURE_MAG_FILTERが効かない?

5年以上経ってる事を念頭に置いて読んでね!

iPhoneのOpenGLにて、小さいテクスチャを拡大して描画する時の話です。テクスチャの描画にはglDrawTexiOESを使っていて、線形補完はナシ、つまりGL_NEARESTで描画したかったのです。

GL_TEXTURE_MIN_FILTERおよびGL_TEXTURE_MAG_FILTERはこのように指定しました。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

つまり、縮小時は線形補完、拡大時は最近傍描画というわけです。これで3*5ピクセルの小さいテクスチャを100倍くらいで描画した結果がこれ。

iPhone シミュレーター

iPod touch

ご覧の通りiPhone シミュレーターは補完なしで希望通り描画されていますが、iPod touchではバリ線形補完かかっちゃってます。カコワルイ( ・∀・)

そこで今度は両方にGL_NEARESTを指定してみました。つまりこんな感じ。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

するとあら不思議、iPod touch上でもちゃんと希望通り描画されました。実機ではGL_TEXTURE_MIN_FILTERが拡大もかねてるんですかね?

よくわかりませんがうまく出来たのでよしとします。iPod touchしか持ってないのでiPhoneでどうなるかわかりませんが、そんな細かいところに違いがあるとも思えないのできっと同じでしょう。さすがにiPhone 3GSでは挙動が違うでしょうけども。

それにしてもOpenGLで描画してみると、iPhoneが意外と非力なのにびっくりします。すごいグラフィックのゲームがいっぱいあるのでパワーがあるのかと思いきや、みんなちゃんとプログラムで最適化がんがんかけてるんですねーきっと。GL_BLENDを極力使わないとか、glBindTextureを最小限にするとかは基本ですかね。シミュレーターで作ってから実機に転送したら遅くて使い物にならなかったり、あー苦手苦手。そういうのまとめた本ないかな……

この記事のタグ[This article is filed under]: 開発[Dev] | iPhone[iPhone] | OpenGL[OpenGL] | トラブル[Trouble]


この記事はここで終わりです。
読んでいただきありがとうございました。
良かったらシェアしてね!

That's all for this article. Thank you for your reading.
Please share this if you like it!

Twitter | Reddit | Facebook | Pinterest | Pocket

前の記事[Prev Post]

前の記事のアイキャッチ画像

iMac壊れた。買ってからわずか10日目。

次の記事[Next Post]

次の記事のアイキャッチ画像

iMacのメモリが届いた。