DirectXで描画した2D画像を移動させると歪む

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

DirectXで描画した2D画像を移動させると歪む

#1

投稿記事 by 紙袋 » 13年前

現在、DirectXでプログラムを作成しています。そこで問題が発生したので解決方法を教えてください。

DirectXで2D画像を描画してそれをキー入力で移動させてみたのですが、
特定の何箇所かの位置に画像がいくと一部分が縦線が入ったように歪む(ガタつく?)現象が起きてしまいます。

描画の仕方に原因があるのかと思い、PrimitiveUp,Spriteの両方での描画を試したり、
誤差が原因と思い、描画する座標を指定する型を変えてみたりしたのですが解決しませんでした。

解決方法を知っている方がいましたら、教えてください。


以下に自分の環境を記載しておきます
OS:Windows 7 32bit
開発環境:visual studio 2012 express for windows desktop
使用ライブラリ:DirectX SDK (June 2010)

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: DirectXで描画した2D画像を移動させると歪む

#2

投稿記事 by ISLe » 13年前

SpriteということはDirect3D9ですかね。

そうであれば以下の問題かと思います。
テクセルからピクセルへの直接的なマッピング (Direct3D 9)

頂点座標とテクスチャUV座標の基準にズレがあるため描画の際に歪みが発生する場合があります。
頂点座標から0.5引く、あるいはテクスチャUV座標に0.5足すことで正確に描画されるようになります。

Direct3D10以降は仕様が変更されて補正の必要がなくなりました。

紙袋

Re: DirectXで描画した2D画像を移動させると歪む

#3

投稿記事 by 紙袋 » 13年前

回答ありがとうございます。
座標に-0.5するというのはスプライトの4つの頂点の座標にということでいいのでしょうか?
上記で試してみたのですが、改善は見られませんでした。
何か他の所での問題なのでしょうか?

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: DirectXで描画した2D画像を移動させると歪む

#4

投稿記事 by ISLe » 13年前

紙袋 さんが書きました:座標に-0.5するというのはスプライトの4つの頂点の座標にということでいいのでしょうか?
上記で試してみたのですが、改善は見られませんでした。
何か他の所での問題なのでしょうか?
テクセルのマッピング問題でなければビューポートあたりの設定でしょうかね。
縦線ならテアリングではないでしょうし。

現象を確認できる簡単なサンプルプログラムを作っていただくことはできないでしょうか。
どこに原因があるか分からないのでそのままコンパイルして実行ファイルが作れる完全なソースコードが望ましいです。

紙袋

Re: DirectXで描画した2D画像を移動させると歪む

#5

投稿記事 by 紙袋 » 13年前

描画と入力部分のみにしたコードを下記URLにアップしました。
コメント等をつけていないのですが、処理の種類ごとにソースを分割しており、
初期化処理:direct3D.cpp
テクスチャ:texture.cpp
スプライト:sprite.cpp
入力:input.cpp
となっています。
動かすと同梱の「test.png」画像の縦線、横線が歪む(細くなる?)現象が起こります。
確認のほうよろしくお願いします。
http://www1.axfc.net/uploader/so/2850680

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: DirectXで描画した2D画像を移動させると歪む

#6

投稿記事 by ISLe » 13年前

ウィンドウを640x480で作成して、Direct3Dの描画バッファを640x480で作成してますね。

ウィンドウサイズというのは枠も含めた外側のサイズです。
クライアント領域が640x480になるようにウィンドウを作成しなければいけません。
AdjustWindowRect/AdjustWindowRectExで調べてください。

紙袋

Re: DirectXで描画した2D画像を移動させると歪む

#7

投稿記事 by 紙袋 » 13年前

症状が出ないことが確認出来ました!!

ウィンドウサイズとクライアント領域を一緒にしてはいけないのが原因だとは
気づけませんでした。

本当にありがとうございました。

閉鎖

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