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

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

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

#1

投稿記事 by cloud » 5年前

今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が行われているのしょうか?
行われていたとして、それはなぜなのでしょうか?
どなたかご教授お願いします。

アバター
Tatu
記事: 445
登録日時: 9年前
住所: 北海道

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

#2

投稿記事 by Tatu » 5年前

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

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

#3

投稿記事 by softya(ソフト屋) » 5年前

資料を見つけられなかったのですが、三角形ポリゴンが頂点を共有する都合で一番端の1ドットのラインを描画しないのと同じ仕組で描画されていたからでは無かったかと思います。憶測なのでDirectXでは都合が違うのかもしれませんので、こんな話もあるよ程度に聞いて頂ければ幸いです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Mana

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

#4

投稿記事 by Mana » 5年前

テクスチャ座標は、方眼紙に例えて升目でなく罫線を数えます。
罫線で囲まれたテクセル(テクスチャのピクセル)が描画されます。

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

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

閉鎖

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