ページ 11

DirectX9のスプライトについて質問なんですが。。。

Posted: 2014年4月18日(金) 23:53
by cloud
今DirectX9を使ってプログラミングをしているのですが、
スプライト処理で画面にビットマップ画像を以下のコードで
表示したんですが、

コード:

RECT rect = { 0, 0, 100, 100};
D3DXVECTOR3 center(0.0f, 0.0f, 0.0f);
lpSprite->Draw(lpTex, &rect, &center, NULL);
実際に描画されたのは(0, 0)~(100, 100)ではなく、
~(99, 99)の範囲でした。
これはどういった理由でなっているのでしょう。
内部でわざわざrect.right - 1, rect.bottom - 1が行われているのしょうか?
行われていたとして、それはなぜなのでしょうか?
どなたかご教授お願いします。

Re: DirectX9のスプライトについて質問なんですが。。。

Posted: 2014年4月20日(日) 15:22
by Tatu
そのように指定するのが楽だと考えられているからではないでしょうか。
100ピクセル×100ピクセルの四角形を書くときに
(0,0,99,99)と書くのと(0,0,100,100)と書くのとどっちが楽そうですか?
図.png
図.png (4.05 KiB) 閲覧数: 1818 回
ちなみにDXライブラリの四角形を書く関数での座標の指定も同様になっています。

Re: DirectX9のスプライトについて質問なんですが。。。

Posted: 2014年4月20日(日) 16:57
by softya(ソフト屋)
資料を見つけられなかったのですが、三角形ポリゴンが頂点を共有する都合で一番端の1ドットのラインを描画しないのと同じ仕組で描画されていたからでは無かったかと思います。憶測なのでDirectXでは都合が違うのかもしれませんので、こんな話もあるよ程度に聞いて頂ければ幸いです。

Re: DirectX9のスプライトについて質問なんですが。。。

Posted: 2014年4月20日(日) 17:32
by Mana
テクスチャ座標は、方眼紙に例えて升目でなく罫線を数えます。
罫線で囲まれたテクセル(テクスチャのピクセル)が描画されます。

自由変形するテクスチャではそのほうが対称性が高くなるからではないですかね、たぶん。
同じシンプルな処理を大量に繰り返すコードでは、ちょっとした対称性が地味に影響します。

画像の自由変形処理を自分で書いてアセンブラレベルまで最適化してみると実感できるかと。