トップページ > 記事閲覧
DrawCube3D
名前:教えてくだサイ 日時: 2018/09/27 17:17

何度もごめんなさい、こちらの関数の立方体を90度だけ回転させることはできますか DrawCube3D(VGet(50.0f, 50.0f, 50.0f), VGet(350.0f, 50.0f + bouflg, 75.0f), GetColor(0, 0, 0), GetColor(0, 0, 0), TRUE);
メンテ

Page: 1 |

Re: DrawCube3D ( No.1 )
名前:DSGxN 日時:2018/09/28 07:31

さて、前のスレッドで > モデルを回転させる関数でこの立方体を回転させることは可能ですか? とありましたので、これベースで行きましょう。前のスレッドでもおわかりのように、 たかが直方体1個といっても頂点やらインデックスやらを多数定義しなければならないので大変ですよね。 発想の転換ですが、「直方体もモデルで用意」しましょう。 フリーの3DソフトであるBlenderを起動すると、いきなり立方体が1つ置いてありますが、 水平線をはさんだ位置にあるので、底面を水平線にそろえます。具体的には [移動]でZの位置を1.00000に変更します。(DirectXと違って、Yではありません) で、ファイル ⇒ エクスポート ⇒ DirectX(.x) で、Cube.xとでも名前を付けてプロジェクトのフォルダに 保存します。 ・この直方体は超ちっさいので、高さ以外を100倍にしています。 ・回転は適当な数値にしているので、お好みでいじってください。 #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { DxLib::ChangeWindowMode(TRUE); if (DxLib::DxLib_Init() < 0) return -1; DxLib::SetBackgroundColor(128, 128, 128); DxLib::SetDrawScreen(DX_SCREEN_BACK); int ModelHandle = DxLib::MV1LoadModel("Cube.x"); float bouflg = 0.0F; while (DxLib::ProcessMessage() == 0) { DxLib::ClearDrawScreen(); if (DxLib::CheckHitKey(KEY_INPUT_SPACE) == 1) bouflg += 1; DxLib::MV1SetRotationXYZ(ModelHandle, DxLib::VGet(0.0f, 60.0f * DX_PI_F / 180.0f, 45.0f * DX_PI_F / 180.0f)); DxLib::MV1SetPosition(ModelHandle, DxLib::VGet(320.0f, 200.0f, 300.0f)); DxLib::MV1SetScale(ModelHandle, DxLib::VGet(100.0f, bouflg, 100.0f)); DxLib::MV1DrawModel(ModelHandle); DxLib::ScreenFlip(); } DxLib::MV1DeleteModel(ModelHandle); return DxLib::DxLib_End(); } 念のためですが Cube.x を書いておきます。 xof 0303txt 0032 Frame Root { FrameTransformMatrix { 1.000000, 0.000000, 0.000000, 0.000000, 0.000000,-0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000;; } Frame Cube { FrameTransformMatrix { 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 1.000000;; } Mesh { // Cube mesh 8; 1.000000; 1.000000;-1.000000;, 1.000000;-1.000000;-1.000000;, -1.000000;-1.000000;-1.000000;, -1.000000; 1.000000;-1.000000;, 1.000000; 0.999999; 1.000000;, 0.999999;-1.000001; 1.000000;, -1.000000;-1.000000; 1.000000;, -1.000000; 1.000000; 1.000000;; 6; 4;3,2,1,0;, 4;5,6,7,4;, 4;1,5,4,0;, 4;2,6,5,1;, 4;3,7,6,2;, 4;7,3,0,4;; MeshNormals { // Cube normals 6; 0.000000; 0.000000;-1.000000;, 0.000000;-0.000000; 1.000000;, 1.000000;-0.000000; 0.000000;, -0.000000;-1.000000;-0.000000;, -1.000000; 0.000000;-0.000000;, 0.000000; 1.000000; 0.000000;; 6; 4;0,0,0,0;, 4;1,1,1,1;, 4;2,2,2,2;, 4;3,3,3,3;, 4;4,4,4,4;, 4;5,5,5,5;; } // End of Cube normals MeshMaterialList { // Cube material list 1; 6; 0, 0, 0, 0, 0, 0;; Material Material { 0.640000; 0.640000; 0.640000; 1.000000;; 96.078431; 0.500000; 0.500000; 0.500000;; 0.000000; 0.000000; 0.000000;; } } // End of Cube material list } // End of Cube mesh } // End of Cube } // End of Root
メンテ
Re: DrawCube3D ( No.2 )
名前:教えてくだサイ 日時:2018/09/28 14:03

