ページ 1 / 1
DirectXで描画した2D画像を移動させると歪む
Posted: 2013年3月29日(金) 00:35
by 紙袋
現在、DirectXでプログラムを作成しています。そこで問題が発生したので解決方法を教えてください。
DirectXで2D画像を描画してそれをキー入力で移動させてみたのですが、
特定の何箇所かの位置に画像がいくと一部分が縦線が入ったように歪む(ガタつく?)現象が起きてしまいます。
描画の仕方に原因があるのかと思い、PrimitiveUp,Spriteの両方での描画を試したり、
誤差が原因と思い、描画する座標を指定する型を変えてみたりしたのですが解決しませんでした。
解決方法を知っている方がいましたら、教えてください。
以下に自分の環境を記載しておきます
OS:Windows 7 32bit
開発環境:visual studio 2012 express for windows desktop
使用ライブラリ:DirectX SDK (June 2010)
Re: DirectXで描画した2D画像を移動させると歪む
Posted: 2013年3月29日(金) 16:26
by ISLe
SpriteということはDirect3D9ですかね。
そうであれば以下の問題かと思います。
テクセルからピクセルへの直接的なマッピング (Direct3D 9)
頂点座標とテクスチャUV座標の基準にズレがあるため描画の際に歪みが発生する場合があります。
頂点座標から0.5引く、あるいはテクスチャUV座標に0.5足すことで正確に描画されるようになります。
Direct3D10以降は仕様が変更されて補正の必要がなくなりました。
Re: DirectXで描画した2D画像を移動させると歪む
Posted: 2013年3月31日(日) 00:27
by 紙袋
回答ありがとうございます。
座標に-0.5するというのはスプライトの4つの頂点の座標にということでいいのでしょうか?
上記で試してみたのですが、改善は見られませんでした。
何か他の所での問題なのでしょうか?
Re: DirectXで描画した2D画像を移動させると歪む
Posted: 2013年3月31日(日) 00:40
by ISLe
紙袋 さんが書きました:座標に-0.5するというのはスプライトの4つの頂点の座標にということでいいのでしょうか?
上記で試してみたのですが、改善は見られませんでした。
何か他の所での問題なのでしょうか?
テクセルのマッピング問題でなければビューポートあたりの設定でしょうかね。
縦線ならテアリングではないでしょうし。
現象を確認できる簡単なサンプルプログラムを作っていただくことはできないでしょうか。
どこに原因があるか分からないのでそのままコンパイルして実行ファイルが作れる完全なソースコードが望ましいです。
Re: DirectXで描画した2D画像を移動させると歪む
Posted: 2013年3月31日(日) 00:56
by 紙袋
描画と入力部分のみにしたコードを下記URLにアップしました。
コメント等をつけていないのですが、処理の種類ごとにソースを分割しており、
初期化処理:direct3D.cpp
テクスチャ:texture.cpp
スプライト:sprite.cpp
入力:input.cpp
となっています。
動かすと同梱の「test.png」画像の縦線、横線が歪む(細くなる?)現象が起こります。
確認のほうよろしくお願いします。
http://www1.axfc.net/uploader/so/2850680
Re: DirectXで描画した2D画像を移動させると歪む
Posted: 2013年3月31日(日) 16:53
by ISLe
ウィンドウを640x480で作成して、Direct3Dの描画バッファを640x480で作成してますね。
ウィンドウサイズというのは枠も含めた外側のサイズです。
クライアント領域が640x480になるようにウィンドウを作成しなければいけません。
AdjustWindowRect/AdjustWindowRectExで調べてください。
Re: DirectXで描画した2D画像を移動させると歪む
Posted: 2013年3月31日(日) 18:33
by 紙袋
症状が出ないことが確認出来ました!!
ウィンドウサイズとクライアント領域を一緒にしてはいけないのが原因だとは
気づけませんでした。
本当にありがとうございました。