線分の末端(EndPos)がマウスの位置ちょうどに来るようにしたいです。
多分Z座標のずれが問題だと思うのですが、それを直す術を知らないです。
よろしくお願いします。
// Source.cpp
#include"DxLib.h"
#define WINDOW_SIZE_X 1024
#define WINDOW_SIZE_Y 768
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
// ウィンドウモードで解像度を決定
ChangeWindowMode(TRUE), SetGraphMode(WINDOW_SIZE_X, WINDOW_SIZE_Y, 32);
// DxLibの初期化
if (DxLib_Init() == -1)return false;
// 描画先を裏画面に設定
SetDrawScreen(DX_SCREEN_BACK);
// ユーザー側で必要な物の初期化
SetCameraPositionAndTarget_UpVecY(VGet(0, 0, 1000), VGet(0, 0, 0));
SetCameraNearFar(0.f, 10000.f);
int ModelHandle = MV1LoadModel("ita.mqo");
MV1SetRotationXYZ(ModelHandle, VGet(90.0f * DX_PI_F / 180.0f, 0.f, 0.0f));
MV1SetPosition(ModelHandle, VGet(0.f, 0.f, 0.f));
MV1SetupCollInfo(ModelHandle, 0, 1, 1, 1);
int x, y;
VECTOR StartPos, EndPos;
MV1_COLL_RESULT_POLY HitPoly;
// ループ
while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen())
{
if (CheckHitKey(KEY_INPUT_ESCAPE) == 1)break;
GetMousePoint(&x, &y);
MV1DrawModel(ModelHandle);
// Z軸をカメラと重ねるとラインが見えなくなるので-1してます。
VECTOR StartPos = VGet(0, 0,999);
// ここが問題っぽい
VECTOR EndPos = VGet(-x + WINDOW_SIZE_X / 2, -y + WINDOW_SIZE_Y / 2,-1);
MV1_COLL_RESULT_POLY HitPoly = MV1CollCheck_Line(ModelHandle, 0, StartPos, EndPos);
if (HitPoly.HitFlag == 1)
{
EndPos = HitPoly.HitPosition;
}
DrawLine3D(StartPos, EndPos, GetColor(255, 255, 0));
DrawFormatString(0, 0, GetColor(255, 255, 255), "Hit:%d", HitPoly.HitFlag);
}
MV1DeleteModel(ModelHandle);
DxLib_End();
return 0;
}