DSGxNさん、わざわざコードまでうってもらいありがとうございますm(_ _)m 言葉不足やって申し訳ないのですが、 今僕がつくっているものがこれなんですけどスペースキーを押すと棒が延びて離すと棒が前に倒れるというコードを作ってるんですがこのコードに DSGxN さんが作ってくれたものをあわしたら複雑になりそうですよね。。 ちなみにメインループのすぐ下に問題のコードがあります。 #include "DxLib.h" #include <math.h> #include <list> #define MOVESPEED 10.0f #define ANIM_RUN 1 #define ANIM_NEUTRAL 4 #define CAMERA_ANGLE_SPEED 3.0f // カメラの注視点の高さ #define CAMERA_LOOK_AT_HEIGHT 400.0f // カメラと注視点の距離 #define CAMERA_LOOK_AT_DISTANCE 2150.0f // ラインを描く範囲 #define LINE_AREA_SIZE 10000.0f // ラインの数 #define LINE_NUM 50 // 残像の消えるスピードの速さ #define SHADOW_COUNT_DEC 2 #define SHADOW_MAXCOUNT 30 // 影の最大数 #define SHADOW_ALLAY_MAX (((int)(SHADOW_MAXCOUNT/SHADOW_COUNT_DEC)+6)*6) #define SWORD_COLLOR GetColor( 255 , 0 , 0 ) #define CALC_PI 3.14159265358979323846 //軌跡 struct SWORDSHADOW { int baseX, baseY; // 根元 int beforeX, beforeY; // 1フレーム前の剣先 int nowX, nowY; // 現在の剣先 int color; // 影の色 int count; // 残りタイマー }; //xとyの値を持つ構造体 struct Vector { double xE, yE, zE; }; //円 struct Circle { VECTOR PositionE; double radius; }; //敵 struct Enemy { Circle c; VECTOR Speed; }; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int ModelHandle; VECTOR MoveVector; float AnimTotalTime; float AnimNowTime; int AnimAttachIndex; int RunFlag; int MoveAnimFrameIndex; VECTOR Position; int MoveFlag; float Angle; float CameraHAngle; float CameraVAngle; float SinParam; float CosParam; int bouflg = 0; float radcounter = 0; double rad; float KaitenX, KaitenY; VERTEX3D Vertex[8]; WORD Index[12]; SetMainWindowText("3D"); ChangeWindowMode(TRUE); if (DxLib_Init() < 0) return -1; ModelHandle = MV1LoadModel("Data\\Sikaku.mqo"); // カメラの向きを初期化 CameraHAngle = 0.0f; CameraVAngle = 40.0f; // 向きを初期化 Angle = 0.0f; RunFlag = FALSE; AnimAttachIndex = MV1AttachAnim(ModelHandle, ANIM_NEUTRAL); AnimTotalTime = MV1GetAttachAnimTotalTime(ModelHandle, AnimAttachIndex); AnimNowTime = 0.0f; MV1SetAttachAnimTime(ModelHandle, AnimAttachIndex, AnimNowTime); MoveAnimFrameIndex = MV1SearchFrame(ModelHandle, "BasePoint"); MV1SetFrameUserLocalMatrix(ModelHandle, MoveAnimFrameIndex, MV1GetFrameLocalMatrix(ModelHandle, MoveAnimFrameIndex)); // プレイヤー座標初期化 Position = VGet(0.0f, 75.0f, 0.0f); SetDrawScreen(DX_SCREEN_BACK); SetCameraNearFar(100.0f, 50000.0f); // 背景の色 SetBackgroundColor(255, 255, 255); SetUseZBuffer3D(TRUE); // Zバッファへの書き込みを有効にする SetWriteZBuffer3D(TRUE); // メインループ(何かキーが押されたらループを抜ける) while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) { // 画面のクリア ClearDrawScreen(); radcounter++; if (radcounter > 360.0f) { radcounter = 0.0f; } rad = radcounter / 180 * DX_PI; rad = radcounter / 180 * DX_PI; KaitenX = cos(rad); //円の中心の場所 KaitenY = sin(rad); if (CheckHitKey(KEY_INPUT_SPACE) == 1) { bouflg += 10; } DrawCube3D(VGet(-150.0f, 50.0f, 100.0f), VGet(150.0f, 50.0f + bouflg, 125.0f),GetColor(0, 0, 0), GetColor(0, 0, 0), TRUE); // カメラ移動 if (CheckHitKey(KEY_INPUT_C) == 1) { CameraHAngle += CAMERA_ANGLE_SPEED; if (CameraHAngle >= 180.0f) { CameraHAngle -= 360.0f; } } if (CheckHitKey(KEY_INPUT_Z) == 1) { CameraHAngle -= CAMERA_ANGLE_SPEED; if (CameraHAngle <= -180.0f) { CameraHAngle += 360.0f; } } if (CheckHitKey(KEY_INPUT_S) == 1) { CameraVAngle += CAMERA_ANGLE_SPEED; if (CameraVAngle >= 80.0f) { CameraVAngle = 80.0f; } } if (CheckHitKey(KEY_INPUT_X) == 1) { CameraVAngle -= CAMERA_ANGLE_SPEED; if (CameraVAngle <= 0.0f) { CameraVAngle = 0.0f; } } // 移動ベクトルを初期化 MoveVector = VGet(0.0f, 0.0f, 0.0f); //移動してるかどうか MoveFlag = FALSE; // プレイヤー移動 if (CheckHitKey(KEY_INPUT_LEFT) == 1) { Angle = 90.0f - CameraHAngle; MoveFlag = TRUE; MoveVector.x = -MOVESPEED; } if (CheckHitKey(KEY_INPUT_RIGHT) == 1) { Angle = -90.0f - CameraHAngle; MoveFlag = TRUE; MoveVector.x = MOVESPEED; } if (CheckHitKey(KEY_INPUT_DOWN) == 1) { Angle = 0.0f - CameraHAngle; MoveFlag = TRUE; MoveVector.z = -MOVESPEED; } if (CheckHitKey(KEY_INPUT_UP) == 1) { Angle = 180.0f - CameraHAngle; MoveFlag = TRUE; MoveVector.z = MOVESPEED; } if (MoveFlag == TRUE) { VECTOR TempMoveVector; SinParam = sin(CameraHAngle / 180.0f * DX_PI_F); CosParam = cos(CameraHAngle / 180.0f * DX_PI_F); TempMoveVector.x = MoveVector.x * CosParam - MoveVector.z * SinParam; TempMoveVector.y = 0.0f; TempMoveVector.z = MoveVector.x * SinParam + MoveVector.z * CosParam; Position = VAdd(Position, TempMoveVector); } //アニメーション処理 if (RunFlag != MoveFlag) { RunFlag = MoveFlag; MV1DetachAnim(ModelHandle, AnimAttachIndex); if (RunFlag) { AnimAttachIndex = MV1AttachAnim(ModelHandle, ANIM_RUN); } else { AnimAttachIndex = MV1AttachAnim(ModelHandle, ANIM_NEUTRAL); } AnimTotalTime = MV1GetAttachAnimTotalTime(ModelHandle, AnimAttachIndex); AnimNowTime = 0.0f; } else { AnimNowTime += 200.0f; if (AnimNowTime >= AnimTotalTime) { AnimNowTime -= AnimTotalTime; } } MV1SetAttachAnimTime(ModelHandle, AnimAttachIndex, AnimNowTime); MV1SetRotationXYZ(ModelHandle, VGet(0.0f, Angle / 180.0f * DX_PI_F, 0.0f)); //座標セット MV1SetPosition(ModelHandle, Position); { VECTOR TempPosition1; VECTOR TempPosition2; VECTOR CameraPosition; VECTOR CameraLookAtPosition; CameraLookAtPosition = Position; CameraLookAtPosition.y += CAMERA_LOOK_AT_HEIGHT; SinParam = sin(CameraVAngle / 180.0f * DX_PI_F); CosParam = cos(CameraVAngle / 180.0f * DX_PI_F); TempPosition1.x = 0.0f; TempPosition1.y = SinParam * CAMERA_LOOK_AT_DISTANCE; TempPosition1.z = -CosParam * CAMERA_LOOK_AT_DISTANCE; SinParam = sin(CameraHAngle / 180.0f * DX_PI_F); CosParam = cos(CameraHAngle / 180.0f * DX_PI_F); TempPosition2.x = CosParam * TempPosition1.x - SinParam * TempPosition1.z; TempPosition2.y = TempPosition1.y; TempPosition2.z = SinParam * TempPosition1.x + CosParam * TempPosition1.z; CameraPosition = VAdd(TempPosition2, CameraLookAtPosition); SetCameraPositionAndTarget_UpVecY(CameraPosition, CameraLookAtPosition); } MV1DrawModel(ModelHandle); //地面処理 { int i; VECTOR Pos1; VECTOR Pos2; SetUseZBufferFlag(TRUE); Pos1 = VGet(-LINE_AREA_SIZE / 2.0f, 0.0f, -LINE_AREA_SIZE / 2.0f); Pos2 = VGet(-LINE_AREA_SIZE / 2.0f, 0.0f, LINE_AREA_SIZE / 2.0f); for (i = 0; i <= LINE_NUM; i++) { DrawLine3D(Pos1, Pos2, GetColor(0, 0, 0)); Pos1.x += LINE_AREA_SIZE / LINE_NUM; Pos2.x += LINE_AREA_SIZE / LINE_NUM; } Pos1 = VGet(-LINE_AREA_SIZE / 2.0f, 0.0f, -LINE_AREA_SIZE / 2.0f); Pos2 = VGet(LINE_AREA_SIZE / 2.0f, 0.0f, -LINE_AREA_SIZE / 2.0f); for (i = 0; i < LINE_NUM; i++) { DrawLine3D(Pos1, Pos2, GetColor(0, 0, 0)); Pos1.z += LINE_AREA_SIZE / LINE_NUM; Pos2.z += LINE_AREA_SIZE / LINE_NUM; } SetUseZBufferFlag(FALSE); } ScreenFlip(); } // キー入力待ちをする WaitKey(); // DXライブラリの後始末 DxLib_End(); return 0; }
メンテ
Re: DrawCube3D ( No.3 )
名前:教えてくだサイ 日時:2018/09/28 14:24

