回転について質問です。

[戻る]
df 2006/10/29(日) 16:49:40
DirectX9のID3DXSprite::Draw()メソッドで、回転角をfloat型のラジアンで渡すのです
が、例えば45度回転させる場合は、ラジアンで渡すので
Rotate = 45 / 180 * M_PI
となると思うのですが、どの回転角度(45、90、135、180)で試しても、
どれも同じに描画されてしまいます。
角度の求め方が間違っているのと思うのですが、原因がわからず困っています。

ee 2006/10/29(日) 17:19:25
45 / 180
の部分が整数同士の除算なので0になっていると思う。

PATIO 2006/10/30(月) 10:37:17
eeさんの意見に同じですけれど、

これってビルド時に警告が出ませんでしったけ?
開発環境が良く分からないから何とも言いかねますけれど。
警告が出たときは警告の内容をきちんと把握した上で
対処を決めないと駄目ですよ。
もし、コンパイルオプションで警告レベルを下げているのであれば、
止めた方が良いです。
警告を無くすようにコーディングした方がバグも潰せますから。

PATIO 2006/10/30(月) 10:38:26
ちなみに警告ってwarningの事です。

Ban 2006/10/30(月) 15:20:01
# 定数0で除算しているわけではなく、整数演算で割り算した結果が0になるだけなので、
# C++としては意図通りの挙動ですし、lint系のツールでもでもかけない限り静的な警告はでないで
しょう。
# 少なくともVC7.1ではLevel4でも警告は出ませんでした。(これが0除算ならerror C2124ですが)
# 警告が出る前提でのお小言はどうでしょうか。

PATIO 2006/10/30(月) 17:01:02
すいません、確認までしてから書き込むべきでした。
0除算ではなくて型変換の警告が出るかと思ったんですが、
出ませんね。
良く考えたら逆の場合は出るんでしょうけれど、
longからfloatならでないですね。
floatからlongなら出るだろうけれど。
失礼しました。

df 2006/10/30(月) 18:51:21
[[解決]]
みなさんが仰られている通りにどうやら整数で割っていた為に正確な値が取れていなか
ったようです。
DirectDrawの時はこの記述で動いていたのですが、たまたま上手く動作していただけみ
たいですね。
今度からきちんと正確な値を代入してみます。
回答してくださりありがとうございました。助かりました。

Ban 2006/10/31(火) 12:43:08
#蛇足ですが、提示の45や180は(Lもないので)longではなくintで、int→float。

古いスレッドには追加発言できません。