テクスチャのサイズについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
紅蓮

テクスチャのサイズについて

#1

投稿記事 by 紅蓮 » 14年前

テクスチャのサイズについて疑問に思ったことがあります。
OpenGlなどの環境によっては画像サイズが2の2乗のサイズじゃないといけないことってありますよね?
あれって何か理由があるのでしょうか?
本などではあまり深いところまで書いてあるものを見たことがないので不思議でしょうがないです。

Rom

Re:テクスチャのサイズについて

#2

投稿記事 by Rom » 14年前

コンピュータでは0か1の2通りすべてのものをあらわす。
だから2のn乗。
DXライブラリでもたとえば100*100の画像を読み込むと
96*96の画像1つと4*4の画像をたくさん組み合わせて
100*100になるようにみせてるって聞いたことがあるよ。

あたっしゅ

Re:テクスチャのサイズについて

#3

投稿記事 by あたっしゅ » 14年前

96 は、2 の n 乗じゃないぞ。

Rom

Re:テクスチャのサイズについて

#4

投稿記事 by Rom » 14年前

おっと恥ずかしい。

96*96の画像だったら
64*64の画像1つと32*32の画像3つにわけられる。

とかきたかったのです。
ほんとにお恥ずかしい

めるぽん

Re:テクスチャのサイズについて

#5

投稿記事 by めるぽん » 14年前

画像の横幅が 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ライブラリが分割しているというのであればすごいですね。

toyo

Re:テクスチャのサイズについて

#6

投稿記事 by toyo » 14年前

3Dだとハードウェア側が2^nじゃないと動作しない場合があります
PSPでプログラムしてますがPSPもテクスチャは2^nじゃないとだめですし最大512までという制限もあります

ISLe

Re:テクスチャのサイズについて

#7

投稿記事 by ISLe » 14年前

> ただこれは横幅さえ 2 のべき乗であればいいので、縦幅も 2 のべき乗でないといけない理由は思いつかないですね(実際、縦は 2 のべき乗じゃなくてもテクスチャが作れる環境もあります)。
テクスチャ上のピクセル(テクセル?)座標(x,y)を求めるときに2^nサイズだとクリッピングをビットマスクで済ませることができるので高速に処理できます。

めるぽん

Re:テクスチャのサイズについて

#8

投稿記事 by めるぽん » 14年前

うーん、if ((unsigned int)y < height) と if (!(y >> n)) でそんなに差が出るとは思えないのですけれども、CPU や GPU レベルで見ると大分変わってくるのでしょうかね。

ISLe

Re:テクスチャのサイズについて

#9

投稿記事 by ISLe » 14年前

> if (!(y >> n))
テクセル座標を使うときに
ty = sy & ((1<<n)-1); // (1<<n)-1は事前に求めて使う
とすれば決してテクスチャをはみ出さないです。
ビット論理積演算ひとつですけど。

【編集】用語間違いを修正しました。
画像

めるぽん

Re:テクスチャのサイズについて

#10

投稿記事 by めるぽん » 14年前

タイル状に表示するならそれでいいと思いますが、タイル表示ってそんなによく使うのでしょうか?

ISLe

Re:テクスチャのサイズについて

#11

投稿記事 by ISLe » 14年前

> タイル表示ってそんなによく使うのでしょうか?
「タイル表示」がどんなイメージを指すのかちょっと分からないのですが、UV座標が1.0を超えるとテクスチャが繰り返し現れるのが一般的だと思います。

めるぽん

Re:テクスチャのサイズについて

#12

投稿記事 by めるぽん » 14年前

なるほど、それなら高さが 2 のべき乗になっている必要があるとするのも納得ですね。

閉鎖

“C言語何でも質問掲示板” へ戻る