トップページ > 記事閲覧
HitCheck_Triangle_Triangle
名前:かげ 日時: 2013/08/10 23:57

HitCheck_Triangle_Triangleで以下のような判定をすると、当たっていないのに当たっている判定になります。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { int Result; VECTOR vec2[3],vec[3]; VECTOR CameraPos,CameraPos2 ; ChangeWindowMode( TRUE ) ; if( DxLib_Init() < 0 ){return -1 ;} SetDrawScreen( DX_SCREEN_BACK ) ; SetCameraNearFar( 500.0f, 2500000.0f ) ; SetUseZBuffer3D( TRUE ) ; SetWriteZBuffer3D( TRUE ) ; //三角形座標 vec2[0]=VGet(-210395.984f,-7457.25732f,-3220.00098f);vec2[1]=VGet(-213649.250f,0.0f,-17241.9922f);vec2[2]=VGet(-227638.953f,0.0f,-17241.9922f); vec[0]=VGet(-224441.688f,-7496.15771f,-3146.85645f);vec[1]=VGet(-227712.500f,31.8109550f,-17301.8066f);vec[2]=VGet(-241628.656f,0.0f,-17241.9922f); CameraPos=VGet(-226880.0f,-140.0f,-16420.0f); CameraPos2=VGet(8.0f,-162.0f,0.0f); while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { ClearDrawScreen() ; if( CheckHitKey( KEY_INPUT_UP ) == 1 ){CameraPos.z-=50.0f;}//ズーム if( CheckHitKey( KEY_INPUT_DOWN ) == 1 ){CameraPos.z+=50.0f;}//ズームアウト SetCameraPositionAndAngle( CameraPos, CameraPos2.x*DX_PI_F/180.0f, CameraPos2.y*DX_PI_F/180.0f, CameraPos2.z*DX_PI_F/180.0f ) ; DrawTriangle3D(vec2[0],vec2[1],vec2[2], GetColor(0,255,0),TRUE ) ; DrawTriangle3D(vec[0],vec[1],vec[2], GetColor(0,0,255),TRUE ) ; Result=HitCheck_Triangle_Triangle( vec2[0],vec2[1],vec2[2], vec[0],vec[1],vec[2] ); DrawFormatString( 0, 0, GetColor( 255 , 255 , 255 ),"判定結果: %d",Result); ScreenFlip() ; } DxLib_End() ; return 0 ; }
メンテ

Page: 1 |

Re: HitCheck_Triangle_Triangle ( No.1 )
名前:管理人 日時:2013/08/11 15:07

当たり判定の計算式は間違っていなかったのですが、float型の数値精度が原因で当たっていることになってしまっていました 少し工夫して精度が保たれるようにしましたので、よろしければこちらのバージョンをお試しになってみてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: HitCheck_Triangle_Triangle ( No.2 )
名前:かげ 日時:2013/08/17 22:46

対応ありがとうございます。 上の物は正常に判定されるようになったのですが、下の物など正常に判定されないものもあるようです。 //三角形座標 vec2[0]=VGet(-238383.750f,-7334.77881f,-45285.9766f);vec2[1]=VGet(-227638.953f,0.0f,-45285.9766f);vec2[2]=VGet(-241558.031f,0.0f,-59237.1758f); vec[0]=VGet(-255618.359f,0.0f,-59307.9688f);vec[1]=VGet(-241628.656f,0.0f,-59307.9688f);vec[2]=VGet(-255618.359f,0.0f,-73329.9609f); CameraPos=VGet(-239880.0f,1840.0f,-56420.0f); CameraPos2=VGet(28.0f,-162.0f,0.0f);
メンテ
Re: HitCheck_Triangle_Triangle ( No.3 )
名前:管理人 日時:2013/08/24 22:40

精度を保つための処理を調整してみましたので、よろしければお試しになってみてください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ
Re: HitCheck_Triangle_Triangle ( No.4 )
名前:かげ 日時:2013/08/27 21:25

今回も上の物は正常になったのですが、他にいくつも当たっていることになる物があります //三角形座標 vec2[0]=VGet(-241699.281f,0.0f,193017.047f);vec2[1]=VGet(-241628.656f,-7902.18896f,179065.859f);vec2[2]=VGet(-255618.359f,0.0f,179065.859f); vec[0]=VGet(-227638.953f,0.0f,207109.844f);vec[1]=VGet(-227638.953f,0.0f,193087.844f);vec[2]=VGet(-241628.656f,0.0f,193087.844f); CameraPos=VGet(-239699.281f,2000.0f,195017.047f); CameraPos2=VGet(28.0f,-162.0f,0.0f);
メンテ
Re: HitCheck_Triangle_Triangle ( No.5 )
名前:管理人 日時:2013/09/01 01:27

再度精度の調整をしてみましたので、よろしければお試しになってみてください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_DevCppTest.exe // Dev-C++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibGCC_MinGWTest.exe // MinGW 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』を、VCをお使いの場合は『リビルド』を、 Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
メンテ

Page: 1 |

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

   クッキー保存