h t t p s://15.gigafile.nu/1005-79c9896e0621335385b135d614887d3a ここにデータがはいってます!
メンテ
Re: DrawCube3D ( No.4 )
名前:DSGxN 日時:2018/09/28 22:15

棒もモデルファイルで実装しました。スペースキーを押して伸ばし、ある程度いって手を離すと倒れます。 コードを短くするために、アニメーション関連は削除していますのでご了承ください。 ※ちなみに、カーソルキーで主人公(?)を動かすと、主人公の向きが強制的に変わるのが気になりますが ※そこはそのままにしています。(左キーを押したときだけ顔が見える) int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int ModelHandle, MoveFlag, bouflg = 0, ModelHandleCUBE2; VECTOR MoveVector, Position; float Angle, CameraHAngle, CameraVAngle, SinParam, CosParam, radcounter = 0; double rad; SetMainWindowText("3D"); ChangeWindowMode(TRUE); if (DxLib_Init() < 0) return -1; SetDrawScreen(DX_SCREEN_BACK); SetCameraNearFar(100.0f, 50000.0f); SetBackgroundColor(255, 255, 255); SetUseZBuffer3D(TRUE); ModelHandle = MV1LoadModel("Data\\Sikaku.mqo"); ModelHandleCUBE2 = MV1LoadModel("Data\\Cube2.x"); CameraHAngle = 0.0f; // カメラの向きを初期化 CameraVAngle = 40.0f; Angle = 0.0f; // 向きを初期化 Position = VGet(0.0f, 75.0f, 0.0f); // プレイヤー座標初期化 SetWriteZBuffer3D(TRUE); // Zバッファへの書き込みを有効にする // メインループ(ESCキーが押されたらループを抜ける) while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) { ClearDrawScreen(); // 画面のクリア //地面処理 ... 最初に持ってきました。また、Zバッファ処理を変更しました。というのも、コメントNo.2のソースを実行して // ZやCでくるくる回すと、主人公(?)と棒の位置関係(というか描画状況)がおかしくなっていたので。 SetWriteZBuffer3D(FALSE); // SetUseZBufferFlag ではなく SetWriteZBuffer3D にしました  { int i; VECTOR Pos1, Pos2; Pos1 = VGet(-LINE_AREA_SIZE / 2.0f, 0.0f, -LINE_AREA_SIZE / 2.0f); Pos2 = VGet(-LINE_AREA_SIZE / 2.0f, 0.0f, LINE_AREA_SIZE / 2.0f); for (i = 0; i <= LINE_NUM; i++) { DrawLine3D(Pos1, Pos2, GetColor(0, 0, 0)); Pos1.x += LINE_AREA_SIZE / LINE_NUM; Pos2.x += LINE_AREA_SIZE / LINE_NUM; } Pos1 = VGet(-LINE_AREA_SIZE / 2.0f, 0.0f, -LINE_AREA_SIZE / 2.0f); Pos2 = VGet(LINE_AREA_SIZE / 2.0f, 0.0f, -LINE_AREA_SIZE / 2.0f); for (i = 0; i < LINE_NUM; i++) { DrawLine3D(Pos1, Pos2, GetColor(0, 0, 0)); Pos1.z += LINE_AREA_SIZE / LINE_NUM; Pos2.z += LINE_AREA_SIZE / LINE_NUM; } } SetWriteZBuffer3D(TRUE); // radcounterなどは現在使われていないようなので、棒が倒れる変数(フラグ)に使用しました。 if (radcounter == 0) { if (CheckHitKey(KEY_INPUT_SPACE) == 1) { bouflg += 10; } if (bouflg > 200) // ある程度伸びていないと倒れないようにしました(お好みで) { if (CheckHitKey(KEY_INPUT_SPACE) == 0) // 手を離したら倒れ始める radcounter += 1.0f; } } else { radcounter += 1.0f; if (radcounter > 90.0f) { radcounter = 90.0f; } } if (radcounter > 0.0f) { rad = radcounter / 180 * DX_PI; // 手前に倒れる MV1SetRotationXYZ(ModelHandleCUBE2, VGet(-rad, 0.0f, 0.0f)); } MV1SetPosition(ModelHandleCUBE2, VGet(0.0f, 50.0f, 100.0f)); MV1SetScale(ModelHandleCUBE2, VGet(150.0f, bouflg, 25.0f)); MV1DrawModel(ModelHandleCUBE2); // カメラ移動 if (CheckHitKey(KEY_INPUT_C) == 1) { CameraHAngle += CAMERA_ANGLE_SPEED; if (CameraHAngle >= 180.0f) { CameraHAngle -= 360.0f; } } if (CheckHitKey(KEY_INPUT_Z) == 1) { CameraHAngle -= CAMERA_ANGLE_SPEED; if (CameraHAngle <= -180.0f) { CameraHAngle += 360.0f; } } if (CheckHitKey(KEY_INPUT_S) == 1) { CameraVAngle += CAMERA_ANGLE_SPEED; if (CameraVAngle >= 80.0f) { CameraVAngle = 80.0f; } } if (CheckHitKey(KEY_INPUT_X) == 1) { CameraVAngle -= CAMERA_ANGLE_SPEED; if (CameraVAngle <= 0.0f) { CameraVAngle = 0.0f; } } MoveVector = VGet(0.0f, 0.0f, 0.0f); // 移動ベクトルを初期化 MoveFlag = FALSE; //移動してるかどうか // プレイヤー移動 if (CheckHitKey(KEY_INPUT_LEFT) == 1) { Angle = 90.0f - CameraHAngle; MoveFlag = TRUE; MoveVector.x = -MOVESPEED; } if (CheckHitKey(KEY_INPUT_RIGHT) == 1) { Angle = -90.0f - CameraHAngle; MoveFlag = TRUE; MoveVector.x = MOVESPEED; } if (CheckHitKey(KEY_INPUT_DOWN) == 1) { Angle = 0.0f - CameraHAngle; MoveFlag = TRUE; MoveVector.z = -MOVESPEED; } if (CheckHitKey(KEY_INPUT_UP) == 1) { Angle = 180.0f - CameraHAngle; MoveFlag = TRUE; MoveVector.z = MOVESPEED; } if (MoveFlag == TRUE) { VECTOR TempMoveVector; SinParam = sin(CameraHAngle / 180.0f * DX_PI_F); CosParam = cos(CameraHAngle / 180.0f * DX_PI_F); TempMoveVector.x = MoveVector.x * CosParam - MoveVector.z * SinParam; TempMoveVector.y = 0.0f; TempMoveVector.z = MoveVector.x * SinParam + MoveVector.z * CosParam; Position = VAdd(Position, TempMoveVector); } MV1SetRotationXYZ(ModelHandle, VGet(0.0f, Angle / 180.0f * DX_PI_F, 0.0f)); MV1SetPosition(ModelHandle, Position); //座標セット { VECTOR TempPosition1; VECTOR TempPosition2; VECTOR CameraPosition; VECTOR CameraLookAtPosition; CameraLookAtPosition = Position; CameraLookAtPosition.y += CAMERA_LOOK_AT_HEIGHT; SinParam = sin(CameraVAngle / 180.0f * DX_PI_F); CosParam = cos(CameraVAngle / 180.0f * DX_PI_F); TempPosition1.x = 0.0f; TempPosition1.y = SinParam * CAMERA_LOOK_AT_DISTANCE; TempPosition1.z = -CosParam * CAMERA_LOOK_AT_DISTANCE; SinParam = sin(CameraHAngle / 180.0f * DX_PI_F); CosParam = cos(CameraHAngle / 180.0f * DX_PI_F); TempPosition2.x = CosParam * TempPosition1.x - SinParam * TempPosition1.z; TempPosition2.y = TempPosition1.y; TempPosition2.z = SinParam * TempPosition1.x + CosParam * TempPosition1.z; CameraPosition = VAdd(TempPosition2, CameraLookAtPosition); SetCameraPositionAndTarget_UpVecY(CameraPosition, CameraLookAtPosition); } MV1DrawModel(ModelHandle); ScreenFlip(); } return DxLib_End(); } Cube2.x は Blender のデフォルト立方体の位置を、ZとYを1.0にしたものです。(※昨日のとは違います) 以下のファイルを保存して使うとよいでしょう。Dataフォルダに置いてください。 xof 0303txt 0032 Frame Root { FrameTransformMatrix { 1.000000, 0.000000, 0.000000, 0.000000, 0.000000,-0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000;; } Frame Cube { FrameTransformMatrix { 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000;; } Mesh { // Cube mesh 8; 1.000000; 1.000000;-1.000000;, 1.000000;-1.000000;-1.000000;, -1.000000;-1.000000;-1.000000;, -1.000000; 1.000000;-1.000000;, 1.000000; 0.999999; 1.000000;, 0.999999;-1.000001; 1.000000;, -1.000000;-1.000000; 1.000000;, -1.000000; 1.000000; 1.000000;; 6; 4;3,2,1,0;, 4;5,6,7,4;, 4;1,5,4,0;, 4;2,6,5,1;, 4;3,7,6,2;, 4;7,3,0,4;; MeshNormals { // Cube normals 6; 0.000000; 0.000000;-1.000000;, 0.000000;-0.000000; 1.000000;, 1.000000;-0.000000; 0.000000;, -0.000000;-1.000000;-0.000000;, -1.000000; 0.000000;-0.000000;, 0.000000; 1.000000; 0.000000;; 6; 4;0,0,0,0;, 4;1,1,1,1;, 4;2,2,2,2;, 4;3,3,3,3;, 4;4,4,4,4;, 4;5,5,5,5;; } // End of Cube normals MeshMaterialList { // Cube material list 1; 6; 0, 0, 0, 0, 0, 0;; Material Material { 0.640000; 0.640000; 0.640000; 1.000000;; 96.078431; 0.500000; 0.500000; 0.500000;; 0.000000; 0.000000; 0.000000;; } } // End of Cube material list } // End of Cube mesh } // End of Cube } // End of Root
メンテ
Re: DrawCube3D ( No.5 )
名前:教えてくだサイ 日時:2018/09/28 23:39

