GaitGeneration by Graph Search
読み取り中…
検索中…
一致する文字列を見つけられません
world_grid_renderer.cpp
[詳解]
1
3
4// Copyright(c) 2023-2025 Design Engineering Laboratory, Saitama University
5// Released under the MIT license
6// https://opensource.org/licenses/mit-license.php
7
9
10#include <Dxlib.h>
11
12
13namespace designlab
14{
15
17 kMainGridXColor(GetColor(217, 0, 0)),
18 kMainGridYColor(GetColor(0, 217, 0)),
19 kSubGridXColor(GetColor(63, 0, 0)),
20 kSubGridYColor(GetColor(0, 63, 0)),
21 kMainGridNum(20),
22 kMainGridInterval(500.0f),
23 kSubGridDividedNum(5),
24 kGridLineZPos(-50.0f)
25{
26}
27
28
30{
31 // 格子線をどこまで描画するか.
32 const float kGridMaxX = static_cast<float>(kMainGridNum) * kMainGridInterval;
33 const float kGridMinX = -kGridMaxX;
34 const float kGridMaxY = kGridMaxX;
35 const float kGridMinY = -kGridMaxY;
36
37
38 // X軸とY軸の格子線を描画する.
39 DrawLine3D(VGet(kGridMinX, 0.0f, kGridLineZPos),
40 VGet(kGridMaxX, 0.0f, kGridLineZPos), kMainGridXColor);
41
42 DrawLine3D(VGet(0.0f, kGridMinY, kGridLineZPos),
43 VGet(0.0f, kGridMaxY, kGridLineZPos), kMainGridYColor);
44
45
46 // 格子線を 3D空間に描画する.
47
48 const int kMainGridAlpha = 96; // メインの格子線の透明度.
49 const int kSubGridAlpha = 32; // サブの格子線の透明度.
50
51 for (int i = 0; i < kMainGridNum + 1 + kMainGridNum; i++)
52 {
53 SetDrawBlendMode(DX_BLENDMODE_ALPHA, kMainGridAlpha); // 半透明にする.
54
55 // メインの格子線を描画する.
56 VECTOR start_pos = VGet(kGridMinX, kGridMinY + kMainGridInterval * i, kGridLineZPos);
57 VECTOR end_pos = VGet(kGridMaxX, kGridMinY + kMainGridInterval * i, kGridLineZPos);
58 DrawLine3D(start_pos, end_pos, kMainGridXColor);
59
60 start_pos = VGet(kGridMinX + kMainGridInterval * i, kGridMinY, kGridLineZPos);
61 end_pos = VGet(kGridMinX + kMainGridInterval * i, kGridMaxY, kGridLineZPos);
62 DrawLine3D(start_pos, end_pos, kMainGridYColor);
63
64
65 // サブの格子線を描画する.
66 for (int j = 0; j < kSubGridDividedNum - 1; j++)
67 {
68 SetDrawBlendMode(DX_BLENDMODE_ALPHA, kSubGridAlpha); // 半透明にする.
69
70 start_pos = VGet(kGridMinX, kGridMinY + kMainGridInterval * i + kMainGridInterval / kSubGridDividedNum * (j + 1), kGridLineZPos);
71 end_pos = VGet(kGridMaxX, kGridMinY + kMainGridInterval * i + kMainGridInterval / kSubGridDividedNum * (j + 1), kGridLineZPos);
72 DrawLine3D(start_pos, end_pos, kSubGridXColor);
73
74 start_pos = VGet(kGridMinX + kMainGridInterval * i + kMainGridInterval / kSubGridDividedNum * (j + 1), kGridMinY, kGridLineZPos);
75 end_pos = VGet(kGridMinX + kMainGridInterval * i + kMainGridInterval / kSubGridDividedNum * (j + 1), kGridMaxY, kGridLineZPos);
76 DrawLine3D(start_pos, end_pos, kSubGridYColor);
77 }
78
79 SetDrawBlendMode(DX_BLENDMODE_NOBLEND, 0); // 半透明を解除する.これを忘れると描画がおかしくなる.
80 }
81}
82
83} // namespace designlab
void Draw() const override
描画処理を行う. const 関数にしているのは, 描画処理の中でメンバ変数を変更しないようにするため.