public void AddRot(float rot) { var mr = DX.MGetRotY(rot); target_rot = DX.VTransform(target_rot, mr); _UpdateCameraPos(); }
public ActionShootArrow(int start_wait, RouteAsShoot route_as_shoot, bool is_success) { this.timer_start_wait = start_wait; this.is_success = is_success; this.route_as_shoot = route_as_shoot; model_arrow = ModelManager.RentModel("戦闘/矢"); var start_x = route_as_shoot.start_x * correct; var start_y = route_as_shoot.start_y * correct + 20.0f; var start_z = route_as_shoot.start_z * correct; var end_x = route_as_shoot.end_x * correct; var end_y = route_as_shoot.end_y * correct; var end_z = route_as_shoot.end_z * correct; route_xz_list = new List <Point>(route_as_shoot.route_pos_list_xz); route_y_list = new List <Point>(route_as_shoot.route_pos_list_route); direction_list = new List <RouteAsShoot.ExDPoint>(route_as_shoot.direction_list_route); correct_time_to_xz = (double)route_xz_list.Count() / shoot_time; correct_time_to_y = (double)route_y_list.Count() / shoot_time; // 弓の向きを計算 // もともとのモデルが -x方向に向いているのでこのような計算になる rot_y = (float)(Math.PI - route_as_shoot.direction); model_arrow.Rot(0, rot_y, 0); start_pos = DX.VGet(start_x, start_y, start_z); }
/// <summary> /// カメラの移動処理 /// </summary> public void Proc() { //カメラの設定 DX.VECTOR TempPosCalc1; DX.VECTOR TempPosCalc2; DX.VECTOR CameraLookAtPos; // 注視点はキャラクターモデルの座標から CamHeight 分だけ高い位置 CameraLookAtPos = this.move; CameraLookAtPos.y += this.CamHeight; // 最初に垂直角度を反映した位置を算出 this.CamVecSin = Math.Sin(this.VAngle / 180.0f * Math.PI); this.CamVecCos = Math.Cos(this.VAngle / 180.0f * Math.PI); TempPosCalc1.x = 0.0f; TempPosCalc1.y = (float)this.CamVecSin * this.CamDist; TempPosCalc1.z = (float)-this.CamVecCos * this.CamDist; // 次に水平角度を反映した位置を算出 this.CamVecSin = Math.Sin(this.HAngle / 180.0f * Math.PI); this.CamVecCos = Math.Cos(this.HAngle / 180.0f * Math.PI); TempPosCalc2.x = (float)this.CamVecCos * TempPosCalc1.x - (float)this.CamVecSin * TempPosCalc1.z; TempPosCalc2.y = TempPosCalc1.y; TempPosCalc2.z = (float)this.CamVecSin * TempPosCalc1.x + (float)this.CamVecCos * TempPosCalc1.z; // 算出した座標に注視点の位置を加算したものがカメラの位置 this.pos = DX.VAdd(TempPosCalc2, CameraLookAtPos); // カメラの設定に反映する DX.SetCameraPositionAndTarget_UpVecY(this.pos, CameraLookAtPos); return; }
/// <summary> /// 初期化 /// </summary> /// <param name="p">ファイルパス</param> /// <param name="stpos">最初の位置</param> /// <param name="ang">最初の角度</param> /// <param name="sc">最初の大きさ</param> void Init(string p, DX.VECTOR stpos, DX.VECTOR ang, DX.VECTOR sc) { //3Dモデルの読み込み this.filePath = p; this.handle = DX.MV1LoadModel(this.filePath); if (this.handle == -1) { //読み込みエラー MessageBox.Show(this.filePath + LoadErrHonbun, LoadErrTitle, MessageBoxButtons.OK, MessageBoxIcon.Error); Game.GetInstance().Exit(); //ゲーム異常終了 } //位置の設定 this.pos = stpos; DX.MV1SetPosition(this.handle, this.pos); //角度の設定 this.angle = ang; DX.MV1SetRotationXYZ(this.handle, this.angle); //大きさの設定 this.scale = sc; DX.MV1SetScale(this.handle, this.scale); //描画設定 this.IsDraw = true; //当たり判定の初期化(当たり判定のメッシュを分割) DX.MV1SetupCollInfo(this.handle, -1, 24, 24, 24); //当たり判定の更新 this.CollUpdate(); }
public void MoveFront(float move_front) { var rev_rot = DX.VGet(-target_rot.x, target_rot.y, -target_rot.z); // カメラの方向と逆方向(y座標無視) var v = DX.VScale(rev_rot, move_front); target_pos = DX.VAdd(target_pos, v); _UpdateCameraPos(); }
void _UpdateCameraPos() { var v = DX.VScale(target_rot, distance); var s = DX.VAdd(target_pos, v); s = DX.VAdd(s, DX.VGet(0, camera_height, 0)); camera_pos = s; }
public G3DCamera() { camera_height = 100.0f; target_pos = DX.VGet(45f, 0, 45f); target_rot = DX.VNorm(DX.VGet(-10, 0, -10)); distance = 100f; _UpdateCameraPos(); _NotToFixHard(); // 初期値はゆるやかな変更をさせない }
public BackGround(string _ghandle) { Ghandle = DX.LoadGraph(_ghandle); timer = 0; vert = new DX.VERTEX3D[6]; InitVertex(); myscreen = DX.MakeScreen(1280, 720); CameraPos = new DX.VECTOR(); InitCamPos(40.0f, 0.0f, -200.0f); InitTarPos(0.0f, 0.0f, 0.0f); }
// Yを軸とした方向を指定して移動量を決めて移動 // かつ、方向の基準はカメラのローカル角 public void MoveYRot(float move, float y_rot) { // たぶん、ここのしきおかしい 90度と-90度でしかテストしてないからわからないけど・・・ var rev_rot = DX.VGet(-target_rot.x, target_rot.y, -target_rot.z); // カメラの方向と逆方向(y座標無視) //var v = DX.VScale(rev_rot, move); var y_rot2 = y_rot / 180.0 * Math.PI; var y_rot2_v = DX.VNorm(DX.VGet(0, (float)Math.Sin(y_rot2), 0)); // y_rotで指定されたベクトルを方向だけにして取得 var v = DX.VCross(rev_rot, y_rot2_v); v = DX.VScale(v, move); target_pos = DX.VAdd(target_pos, v); _UpdateCameraPos(); }
public Game(string _game_path) { path = _game_path; try { ScreenShot = DX.LoadGraph(System.IO.Directory.GetFiles(_game_path, "*.PNG").First().ToString()); } catch { //ScreenShot = DX.LoadGraph(System.IO.Directory.GetFiles(_game_path, "*.png").ToString()); } theta = 0.0f; r = 100.0f; Pos = new DX.VECTOR(); LoadReadme(); readme_y = 0; }
// ゆるやかに現在座標を最終座標に変更する // 引数で effect の値を変えれたほうがいいかも... void _NowToFixFloatVector(ref DX.VECTOR now, ref DX.VECTOR fix) { if (now.x != fix.x || now.y != fix.y || now.z != fix.z ) { var effect = 0.08f; var fix_to_min = 0.05f; now.x = now.x + ((fix.x - now.x) * effect); now.y = now.y + ((fix.y - now.y) * effect); now.z = now.z + ((fix.z - now.z) * effect); var v = 0.0f; v = fix.x - now.x; if (v < 0) { v = -v; } if (v < fix_to_min) { now.x = fix.x; } v = fix.y - now.y; if (v < 0) { v = -v; } if (v < fix_to_min) { now.y = fix.y; } v = fix.z - now.z; if (v < 0) { v = -v; } if (v < fix_to_min) { now.z = fix.z; } } }
/// <summary> /// 位置を設定 /// </summary> /// <param name="vec"></param> public void SetPos(DX.VECTOR vec) { this.pos = vec; }
/// <summary> /// コンストラクタ /// </summary> /// <param name="p">ファイルパス</param> /// <param name="stpos">最初の位置</param> /// <param name="ang">最初の角度</param> /// <param name="sc">最初の大きさ</param> public Model3D(string p, DX.VECTOR stpos, DX.VECTOR ang, DX.VECTOR sc) { Init(p, stpos, ang, sc); }
private double Cross2D(DX.VECTOR a, DX.VECTOR b) { return((double)a.x * b.y - (double)a.y * b.x); }
void Model_Load() { float Shadow_Size = 500f; float Shadow_Height = 250f; DX.VECTOR Shadow_Angle = DX.VGet(-0.5f, -0.75f, 0.5f); Task task = Task.Run(() => { DX.ChangeLightTypeDir(DX.VGet(0f, 0.0f, 2.0f)); DX.MV1SetLoadModel_PMD_PMX_AnimationFPSMode(120); if (!File.Exists(Path + "/Resources/Setting.dat")) { MessageBox.Show("設定ファイルが存在しませんでした。\n付属のソフトで作成してください。"); return; } //別ソフトで指定した設定を反映 XDocument Setting_01 = XDocument.Load(Path + "/Resources/Setting.dat"); XElement Setting_02 = Setting_01.Element("Setting_Save"); if (!File.Exists(Path + "/Load_Data.dat")) { ModelHandle_00 = DX.MV1LoadModel(Path + "/Resources/Chara/IA/Model.mv1"); ModelHandle_01 = DX.MV1LoadModel(Path + "/Resources/Chara/Test_01/Model.mv1"); ModelHandle_02 = DX.MV1LoadModel(Path + "/Resources/Chara/Alice/Model.mv1"); MusicHandle = DX.LoadSoundMem(Path + "/Resources/Music/Default.mp3"); Player.URL = Path + "/Resources/Music/Default.mp3"; First_Music_Pitch = DX.GetFrequencySoundMem(MusicHandle); Model_Number = 3; //カメラのモーションがあれば反映 if (File.Exists(Path + "/Resources/Camera.vmd")) { CameraHandle1 = DX.MV1LoadModel(Path + "/Resources/Camera.vmd"); Camera_Number_First++; } if (File.Exists(Path + "/Resources/Camera1.vmd")) { CameraHandle2 = DX.MV1LoadModel(Path + "/Resources/Camera1.vmd"); Camera_Number_First++; } if (File.Exists(Path + "/Resources/Camera2.vmd")) { CameraHandle3 = DX.MV1LoadModel(Path + "/Resources/Camera2.vmd"); Camera_Number_First++; } } else { try { //別ソフトで指定したモデルやカメラをロード XDocument item_01 = XDocument.Load(Path + "/Load_Data.dat"); XElement item_02 = item_01.Element("Save"); int Number = int.Parse(item_02.Element("MMD_Number_C").Value); Model_Number = int.Parse(item_02.Element("MMD_Number_C").Value); //カメラのモーションがあれば反映 if (File.Exists(Path + "/Resources/UserCamera1.vmd")) { CameraHandle1 = DX.MV1LoadModel(Path + "/Resources/UserCamera1.vmd"); Camera_Number_First++; } if (File.Exists(Path + "/Resources/UserCamera2.vmd")) { CameraHandle2 = DX.MV1LoadModel(Path + "/Resources/UserCamera2.vmd"); Camera_Number_First++; } if (File.Exists(Path + "/Resources/UserCamera3.vmd")) { CameraHandle3 = DX.MV1LoadModel(Path + "/Resources/UserCamera3.vmd"); Camera_Number_First++; } int ZERO = 1; while (true) { if (ZERO == 1) { ModelHandle_00 = DX.MV1LoadModel(Path + "/Resources/Chara/1/Model.mv1"); } else if (ZERO == 2) { ModelHandle_01 = DX.MV1LoadModel(Path + "/Resources/Chara/2/Model.mv1"); } else if (ZERO == 3) { ModelHandle_02 = DX.MV1LoadModel(Path + "/Resources/Chara/3/Model.mv1"); } else if (ZERO == 4) { ModelHandle_03 = DX.MV1LoadModel(Path + "/Resources/Chara/4/Model.mv1"); } else if (ZERO == 5) { ModelHandle_04 = DX.MV1LoadModel(Path + "/Resources/Chara/5/Model.mv1"); } if (ZERO >= Number) { break; } ZERO++; } if (item_02.Element("Music_Path").Value != "") { //曲を指定 MusicHandle = DX.LoadSoundMem(Path + "/Resources/Music/UserMusic" + System.IO.Path.GetExtension(item_02.Element("Music_Path").Value)); Player.URL = Path + "/Resources/Music/UserMusic" + System.IO.Path.GetExtension(item_02.Element("Music_Path").Value); First_Music_Pitch = DX.GetFrequencySoundMem(MusicHandle); } } catch { MessageBox.Show("ユーザーデータが破損しています。もう一度作り直す必要があります。"); return; } } try { //設定ファイルから情報に応じて設定 //マップ if (Setting_02.Element("Map_Select").Value == "0") { //町 MapHandle = DX.MV1LoadModel(Path + "/Resources/Map/Stage/サン・マルコ広場_Ver1.00.mv1"); SkyHandle = DX.MV1LoadModel(Path + "/Resources/Sky/Dome_X503.mv1"); OceanHandle = DX.MV1LoadModel(Path + "/Resources/Map/Ocean/Ocean.mv1"); DX.MV1SetScale(MapHandle, DX.VGet(10f, 10f, 10f)); DX.MV1SetScale(OceanHandle, DX.VGet(10f, 10f, 10f)); DX.MV1SetScale(SkyHandle, DX.VGet(10f, 10f, 10f)); DX.MV1SetPosition(MapHandle, DX.VGet(-20f, 0f, -300f)); DX.MV1SetPosition(OceanHandle, DX.VGet(-20f, -35f, -100f)); DX.MV1SetRotationXYZ(MapHandle, DX.VGet(0f, 0.15f, 0f)); } else if (Setting_02.Element("Map_Select").Value == "1") { //宇宙 MapHandle = DX.MV1LoadModel(Path + "/Resources/Map/Space/Model.mv1"); SkyHandle = DX.MV1LoadModel(Path + "/Resources/Sky/Dome_X503.mv1"); DX.MV1SetScale(MapHandle, DX.VGet(1f, 1f, 1f)); DX.MV1SetScale(SkyHandle, DX.VGet(10f, 10f, 10f)); DX.MV1SetPosition(MapHandle, DX.VGet(0f, 0.43f, 40f)); DX.MV1SetRotationXYZ(MapHandle, DX.VGet(0f, 0f, 0f)); Shadow_Size = 100f; Shadow_Height = 50f; } else if (Setting_02.Element("Map_Select").Value == "2") { //ユーザーマップ XDocument item_01 = XDocument.Load(Path + "/Resources/Map_Setting.dat"); XElement item_02 = item_01.Element("Map_Setting"); MapHandle = DX.MV1LoadModel(Path + "/Resources/Map/UserMap/Model.mv1"); float Size = float.Parse(item_02.Element("Map_Scale").Value); float Map_X = float.Parse(item_02.Element("Map_X").Value); float Map_Y = float.Parse(item_02.Element("Map_Y").Value); float Map_Z = float.Parse(item_02.Element("Map_Z").Value); int Map_Rotate_Y = int.Parse(item_02.Element("Map_Rotate").Value); if (bool.Parse(item_02.Element("Sky_Enable").Value)) { SkyHandle = DX.MV1LoadModel(Path + "/Resources/Sky/Dome_X503.mv1"); } DX.MV1SetScale(MapHandle, DX.VGet(Size, Size, Size)); DX.MV1SetPosition(MapHandle, DX.VGet(Map_X, Map_Y, Map_Z)); DX.MV1SetRotationXYZ(MapHandle, DX.VGet(0f, Map_Rotate_Y * 3.141592f / 180f, 0f)); } //モデル同士の間隔が0でなければロード if (Setting_02.Element("Model_Position").Value != "0") { IsModelPositionDistance = true; Model_Position_Change_By_SettingFile(float.Parse(Setting_02.Element("Model_Position").Value)); } else { IsModelPositionDistance = false; } //ライト 0が有効で1が無効 if (Setting_02.Element("Light_Select").Value == "0") { DX.SetLightEnable(DX.TRUE); ShaderHandle = DX.LoadGraph(Path + "/Resources/Effects/Shader.png"); if (Setting_02.Element("Map_Select").Value == "1") { DX.ChangeLightTypePoint(DX.VGet(-500f, 850f, -100f), 10000f, 0.01f, 0.01f, 0.01f); DX.CreatePointLightHandle(DX.VGet(0f, 100f, 500f), 1500f, 0f, 0.00125f, 0f); DX.CreatePointLightHandle(DX.VGet(0f, 100f, -500f), 1500f, 0f, 0.00125f, 0f); } else { DX.ChangeLightTypePoint(DX.VGet(-500f, 850f, -100f), 10000f, 0.01f, 0.01f, 0.01f); DX.CreatePointLightHandle(DX.VGet(0f, 1000f, 500f), 1500f, 0f, 0.00125f, 0f); DX.CreatePointLightHandle(DX.VGet(0f, 1000f, -500f), 1500f, 0f, 0.00125f, 0f); } DX.SetLightAngle(1f, -1f); } else if (Setting_02.Element("Light_Select").Value == "1") { //ライトが無効の場合かつホラーモードが有効か DX.SetLightEnable(DX.FALSE); if (Setting_02.Element("Horror_Select").Value == "0") { DX.CreatePointLightHandle(DX.VGet(0f, 1000f, 0f), 500f, 0f, 0.00525f, 0f); } else if (Setting_02.Element("Map_Select").Value == "0" || Setting_02.Element("Map_Select").Value == "1") { SkyHandle = DX.MV1LoadModel(Path + "/Resources/Sky/Moon.mv1"); IsHorror_Mode_And_Map_0 = true; } else if (Setting_02.Element("Map_Select").Value == "2") { if (Setting_02.Element("Horror_Sky_Select").Value == "0") { SkyHandle = DX.MV1LoadModel(Path + "/Resources/Sky/Moon.mv1"); IsHorror_Mode_And_Map_0 = true; } } } if (Setting_02.Element("Music_Mode").Value == "0") { IsWMPUse = false; } else { IsWMPUse = true; } IsShadowMode = bool.Parse(Setting_02.Element("Shadow_Mode").Value); if (IsShadowMode) { if (int.Parse(Setting_02.Element("Shadow_Angle").Value) == 0) { Shadow_Angle = DX.VGet(-0.5f, -0.75f, 0.5f); } else if (int.Parse(Setting_02.Element("Shadow_Angle").Value) == 1) { Shadow_Angle = DX.VGet(0.5f, -0.75f, 0.5f); } else if (int.Parse(Setting_02.Element("Shadow_Angle").Value) == 2) { Shadow_Angle = DX.VGet(-0.5f, -0.75f, -0.5f); } else if (int.Parse(Setting_02.Element("Shadow_Angle").Value) == 3) { Shadow_Angle = DX.VGet(0.5f, -0.75f, -0.5f); } } //ピッチや音量をセット First_Music_Pitch = DX.GetFrequencySoundMem(MusicHandle); Music_Volume = int.Parse(Setting_02.Element("Volume").Value); Pitch_Set = double.Parse(Setting_02.Element("Pitch").Value); PlayTime_Plus_Temp_Kakeru = float.Parse(Setting_02.Element("Pitch").Value); Pan = int.Parse(Setting_02.Element("Pan").Value); DX.ChangePanSoundMem(Pan, MusicHandle); Pitch_Set_Void(); } catch { File.Delete(Path + "/Resources/Setting.dat"); MessageBox.Show("設定ファイルが破損しているので削除しました。。\n付属のソフトで作成してください。\nソフトは強制終了されます。"); return; } if (File.Exists(Path + "/Resources/Advance_Setting.dat")) { //詳細設定のファイルがあればロード try { //マウス感度、ピッチの幅、モデル1~5の位置、FPSなど XDocument Setting_03 = XDocument.Load(Path + "/Resources/Advance_Setting.dat"); XElement Setting_04 = Setting_03.Element("Advance_Save"); Mouse_Sensitivity = int.Parse(Setting_04.Element("Mouse_Sensitivity").Value); Pitch_Change_Size = double.Parse(Setting_04.Element("Pitch_Interval").Value); IsModelPositionSet = bool.Parse(Setting_04.Element("IsModelPositionSet").Value); if (IsModelPositionSet) { Model_Position_01 = DX.VGet(float.Parse(Setting_04.Element("Model_01_X").Value), float.Parse(Setting_04.Element("Model_01_Y").Value), float.Parse(Setting_04.Element("Model_01_Z").Value)); Model_Position_02 = DX.VGet(float.Parse(Setting_04.Element("Model_02_X").Value), float.Parse(Setting_04.Element("Model_02_Y").Value), float.Parse(Setting_04.Element("Model_02_Z").Value)); Model_Position_03 = DX.VGet(float.Parse(Setting_04.Element("Model_03_X").Value), float.Parse(Setting_04.Element("Model_03_Y").Value), float.Parse(Setting_04.Element("Model_03_Z").Value)); Model_Position_04 = DX.VGet(float.Parse(Setting_04.Element("Model_04_X").Value), float.Parse(Setting_04.Element("Model_04_Y").Value), float.Parse(Setting_04.Element("Model_04_Z").Value)); Model_Position_05 = DX.VGet(float.Parse(Setting_04.Element("Model_05_X").Value), float.Parse(Setting_04.Element("Model_05_Y").Value), float.Parse(Setting_04.Element("Model_05_Z").Value)); } Pitch_Min = double.Parse(Setting_04.Element("Pitch_Min").Value); Pitch_Max = double.Parse(Setting_04.Element("Pitch_Max").Value); IsFrameRateLock = bool.Parse(Setting_04.Element("FrameRateLock").Value); IsMusicNotChange = bool.Parse(Setting_04.Element("IsMusicNotChange").Value); IsPhysicsSet = bool.Parse(Setting_04.Element("IsPhysicsSet").Value); IsModelPhysicsSet = bool.Parse(Setting_04.Element("IsModelPhysicsSet").Value); int FPS_01 = int.Parse(Setting_04.Element("FPS").Value); //FPSの値によってモーションの速度が異なるため指定する if (FPS_01 == 0) { PlayTime_Plus = 1f; PlayTime_Plus_Temp = 1f; FPS = 30; FPS_Kakeru = 1.4f; } else if (FPS_01 == 1) { PlayTime_Plus = 0.5f; PlayTime_Plus_Temp = 0.5f; FPS = 60; FPS_Kakeru = 0.7f; } else if (FPS_01 == 2) { PlayTime_Plus = 0.25f; PlayTime_Plus_Temp = 0.25f; FPS = 120; FPS_Kakeru = 0.35f; } } catch { File.Delete(Path + "/Resources/Advance_Setting.dat"); MessageBox.Show("詳細設定のファイルが破損しているので削除しました、もう一度作成する必要があります。\nソフトは強制終了されます。"); return; } } if (Model_Number >= 1) { Model_Physics_00 = DX.MV1LoadModel(Path + "/Resources/Map/Coll/Model.mv1"); } if (Model_Number >= 2) { Model_Physics_01 = DX.MV1LoadModel(Path + "/Resources/Map/Coll/Model.mv1"); } if (Model_Number >= 3) { Model_Physics_02 = DX.MV1LoadModel(Path + "/Resources/Map/Coll/Model.mv1"); } if (Model_Number >= 4) { Model_Physics_03 = DX.MV1LoadModel(Path + "/Resources/Map/Coll/Model.mv1"); } if (Model_Number >= 5) { Model_Physics_04 = DX.MV1LoadModel(Path + "/Resources/Map/Coll/Model.mv1"); } Model_Shadow_00 = DX.MakeShadowMap(8192, 8192); Map_Shadow_00 = DX.MakeShadowMap(16384, 16384); DX.SetShadowMapLightDirection(Model_Shadow_00, Shadow_Angle); DX.SetShadowMapLightDirection(Map_Shadow_00, Shadow_Angle); DX.SetLightDirection(Shadow_Angle); DX.SetShadowMapDrawArea(Model_Shadow_00, DX.VGet(-30f, -1f, -30f), DX.VGet(30f, 30f, 30f)); DX.SetShadowMapDrawArea(Map_Shadow_00, DX.VGet(-Shadow_Size, -1f, -Shadow_Size), DX.VGet(Shadow_Size, Shadow_Height, Shadow_Size)); DX.ShadowMap_DrawSetup(Map_Shadow_00); DX.MV1DrawModel(MapHandle); DX.ShadowMap_DrawEnd(); DX.MV1SetupCollInfo(MapHandle, -1); DX.MV1SetupCollInfo(Model_Physics_00, -1); DX.MV1SetupCollInfo(Model_Physics_01, -1); DX.MV1SetupCollInfo(Model_Physics_02, -1); DX.MV1SetupCollInfo(Model_Physics_03, -1); DX.MV1SetupCollInfo(Model_Physics_04, -1); //モデルの初期位置を設定 DX.MV1SetScale(SkyHandle, DX.VGet(50f, 50f, 50f)); DX.MV1SetRotationXYZ(SkyHandle, DX.VGet(0f, 0f, 0f)); DX.MV1SetLoadModelUsePhysicsMode(DX.DX_LOADMODEL_PHYSICS_REALTIME); DX.MV1SetScale(ModelHandle_00, DX.VGet(1f, 1f, 1f)); DX.MV1SetRotationXYZ(ModelHandle_00, DX.VGet(0f, 1.5f, 0f)); DX.MV1SetScale(ModelHandle_01, DX.VGet(1f, 1f, 1f)); DX.MV1SetRotationXYZ(ModelHandle_01, DX.VGet(0f, 1.5f, 0f)); DX.MV1SetScale(ModelHandle_02, DX.VGet(1f, 1f, 1f)); DX.MV1SetRotationXYZ(ModelHandle_02, DX.VGet(0f, 1.5f, 0f)); DX.MV1SetScale(ModelHandle_03, DX.VGet(1f, 1f, 1f)); DX.MV1SetRotationXYZ(ModelHandle_03, DX.VGet(0f, 1.5f, 0f)); DX.MV1SetScale(ModelHandle_04, DX.VGet(1f, 1f, 1f)); DX.MV1SetRotationXYZ(ModelHandle_04, DX.VGet(0f, 1.5f, 0f)); DX.SetCameraNearFar(1f, 10000.0f); DX.SetCameraPositionAndTarget_UpVecY(DX.VGet(0.0f, 3f, -5.0f), DX.VGet(0f, 0f, 0f)); if (IsWMPUse) { Player.controls.play(); Player.settings.volume = Music_Volume / 255 * 100; } else { Player.settings.volume = 100; Player.controls.stop(); DX.PlaySoundMem(MusicHandle, DX.DX_PLAYTYPE_LOOP, DX.FALSE); DX.ChangeVolumeSoundMem(Music_Volume, MusicHandle); } PlayTime = 10f; }); task.Wait(); Load_T.Visible = false; IsShowMessageBox = false; Dance_Loop(); TopMost = true; Focus(); Activate(); }
private void setVec(ref DX.VECTOR vec, float x, float y, float z) { vec.x = x; vec.y = y; vec.z = z; }
private void setVec(ref DX.VECTOR vec, float v) { vec.x = v; vec.y = v; vec.z = v; }
public void RotAdd(float x, float y, float z) { rot = DX.VGet(rot.x + x, rot.y + y, rot.z + z); DX.MV1SetRotationXYZ(model_handle, rot); }
public void Scale(float x, float y, float z) { scale = DX.VGet(x, y, z); DX.MV1SetScale(model_handle, scale); }
public void Pos(float x, float y, float z) { pos = DX.VGet(x, y, z); DX.MV1SetPosition(model_handle, pos); }
public void Rot(float x, float y, float z) { rot = DX.VGet(x, y, z); DX.MV1SetRotationXYZ(model_handle, rot); }
public void SetPos(int i, int totalnum) { theta = (float)i / totalnum; Pos = DX.VGet(r * (float)Math.Cos(TransToRad(theta)) - 200.0f, r * (float)Math.Sin(TransToRad(theta)), 20.0f); }
/*private void Form1_DragEnter(object sender, DragEventArgs e) * { * //ファイルがドラッグされた場合のみ受け付け * if(e.Data.GetDataPresent(DataFormats.FileDrop)) * { * e.Effect = DragDropEffects.Copy; * } * else * { * e.Effect = DragDropEffects.None; * } * } * * private void Form1_DragDrop(object sender, DragEventArgs e) * { * string[] path = (string[])e.Data.GetData(DataFormats.FileDrop, false); //ドロップされたファイルのパスを取得する * var ids = new List<long>(); * * //各画像をアップロードしIDを取得 * foreach(var p in path) * { * MediaUploadResult image = token.Media.Upload(media: new FileInfo(p)); * ids.Add(image.MediaId); * } * * //画像をツイートする * Status s = token.Statuses.Update(status: "Upload Image", media_ids: ids); * }*/ /// <summary> /// マウスクリック時のモデルの移動処理 /// </summary> private void ModelMove() { int MouseX, MouseY; DX.GetMousePoint(out MouseX, out MouseY); PrevInput = NowInput; NowInput = DX.GetMouseInput(); EdgeInput = NowInput & ~PrevInput; //既にモデルを掴んでいるかどうかで処理を分岐 if (Catch == 0) { // 掴んでいない場合 //左クリックされたらモデルをクリックしたかを調べる if ((EdgeInput & DX.MOUSE_INPUT_1) != 0) { DX.VECTOR ScreenPos1; DX.VECTOR ScreenPos2; DX.VECTOR WorldPos1; DX.VECTOR WorldPos2; //モデルとの当たり判定用の線分の2座標を作成 ScreenPos1.x = (float)MouseX; ScreenPos1.y = (float)MouseY; ScreenPos1.z = 0.0f; ScreenPos2.x = (float)MouseX; ScreenPos2.y = (float)MouseY; ScreenPos2.z = 1.0f; WorldPos1 = DX.ConvScreenPosToWorldPos(ScreenPos1); WorldPos2 = DX.ConvScreenPosToWorldPos(ScreenPos2); //モデルの当たり判定情報を更新 DX.MV1RefreshCollInfo(modelHandle, -1); DX.MV1_COLL_RESULT_POLY Result = DX.MV1CollCheck_Line(modelHandle, -1, WorldPos1, WorldPos2); if (Result.HitFlag == DX.TRUE) { Catch = 1; //掴んだときのスクリーン座標を保存 CatchMouseX = MouseX; CatchMouseY = MouseY; //掴んだときのモデルのワールド座標を保存 Catch3DModelPosition = DX.MV1GetPosition(modelHandle); //掴んだときのモデルと線分が当たった座標を保存( 座標をスクリーン座標に変換したものも保存しておく ) Catch3DHitPosition = Result.HitPosition; Catch2DHitPosition = DX.ConvWorldPosToScreenPos(Catch3DHitPosition); } } } else { //掴んでいる場合 //マウスの左クリックが離されていたら掴み状態を解除 if ((NowInput & DX.MOUSE_INPUT_1) == 0) { Catch = 0; } else { //掴み状態が継続していたらマウスカーソルの移動に合わせてモデルも移動 float MoveX, MoveY; DX.VECTOR NowCatch2DHitPosition; DX.VECTOR NowCatch3DHitPosition; DX.VECTOR Now3DModelPosition; //掴んだときのマウス座標から現在のマウス座標までの移動分を算出 MoveX = (float)(MouseX - CatchMouseX); MoveY = (float)(MouseY - CatchMouseY); //掴んだときのモデルと線分が当たった座標をスクリーン座標に変換したものにマウスの移動分を足す NowCatch2DHitPosition.x = Catch2DHitPosition.x + MoveX; NowCatch2DHitPosition.y = Catch2DHitPosition.y + MoveY; NowCatch2DHitPosition.z = Catch2DHitPosition.z; //掴んだときのモデルと線分が当たった座標をスクリーン座標に変換したものにマウスの移動分を足した座標をワールド座標に変換 NowCatch3DHitPosition = DX.ConvScreenPosToWorldPos(NowCatch2DHitPosition); //掴んだときのモデルのワールド座標に『掴んだときのモデルと線分が当たった座標にマウスの移動分を足した座標をワールド座標に //変換した座標』と、『掴んだときのモデルと線分が当たった座標』との差分を加算 Now3DModelPosition.x = Catch3DModelPosition.x + NowCatch3DHitPosition.x - Catch3DHitPosition.x; Now3DModelPosition.y = Catch3DModelPosition.y + NowCatch3DHitPosition.y - Catch3DHitPosition.y; Now3DModelPosition.z = Catch3DModelPosition.z + NowCatch3DHitPosition.z - Catch3DHitPosition.z; //↑の計算で求まった新しい座標をモデルの座標としてセット DX.MV1SetPosition(modelHandle, Now3DModelPosition); } } }
public void update() { Pos = DX.VGet(r * (float)Math.Cos(TransToRad(theta)) - 170.0f, r * (float)Math.Sin(TransToRad(theta)), 20.0f); }
public DX.VECTOR move; //カメラの移動 /// <summary> /// コンストラクタ /// </summary> public Camera(DX.VECTOR startPos) { this.pos = startPos; this.move = this.pos; }
public void SetDirectPosAndRot(DX.VECTOR pos, DX.VECTOR rot) { target_pos = pos; target_rot = rot; _UpdateCameraPos(); }
public Form1() { InitializeComponent(); MouseWheel += new MouseEventHandler(Form1_MouseWheel); ClientSize = new Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); Text = "DesktopMascot"; AllowDrop = true; //ドラッグ&ドロップを許可 /*token = Tokens.Create("YRZGPgGkiWE9uDFyph77AgHQw", "TZhB8DP10P99YzLHlkAQtOT7ofC1fyPd7pgfe05Nk4Nbo5uJHt", * "110161860-XIPabNbSW4Lg5w6jVpNTwc2MuNECxjolnSR0d6PE", "0ZnG5HsfKiD0oprCHPOEofHd27Jg2MwL58BqbEU0POBX4"); //twitterアカウントの認証*/ DX.SetOutApplicationLogValidFlag(DX.FALSE); //Log.txtを生成しないように設定 DX.SetUserWindow(Handle); //DxLibの親ウインドウをこのフォームに設定 DX.SetZBufferBitDepth(24); //Zバッファの精度を変更 DX.DxLib_Init(); //DxLibの初期化処理 DX.SetDrawScreen(DX.DX_SCREEN_BACK); //描画先を裏画面に設定 System.Random rand = new System.Random(); motionNum = rand.Next(maxNum); var list = new List <string>(); list = LoadSettingFile("ModelSetting.csv"); //最初の一行分は飛ばす modelMenu = new modelMenuData[list.Count - skipLine]; for (int ii = 0; ii < list.Count - 1; ii++) { //最初の一行は項目名なので飛ばす string line = list[ii + 1]; string[] data = line.Split(','); modelMenu[ii].modelNum = int.Parse(data[0]); modelMenu[ii].modelName = data[1]; modelMenu[ii].modelPass = data[2]; } //最初の一行分は飛ばす var musiclist = new List <string>(); musiclist = LoadSettingFile("MusicSetting.csv"); musicMenu = new musicmMenuData[musiclist.Count - skipLine]; for (int ii = 0; ii < musiclist.Count - skipLine; ii++) { string line = musiclist[ii + skipLine]; string[] data = line.Split(','); musicMenu[ii].musicNum = int.Parse(data[0]); musicMenu[ii].musicName = data[1]; musicMenu[ii].musicPass = data[2]; } modelHandle = DX.MV1LoadModel(modelMenu[(int)ModelNum.KAEDE].modelPass); cameraHandle = 0; nowModelIndex = 0; attachIndex = DX.MV1AttachAnim(modelHandle, motionNum, -1, DX.FALSE); totalTime = DX.MV1GetAttachAnimTotalTime(modelHandle, attachIndex); playTime = 0.0f; scale = DX.MV1GetScale(modelHandle); NowInput = 0; EdgeInput = 0; PrevInput = 0; Catch = 0; musicIndex = 0; soundHandle = 0; DX.SetCameraNearFar(0.1f, 1000.0f); //奥行0.1~1000をカメラの描画範囲とする DX.SetCameraPositionAndTarget_UpVecY(DX.VGet(12.0f, 25.0f, -35.0f), DX.VGet(0.0f, 15.0f, 0.0f)); //第1引数の位置から第2引数の位置を見る角度にカメラを設置 DX.MV1SetupCollInfo(modelHandle, -1, 8, 8, 8); ToolStripMenuItem mainMenu = new ToolStripMenuItem(); mainMenu.Text = "モデルの変更"; //モデルの選択メニューの作成 ToolStripMenuItem[] childMenu = new ToolStripMenuItem[modelMenu.Length]; for (int ii = 0; ii < modelMenu.Length; ii++) { childMenu[ii] = new ToolStripMenuItem(); childMenu[ii].Text = modelMenu[ii].modelName; childMenu[ii].Click += contextMenuStrip_SubMenuClick; mainMenu.DropDownItems.Add(childMenu[ii]); } ToolStripMenuItem mainMenu2 = new ToolStripMenuItem(); mainMenu2.Text = "音楽の再生"; //モデルに躍らせたい楽曲の選択メニュー ToolStripMenuItem[] childMenu2 = new ToolStripMenuItem[musicMenu.Length]; for (int ii = 0; ii < musicMenu.Length; ii++) { childMenu2[ii] = new ToolStripMenuItem(); childMenu2[ii].Text = musicMenu[ii].musicName; childMenu2[ii].Click += contextMenuStrip_SubMenu2Click; mainMenu2.DropDownItems.Add(childMenu2[ii]); } contextMenuStrip1.Items.Add(mainMenu); contextMenuStrip1.Items.Add(mainMenu2); ContextMenuStrip = contextMenuStrip1; //OnseiNinshiki(); }
public S3DPoint(DX.VECTOR vector) { this.x = vector.x; this.y = vector.y; this.z = vector.z; }