- ベストアンサー
DirectXのスプライト機能で3D回転
- DirectX9.0cのスプライト機能で、X軸やY軸の回転のような3Dの変換は可能なのか疑問。
- 前回の回答では、sprite->Begin(D3DXSPRITE_OBJECTSPACE)フラグを指定することで3Dの回転が実現できたが、テクスチャの画像が表示されず白いポリゴンが表示される問題が発生。
- D3DXSPRITE_OBJECTSPACEを使ったサンプルソースや解決方法を知りたい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
2つ疑問があります。 ・デバイスの射影行列などは正しく設定されていますか? ・テクスチャを設定したときのポリゴンの色はテクスチャの一部の色でしたか? カメラの設定を 位置(0,0,0) 注視点(0,0,1) スプライト描画時のワールド座標変換行列を オフセット(0,0,5) 角度(0,0.005fなどを一定間隔で足す),0) スケーリング(1,1,1) スプライトの Draw の 引数には 1番めの引数 テクスチャのポインタ 2、3、4番めの引数 NULL 5番めの引数 0xFFFFFFFF これで描画してみてください。
その他の回答 (1)
- postal0x02
- ベストアンサー率42% (24/57)
メソッド:ID3DXSprite::Draw メソッド 概要:バッチ スプライトのリストに、スプライトを追加します。 構文: HRESULT Draw( LPDIRECT3DTEXTURE9 pTexture, CONST RECT *pSrcRect, CONST D3DXVECTOR3 *pCenter, CONST D3DXVECTOR3 *pPosition, D3DCOLOR Color ); >テクスチャの画像が表示されなくなり スプライトの描画時に Draw メソッドを呼んでいるはずです。 引数を見ればすぐ分かりますよ。
お礼
毎度毎度ご回答ありがとうございます。 >引数を見ればすぐ分かりますよ。 pTextureかpSrcRectの事かと思い指定してみたのですけど、変化なくやたらと大きな板ポリが表示されるのみでした。 ちょっとこれ以上は思いつかないので、もう少し詳しく教えて貰えないでしょうか?
補足
ふと思いついたのですが、テクスチャ画像はちゃんと表示されてるのかもしれません。 ただ板ポリゴンが大きすぎて画像に見えない、という可能性がありましたね。 といっても、解決方法がさっぱり分からない事には変わりないのですけど。
お礼
>・デバイスの射影行列などは正しく設定されていますか? とりあえず表示するのが目的だったので、ビューと射影の変換は単位行列で行いました。 >・テクスチャを設定したときのポリゴンの色はテクスチャの一部の色でしたか? 丁度使っていた画像の左下が白だったのが災いしました。 しかし今回のご指摘により、テクスチャの一部という事が確定しました。 描画してみたところ、前回同様で変わった所はありませんでした。 しかし、z値99.0fとオブジェクトをかなり遠くへ配置してみた所、変化がありました。画像の一部(全体の5%くらい)が確認できたのです。 以下、ご指摘を元に書いた変換部分のソースです。 D3DXMATRIXA16 mat,mat2; rad += 0.0001f; D3DXMatrixRotationX( &mat, rad ); D3DXMatrixTranslation( &mat2, -50.0f, -50.0f, 99.0f ); mat *= mat2; g_pd3dDevice->SetTransform( D3DTS_WORLD, &mat ); D3DXVECTOR3 vEyePt( 0.0f, 0.0f, 0.0f); D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 1.0f ); D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f ); D3DXMATRIXA16 matView; D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec ); g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView ); D3DXMATRIXA16 matProj; D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f ); g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
補足
すみません、また迂闊に書き込んでしまいました。 スケーリングを0.001にしてみたところ、オフセット(0,0,1.0)でほぼ全体像が見えるようになりました。 白い部分は左下じゃなくて、左上の部分ですね。(画像が上下逆になって表示されているので) それで気づいたんですけど、実は画像のサイズが500×500なんですよ。 ポリゴンのサイズ、500×500(512?)のような気がします。 ワールド空間でそんなポリゴン表示したら、やたら大きく表示されるはずですよね。