• ベストアンサー

DirectX テクスチャの拡大

こんばんは。最近DirectXを始めたばかりの初心者です。 開発環境はWindows XP + Visual Studio 2005です。 テクスチャを読み込んでスプライトで表示しているのですが、 拡大・縮小をする場合に指定した位置に行かずずれて表示されてしまいます。 色々なサンプルを見てもよくわかりません。 方法をご回答頂けると嬉しいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • koedame
  • ベストアンサー率33% (10/30)
回答No.3

また、遅くなりました。 そうですね、簡単な例を使えば、 >D3DXMatrixScaling(&Mat1, 1.5, 1, 1); つい先日返答してくれたソースのこれの第二引数と第三引数が それにあたります。 つまり、スプライト描画するテクスチャのサイズを拡大して (この場合横1.5倍、縦1.0倍)表示してくれるのです。 まあ、微妙な回答で申し訳ない。 後、俺の記述したソースの D3DXMatrixTransformation2D(   &Mat,   NULL,   0,   &vec2,   NULL,//この部分(D3DXVECTOR2 型)回転の中心座標   0,//この部分(float 型)回転角度(ラジアン)   NULL ); 「この部分」って記述してあるところの数値を変更してみると 回転(角度の変更も可能でした。) 最後ですが俺もいい勉強になりました。 ありがとうございます。

skykey
質問者

お礼

ご回答ありがとうございます。 いや~、それにしてもDirectXって複雑ですね・・・。 もっとバージョンが下がるとさらにやる事が多くなっている筈ですから楽だと思うべきなのでしょうが・・・。 先人の努力に感謝しっぱなしです(^ ^;) 3回にわたる丁寧な解説に厚く御礼申し上げます。 これからも努力しいつか教える立場になりたいものです。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • koedame
  • ベストアンサー率33% (10/30)
回答No.2

ずいぶんお待たせしました。 ってもう自分で処理したよって・・・ orz そうでしたか。 まあ俺の研究を少し書き示します。 エーとこちらはあなたが返信いただいたものですが変更部分を まず書き示します。 LPDIRECT3DTEXTURE9 pTexture; // テクスチャ D3DXVECTOR3 Vec3Pos; // 表示位置 D3DXVECTOR2 Vec2Scale; // 拡大 D3DXMATRIX Mat; D3DXMatrixTransformation2D(&Mat, NULL, 0, &Vec2Scale, NULL, 0, NULL); pSprite->SetTransform(&Mat); pSprite->Draw(pTexture, NULL, NULL, &Vec3Pos, 0xFFFFFFFF); 私の研究では変更部分は D3DXMatrixTransformation2D() の第4引数Vec2Scale の値を変えてみてください。 Vec2Scale.x = 1.0;//1.0 は現尺2.5なら2.5倍の横幅に変化 Vec2Scale.y = 1.0;//1.0 は現尺2.5なら2.5倍の縦幅に変化 のようにやってみてください。 ちなみに私のソースみたいなものをコピペしときます。 それでも駄目ならもう一度返信してください。 LPD3DXSPRITE pSprite;//スプライトインターフェイス LPDIRECT3DTEXTURE9 pTexture;//スプライトに使うテクスチャー D3DXMATRIX Mat; D3DXVECTOR2 vec2; //拡大率 vec2.x = 1.5; vec2.y = 1; D3DXMatrixTransformation2D(   &Mat,   NULL,   0,   &vec2,   NULL,   0,   NULL ); pSprite->SetTransform(&Mat); pSprite->Draw(   pTexture,   NULL,   NULL,   &Position,   D3DCOLOR_ARGB(255,255,255,255) ); 出来る限りNULL とかで関係ない部分を削除しましたので わかると思います。

skykey
質問者

補足

ご回答ありがとうございます。 なんだか適当にやっていたら出来てしまいました(^ ^;) まるで異なる方法ですが・・・。 一応ソースコードを載せておきます。 LPD3DXSPRITE pSprite; // スプライト D3DXMATRIX Mat, Mat1, Mat2; D3DXMatrixScaling(&Mat1, 1.5, 1, 1); D3DXMatrixTranslation(&Mat2, 320, 16, 0); Mat = Mat1 * Mat2; pSprite->SetTransform(&Mat); pSprite->Draw(pTexture, NULL, NULL, NULL, 0xFFFFFFFF); こんな方法でいいんでしょうかねぇ・・・。 以前見たサンプルで掛け算があった気がしたので・・・。 自分でも何をしているのかよくわかっていません。 まず行列がわかりませんので(^ ^;) ところで Vec2Scale.x = 1.0;//1.0 は現尺2.5なら2.5倍の横幅に変化 Vec2Scale.y = 1.0;//1.0 は現尺2.5なら2.5倍の縦幅に変化 の部分が余り良くわからなかったのですが・・・。 お暇でしたらご回答いただけたら幸いです。

全文を見る
すると、全ての回答が全文表示されます。
  • koedame
  • ベストアンサー率33% (10/30)
回答No.1

とりあえずどのようにソースを組んでいるのかを 教えてください。下の容量で簡潔でいいので。 まあ、俺も出来なかったもの・・ですが、 協力しますよ。 LPD3DXSPRITE pSprite;//スプライトインターフェイス LPDIRECT3DTEXTURE9 pTexture;//スプライトに使うテクスチャー pSprite->Draw(   pTexture,  //テクスチャー   NULL,    //描画範囲   NULL,    //拡大率   NULL,    //回転の中心座標   0.0f     //回転角   NULL,    //平行移動の大きさ   D3DCOLOR_ARGB(255,255,255,255) ); //色   

skykey
質問者

補足

ご回答ありがとうございます。 ちなみに書き忘れていましたが、言語はC++です。 Vec3Pos, Vec2Scale には値が入っていると考えてください。 LPDIRECT3DTEXTURE9 pTexture; // テクスチャ D3DXVECTOR3 Vec3Pos; // 表示位置 D3DXVECTOR2 Vec2Scale; // 拡大 D3DXMATRIX Mat; D3DXMatrixTransformation2D(&Mat, NULL, 0, &Vec2Scale, NULL, 0, NULL); pSprite->SetTransform(&Mat); pSprite->Draw(pTexture, NULL, NULL, &Vec3Pos, 0xFFFFFFFF); ・・・といった感じで行っています。 Vec3Posで指定した座標に表示されず困っております。 恐らく拡大の中心が(0,0)になっているからだと思いますが、テクスチャの中心を拡大の中心にしても指定位置にいきませんし・・・。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • [DirectX9.0]テクスチャのサイズについて

    Visual C++ 6.0でDirectX9.0を使用しています。 画像ファイルからテクスチャを作り、それを画面に表示します。 その時に、画像ファイルのサイズが縦横どちらとも2の階乗の数字でないと、勝手に拡大表示されたりしてうまく表示されません。 数字が2の階乗でないサイズの画像ファイルを、テクスチャを使用してそのままの大きさで貼り付けるのにはどうすれば良いのでしょうか? よろしくお願いします。

  • DirectXのテクスチャについて

    DirectXを始めて2週間もたたないレベルの初心者です。 下記サイトを見ながら勉強しているのですが、1つわからないことがあります。 テクスチャをポリゴンに貼り付けるという作業のなかで 貼り付け先のポリゴンを選択するという部分がどれだかわらないのです。 普通に考えて、ポリゴンが複数ある場合テクスチャを作成してもどこに貼り付けるかわからなくなってしまいます。 どういう仕組みで貼り付け先のポリゴンを選択しているのか教えてください。 できれば、初心者の私にもわかりやすようにお願いします><。 開発環境 VisualStudio2008(C++) 参考サイト http://marupeke296.com/DXGSmp_No3_CreateTexture.html

  • テクスチャーの歪み

    開発環境 Visual Studio 2005, OS Windows XP , SDK 現在、画像処理ソフトの開発をしています。 画像をテクスチャに読み込んで四角ポリゴンに貼り付けて4隅を動かすことでhotoShopのような自由変形をさせようとしていますが三角ポリゴンの歪みが出てしまいます。 何か歪みが出ない方法がありましたら教えて頂けると助かります。 宜しくお願いします。

  • DirectX

    ラトルズ株式会社から出版されている15歳からはじめるDirectX9ゲームプログラミングC++編の第5章の関数ライブラリを作成するところでサンプルのソースプログラムを全て打ち込んだにも拘わらずウィンドウが表示されなくて困っています。どなたか同じ本を持ってる方、もしくはDirectXに詳しい方が居ましたら教えてほしいのですがよろしいでしょうか。 開発環境はVisual C++ 2008 Express Edition、DirectX SDK(June 2007)でOSはVistaです。

  • 何故か拡大表示されます

    最新版のDirectX SDKでゲームを作っています。 プログラムの勉強もつい先日始めたばかりで何もわかりませんが、よろしくお願いします。 さてお尋ねしたいのですが。 スプライトを描画したとき、何故か元のサイズより拡大されて表示されてしまうのですが、どうしてでしょうか。 48x48のddsファイルなのですが、64x64の大きさに認識されているようです。 RECTで表示領域を48x48と指定しているのですが、少し切れてしまっています。 描画するにあたっては、ごく単純なコードしか書いていません。 CTextureでファイルを読み込み、D3DXVECTOR2で位置を、、RECTで表示領域を指定。 D3DXMATRIXでマトリックスを作成し、ID3DXSpriteで描画しているだけです。 拡大して表示させるような変なコードは書いていないはずですが…

  • DIRECTXのスプライト描画で質問です

    いつもお世話になってます。 DIRECTX9.0、VC++6.0を使っています。 DIRECTXでLPDIRECT3DTEXTURE9(テクスチャ)とLPD3DXSPRITE(スプライト)を使って描画しています。 ですが、テクスチャの縦と横のサイズが256*256を超えたものが正常に表示できません。 色々調べてみると、縦と横のピクセル数が2の乗数以外の中途半端なサイズのテクスチャは、キリの良いサイズに変換されるみたいですが、一応縦横共に2の乗数のテクスチャなのにうまく表示できません。 例:768*512ピクセルのTGA形式のファイル 大きな画像ファイルを表示する方法はないでしょうか? どうぞ宜しくお願いします。

  • テクスチャがうまく表示されない[DirectX]

    こんにちわ。初歩的な質問かもしれませんが、よろしくお願いします。 テクスチャは読み込まれてはいるのですが、(色だけは表示される。違う画像にすると色が変わる)どうも模様が表示されず、画像どおりになりません。 とりあえず関係ありそうなコードだけ。。 -----頂点定義-------- struct CUSTOMVERTEX {FLOAT X,Y,Z; D3DVECTOR NORMAL; FLOAT U,V;}; #define CUSTOMFVF (D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1) ----頂点------ struct CUSTOMVERTEX t_vert[]={ {0.0f, 0.0f,0.0f,0,1,0, 0.0f, 0.0f,}, {-30.0f,0.0f,0.0f,0,1,0, 1.0f, 0.0f,}, {0.0f, 0.0f,30.0f,0,1,0, 0.0f, 1.0f,}, {-30.0f,0.0f,30.0f,0,1,0, 1.0f, 1.0f,}, }; -------描画処理------ d3ddev->SetStreamSource(0, t_buffer, 0, sizeof(CUSTOMVERTEX)); d3ddev->SetTexture( 0 , texture ); d3ddev->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2); ------------------------------------------------------------- テクスチャのサイズは512x512px、ライトはD3DRS_LIGHTNINGでTRUEにしてもFALSEにしても変化なし。 環境は以下のとおりです。 OS: WindowsXP コンパイラ:VisualStudio2005 DirectX9.0

  • DirectX9を使って球を動かすデモの作成

    当方DirectX初心者で、全く無学です。 先日DirectXに関する本を何冊か購入しまして、一読してみたのですが、全 く理解できませんでした…。 とりあえずDirectX9のシェーダー(?)で球を表示し、それをフルスクリー ンモードで画面の右から左に移動させるデモを作成したいのですが、プログ ラム(C++でお願いします)が全くわかりません。 浅薄な質問で申し訳ございませんが、よろしくお願い申し上げます。 なお、その際DirectX9対応のビデオカードがある場合は、ハードウェアで処理できるようにするプログラムを書いていただけると幸いです。 環境 Visual Studio .NET 2005 DirectX SDK - October 2006

  • DirectX 入門書

    こんにちは。 私は今までC++、WinAPIと学んできて、そろそろDirectXを使ってゲームを作りたいな、と思っています。 今まで色々なサイトを回ってきましたが、あまりしっくりくる物が無かったり、サンプルがコンパイル出来なかったりなので、何か入門書を買おうと思いました。 しかし、入門書と言ってもどれがわかりやすいのか、初心者向けなのか、という事がわからず迷いましたのでここに書き込ませていただきました。 今までに見てよさそうだな、と思った本は、 「書籍版 DirectX9実践プログラミング」 「DirectX9 DirectX Graphics」 「サンプルで学ぶDirectX9プログラミングテクニック」 の3つです。 これはいい、これは買わないほうがいい、また別にいい本がある、というご意見をお願いいたします。 もちろん「いいページがあるから本は買わなくてよい」や、「サンプルで理解せよ」等の意見もあればお願いします。 開発はVisal C++ 2005 Express Editionなので、注意点があれば教えていただけると嬉しいです。

  • DirectXのスプライト機能で3D回転

    http://oshiete1.goo.ne.jp/qa4484924.html 前回この質問をした者です。 疑問を整理して、もう一度質問させて貰います。 DirectX9.0cのスプライト機能で、X軸やY軸の回転のような3Dの変換は可能でしょうか? また前回での回答して頂いた事について一つ。 sprite->Begin(D3DXSPRITE_OBJECTSPACE)というフラグを指定した所、確かに3Dの回転を実現できました。 しかし今度はテクスチャの画像が表示されなくなり、白いポリゴンが表示されるようになってしまいました。これを解決する方法をご存じの方、どうかご教示下さい。 あるいはD3DXSPRITE_OBJECTSPACEを使ったサンプルソースなどが掲載されたHPや書籍をご存じでしたら、紹介して頂きたく思います。