今コード読ましてもらってるのですがプレイヤーと棒の描画位置の違いでも悩んでたんですけど処理の書く順番によるものだったんですかね(- -) 丁寧にコメントまで書いてもらってありがとうございます、、 あとあんまし変わらないと思ってて変えてなかったんですがZバッファ関数にも変えたほうがいいんですかね(例:SetWriteZBuffer3D) あと最後に一つ質問があるんですけど下のコードってどこで打ってあげればいいんですか?? xof 0303txt 0032 Frame Root { FrameTransformMatrix { 1.000000, 0.000000, 0.000000, 0.000000, 0.000000,-0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000;; } Frame Cube { FrameTransformMatrix { 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000;; } Mesh { // Cube mesh 8; 1.000000; 1.000000;-1.000000;, 1.000000;-1.000000;-1.000000;, -1.000000;-1.000000;-1.000000;, -1.000000; 1.000000;-1.000000;, 1.000000; 0.999999; 1.000000;, 0.999999;-1.000001; 1.000000;, -1.000000;-1.000000; 1.000000;, -1.000000; 1.000000; 1.000000;; 6; 4;3,2,1,0;, 4;5,6,7,4;, 4;1,5,4,0;, 4;2,6,5,1;, 4;3,7,6,2;, 4;7,3,0,4;; MeshNormals { // Cube normals 6; 0.000000; 0.000000;-1.000000;, 0.000000;-0.000000; 1.000000;, 1.000000;-0.000000; 0.000000;, -0.000000;-1.000000;-0.000000;, -1.000000; 0.000000;-0.000000;, 0.000000; 1.000000; 0.000000;; 6; 4;0,0,0,0;, 4;1,1,1,1;, 4;2,2,2,2;, 4;3,3,3,3;, 4;4,4,4,4;, 4;5,5,5,5;; } // End of Cube normals MeshMaterialList { // Cube material list 1; 6; 0, 0, 0, 0, 0, 0;; Material Material { 0.640000; 0.640000; 0.640000; 1.000000;; 96.078431; 0.500000; 0.500000; 0.500000;; 0.000000; 0.000000; 0.000000;; } } // End of Cube material list } // End of Cube mesh } // End of Cube } // End of Root
メンテ
Re: DrawCube3D ( No.6 )
名前:DSGxN 日時:2018/09/29 06:54

ちょっと訂正です。 ループの中でZバッファを切り替えていましたが、不要なので削除しましょう。 つまり、ループ前で「ON」にしていますが、そのままONでOKです。 また、地面を描く部分を先頭に持ってきていましたが、最後に戻してもOKです。 ⇒コメントNo.2で書かれていたコードで、棒とプレイヤーの位置がおかしくなった理由は、  「1ループ目」はいいのですが、1ループ目の最後でZバッファをOFFにするため、2ループ目  からはずっと棒とプレイヤーをZバッファ無しで描く状態になっていたからです。  そもそもZバッファを切り替える必要はないはずですので、ONのままにしましょう。 あと、棒の大きさを設定する部分で MV1SetScale(ModelHandleCUBE2, VGet(150.0f, bouflg, 25.0f)); としていましたが MV1SetScale(ModelHandleCUBE2, VGet(150.0f, bouflg, 12.5f)); です。(奥行きが大きすぎた) > あと最後に一つ質問があるんですけど下のコードってどこで打ってあげればいいんですか?? コードに書くのではなく、テキストファイルを作って、そこに xof 0303txt 0032 の行から } // End of Root の行まで を貼り付けて Cube2.x というファイルで保存してください。それを Dataフォルダにおきましょう。
メンテ
Re: DrawCube3D ( No.7 )
名前:教えてくだサイ 日時:2018/09/29 11:05

わざわざ説明などコードなど書いてもらってほんとにありがとうございました!!! 描画がおかしい理由そういうことだったんですね
メンテ
Re: DrawCube3D ( No.8 )
名前:教えてくだサイ 日時:2018/09/29 11:08

これからはZバッファ関係もしっかり注意してみるようにします、、笑 あとZの大きさも訂正させていただきました! ここまでしてもらったのでこのゲームが必ず完成するように全力でがんばります!! 出来上がったらもってきますね!笑 ほんとにありがとうございましたm(_ _)m
メンテ

Page: 1 |

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

   クッキー保存