ページ 1 / 1
テクスチャのサイズについて
Posted: 2010年11月10日(水) 01:37
by 紅蓮
テクスチャのサイズについて疑問に思ったことがあります。
OpenGlなどの環境によっては画像サイズが2の2乗のサイズじゃないといけないことってありますよね?
あれって何か理由があるのでしょうか?
本などではあまり深いところまで書いてあるものを見たことがないので不思議でしょうがないです。
Re:テクスチャのサイズについて
Posted: 2010年11月10日(水) 18:10
by Rom
コンピュータでは0か1の2通りすべてのものをあらわす。
だから2のn乗。
DXライブラリでもたとえば100*100の画像を読み込むと
96*96の画像1つと4*4の画像をたくさん組み合わせて
100*100になるようにみせてるって聞いたことがあるよ。
Re:テクスチャのサイズについて
Posted: 2010年11月11日(木) 07:05
by あたっしゅ
96 は、2 の n 乗じゃないぞ。
Re:テクスチャのサイズについて
Posted: 2010年11月11日(木) 16:49
by Rom
おっと恥ずかしい。
96*96の画像だったら
64*64の画像1つと32*32の画像3つにわけられる。
とかきたかったのです。
ほんとにお恥ずかしい
Re:テクスチャのサイズについて
Posted: 2010年11月12日(金) 06:23
by めるぽん
画像の横幅が 2 のべき乗であると処理が高速化できるからじゃないでしょうか。
例えば 64*32 の画像の、ある一点(x,y)を調べるときには、pixels[(y << 6) + x] とすれば求められることになります。
これが 65*32 とかだった場合、pixels[(y * 65) + x] と、乗算を使うので効率が悪いです。
ただこれは横幅さえ 2 のべき乗であればいいので、縦幅も 2 のべき乗でないといけない理由は思いつかないですね(実際、縦は 2 のべき乗じゃなくてもテクスチャが作れる環境もあります)。
あと、手元の本によると、OpenGL 2.0 からは 2 のべき乗でないといけないっていう制限は無くなっているらしいのですけれども、ちゃんとは調べていないです。
>96*96の画像だったら
>64*64の画像1つと32*32の画像3つにわけられる。
画像を分けちゃうと拡大縮小とかする際に補間の処理を考えるのがかなり面倒なので、96*96 の画像なら、テクスチャは 128*128 の画像を用意するのが一般的だと思いますが、DXライブラリが分割しているというのであればすごいですね。
Re:テクスチャのサイズについて
Posted: 2010年11月12日(金) 07:43
by toyo
3Dだとハードウェア側が2^nじゃないと動作しない場合があります
PSPでプログラムしてますがPSPもテクスチャは2^nじゃないとだめですし最大512までという制限もあります
Re:テクスチャのサイズについて
Posted: 2010年11月12日(金) 18:01
by ISLe
> ただこれは横幅さえ 2 のべき乗であればいいので、縦幅も 2 のべき乗でないといけない理由は思いつかないですね(実際、縦は 2 のべき乗じゃなくてもテクスチャが作れる環境もあります)。
テクスチャ上のピクセル(テクセル?)座標(x,y)を求めるときに2^nサイズだとクリッピングをビットマスクで済ませることができるので高速に処理できます。
Re:テクスチャのサイズについて
Posted: 2010年11月13日(土) 11:11
by めるぽん
うーん、if ((unsigned int)y < height) と if (!(y >> n)) でそんなに差が出るとは思えないのですけれども、CPU や GPU レベルで見ると大分変わってくるのでしょうかね。
Re:テクスチャのサイズについて
Posted: 2010年11月13日(土) 17:48
by ISLe
> if (!(y >> n))
テクセル座標を使うときに
ty = sy & ((1<<n)-1); // (1<<n)-1は事前に求めて使う
とすれば決してテクスチャをはみ出さないです。
ビット論理積演算ひとつですけど。
【編集】用語間違いを修正しました。

Re:テクスチャのサイズについて
Posted: 2010年11月13日(土) 18:16
by めるぽん
タイル状に表示するならそれでいいと思いますが、タイル表示ってそんなによく使うのでしょうか?
Re:テクスチャのサイズについて
Posted: 2010年11月13日(土) 18:26
by ISLe
> タイル表示ってそんなによく使うのでしょうか?
「タイル表示」がどんなイメージを指すのかちょっと分からないのですが、UV座標が1.0を超えるとテクスチャが繰り返し現れるのが一般的だと思います。
Re:テクスチャのサイズについて
Posted: 2010年11月13日(土) 18:47
by めるぽん
なるほど、それなら高さが 2 のべき乗になっている必要があるとするのも納得ですね。