トップページ > 記事閲覧
HitCheck_Line_Triangleについて
名前:PP 日時: 2020/11/07 20:13

線分と三角形の当たり判定を作るために以下のコードを実行したのですが、とある座標から判定がおかしくなってしまいます。 (0(接触していない)と1(接触している)の点滅が起こる) どうすればいいですか? #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(TRUE); HITRESULT_LINE Result; VECTOR Line1, Line2, Tri1, Tri2, Tri3; if (DxLib_Init() < 0) return -1; int X = 0, Y = 0; while (ProcessMessage() == 0) { SetDrawScreen(DX_SCREEN_BACK); ClearDrawScreen(); if (CheckHitKey(KEY_INPUT_RIGHT))X++; if (CheckHitKey(KEY_INPUT_LEFT))X--; if (CheckHitKey(KEY_INPUT_DOWN))Y--; if (CheckHitKey(KEY_INPUT_UP))Y++; // 線分の座標と三角形の座標をセット Line1 = VGet(100 + X, 0 + Y, 0); Line2 = VGet(200 + X, 300 + Y, 0); Tri1 = VGet(200, 200, 0); Tri2 = VGet(300, 200, 0); Tri3 = VGet(200, 400, 0); Result = HitCheck_Line_Triangle(Line1, Line2, Tri1, Tri2, Tri3); DrawTriangle3D(Tri1, Tri2, Tri3, GetColor(255, 255, 255), 1); DrawLine3D(Line1, Line2, GetColor(255, 255, 0)); DrawFormatString(0, 0, GetColor(255, 0, 0), "%d", Result.HitFlag); ScreenFlip(); } DxLib_End(); return 0; }
メンテ

Page: 1 |

Re: HitCheck_Line_Triangleについて ( No.1 )
名前:管理人 日時:2020/11/08 01:59

すみません、同一平面上にある線分と三角形の場合、線分の終点が三角形の内側にあると 『当たっていない』と判定されることがあるバグがありました こちらに修正版をアップしましたので、よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: HitCheck_Line_Triangleについて ( No.2 )
名前:PP 日時:2020/11/08 11:47

ありがとうございます。HitCheck_Line_Triangleについては無事に作動するようになりました。 それともう一つ質問させてもらって申し訳ないのですが、HitCheck_Triangle_Triangleについて、 2つの三角形の当たり判定が常に0を示すのですが、これは仕様なのでしょうか?それともバグなのでしょうか? #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ChangeWindowMode(TRUE); VECTOR Tri1, Tri2, Tri3, Tri4, Tri5, Tri6; int Result2; if (DxLib_Init() < 0) return -1; float X = 0, Y = 0; while (ProcessMessage() == 0) { SetDrawScreen(DX_SCREEN_BACK); ClearDrawScreen(); if (CheckHitKey(KEY_INPUT_RIGHT))X++; if (CheckHitKey(KEY_INPUT_LEFT))X--; if (CheckHitKey(KEY_INPUT_DOWN))Y--; if (CheckHitKey(KEY_INPUT_UP))Y++; // 三角形の座標をセット Tri1 = VGet(200, 200, 0); Tri2 = VGet(300, 200, 0); Tri3 = VGet(200, 400, 0); Tri4 = VGet(210+X, 210+Y,0); Tri5 = VGet(290+X, 210+Y, 0); Tri6 = VGet(210+X, 300+Y, 0); Result2 = HitCheck_Triangle_Triangle(Tri1, Tri2, Tri3, Tri4, Tri5, Tri6); DrawTriangle3D(Tri1, Tri2, Tri3, GetColor(255, 255, 255), 1); DrawTriangle3D(Tri4, Tri5, Tri6, GetColor(255, 0, 0), 1); DrawFormatString(0, 100, GetColor(0, 0, 255), "%d", Result2); ScreenFlip(); } DxLib_End(); return 0; }
メンテ
Re: HitCheck_Line_Triangleについて ( No.3 )
名前:管理人 日時:2020/11/08 23:34

> それともう一つ質問させてもらって申し訳ないのですが、HitCheck_Triangle_Triangleについて、 > 2つの三角形の当たり判定が常に0を示すのですが、これは仕様なのでしょうか?それともバグなのでしょうか? ご指摘ありがとうございます HitCheck_Triangle_Triangle についても、HitCheck_Line_Triangle と同様に 同一平面上にある三角形同士の当たり判定が正常に行われないバグがありました こちらに修正版をアップしましたので、何度も申し訳ありませんが よろしければお試しください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 10.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: HitCheck_Line_Triangleについて ( No.4 )
名前:PP(解決) 日時:2020/11/09 16:25

ありがとうございます! これでどちらもちゃんと判定されるようになりました!
メンテ

Page: 1 |

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

   クッキー保存