トップページ > 記事閲覧
MV1SetRotationXYZの回転がおかしい
名前:みちゃっこ 日時: 2015/04/29 12:31

バージョンが3.13d以上の DXライブラリでMV1SetRotationXYZの回転がおかしくなります。 //ソースコード #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int ModelHandle ; float RotationY = 0.0f; // ウインドウモードに変更 ChangeWindowMode( TRUE ) ; // DXライブラリの初期化 if( DxLib_Init() < 0 ) { // エラーが発生したら直ちに終了 return -1 ; } // 描画先画面を裏にする SetDrawScreen( DX_SCREEN_BACK ) ; // 3Dモデルの読み込み ModelHandle = MV1LoadModel( "DxChara.x" ) ; // 画面に映る位置に3Dモデルを移動 MV1SetPosition( ModelHandle, VGet( 320.0f, -300.0f, 600.0f ) ) ; // ESCキーが押されるかウインドウが閉じられるまでループ while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { //画面を初期化 ClearDrawScreen(); // 3DモデルのY軸回転 RotationY += 0.2f; // 3DモデルのY軸の回転値をセットする(バージョンが3.13d以上だと回転が変になる。) MV1SetRotationXYZ( ModelHandle, VGet(0.0f, RotationY, 0.0f ) ) ; // 3Dモデルを描画 MV1DrawModel( ModelHandle ) ; // 裏画面の内容を表画面に反映します ScreenFlip() ; } // DXライブラリの後始末 DxLib_End() ; // ソフトの終了 return 0 ; } バージョンが3.13d以上だと回転が変になります。 3Dモデルを回転し続けると(34秒くらい) モデルの回転が遅くなったり速くなったりします。 バージョンが3.13b以下だと正常です。 私が書いたプログラムが間違っているでしょうか?? それともDXライブラリのバグでしょうか?? 環境はWindows 7 64bit CPU Core i7 3610QM RAM 8GB GPU Intel HD Graphics 4000
メンテ

Page: 1 |

Re: MV1SetRotationXYZの回転がおかしい ( No.1 )
名前:名前 日時:2015/04/29 16:16

v3.13f正式,v3.14正式後betaでやりましたが、 リーク、でもなくfloatの限界とかdえすかね、、 1回転するのに5秒くらいかかるようになってきますねw 手動win8→8.1u 32bit lenovo Flexpad10 intelHDgraphicカスタム
メンテ
Re: MV1SetRotationXYZの回転がおかしい ( No.2 )
名前:管理人 日時:2015/04/29 23:30

すみません、高速化のために角度の値から Sin, Cos の値を取得する処理を変更したのですが、 大体 - 2 * π 〜 2 * π くらいまでの範囲の値しか想定しておらず、名前さんの仰る通り 内部で行っている計算の過程で float では精度が足りなくなっていました 値が想定よりも大きくても正常に動作するように修正したバージョンを アップしましたので、よろしければお使いください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_DevCppTest.exe // Dev-C++ 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: MV1SetRotationXYZの回転がおかしい ( No.3 )
名前:みちゃっこ(解決) 日時:2015/04/29 23:55

修正ありがとうございます。 正常に回転できるようになりました。
メンテ
Re: MV1SetRotationXYZの回転がおかしい ( No.4 )
名前:横槍(解決) 日時:2015/05/09 15:43

値が範囲を超えた時に2πを引いたり足したりする処理を加ええればよかったのでは無いでしょうかね。。。 // 3DモデルのY軸回転 RotationY += 0.2f; if(RotationY > DX_PI_F * 2)RotationY -= DX_PI_F * 2; else if(RotationY < -DX_PI_F * 2)RotationY += DX_PI_F * 2;
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存