dl
dl_graphics.h
浏览该文件的文档.
1
11#pragma once
12
13#ifndef DL_DISABLE_RENDER
14#include "dl_type.h"
15#include "base/dl_color.h"
16#include "math/dl_coor.h"
17#include "math/dl_transform.h"
18
19namespace dl
20{
21class Coor;
24{
25public:
27 _order{ 0 },
28 _tsf{ nullptr },
29 _coor{ nullptr },
30 _bRound{ true },
31 _bPolygonEx{ true },
32 _colorDefault{ ColorDef::WHITE }
33 {
34 _col.resize(4);
35 for (auto& iter : _col)
36 {
37 iter = _colorDefault;
38 }
39 _reset_col_index();
40 }
41
42 //-----------------------------基础------------------------------
47 void Dot(const Position3& p);
48
54 void Line(const Position3& p0, const Position3& p1);
61 void TriangleSolid(const Position3& p0, const Position3& p1, const Position3& p2);
62
67 void Dot2D(const Position2& p);
68
74 void Line2D(const Position2& p0, const Position2& p1);
75
81 void Line2DEx(const Position2& p0, const Position2& p1);
88 void TriangleSolid2D(const Position2& p0, const Position2& p1, const Position2& p2);
89
90 //-----------------------------拓展------------------------------
97 void Triangle(const Position3& p0, const Position3& p1, const Position3& p2);
98
106 void Quad(const Position3& p0, const Position3& p1, const Position3& p2, const Position3& p3);
107
115 void QuadSolid(const Position3& p0, const Position3& p1, const Position3& p2, const Position3& p3);
116
122 void Rectangle(const Position3& p0, const Position3& p1);
123
129 void RectangleSolid(const Position3& p0, const Position3& p1);
130
135 void Polygon(const std::vector<Position3>& vec_pos);
136
142 void PolygonSolid(const std::vector<Position3>& vec_pos);
143
147 void Love();
148
149 //-----------------------------2d------------------------------
156 void Triangle2D(const Position2& p0, const Position2& p1, const Position2& p2);
157
165 void Quad2D(const Position2& p0, const Position2& p1, const Position2& p2, const Position2& p3);
166
171 void Quad2D(const dl::Quad& quad)
172 {
173 Quad2D(quad.Get(0), quad.Get(1), quad.Get(2), quad.Get(3));
174 }
175
183 void QuadSolid2D(const Position2& p0, const Position2& p1, const Position2& p2, const Position2& p3);
184
189 void QuadSolid2D(const dl::Quad& quad)
190 {
191 QuadSolid2D(quad.Get(0), quad.Get(1), quad.Get(2), quad.Get(3));
192 }
193
199 void Rectangle2D(const Position2& p0, const Position2& p1);
200
206 void RectangleSolid2D(const Position2& p0, const Position2& p1);
207
212 void Polygon2D(const std::vector<Position2>& vec_pos);
213
219 void PolygonSolid2D(const std::vector<Position2>& vec_pos);
220
227 void PolygonRegular2D(const Position2& pos, Float r, unsigned n);
228
235 void PolygonRegularSolid2D(const Position2& pos, Float r, unsigned n);
236
242 void RenderCoor(Coor* coor, bool to_parent = true);
243
251 void StrokeLine(const Position2& p0, const Position2& p1,
252 Float width = 1.0_f, bool round = false);
253
254 //------------------------------参数设置--------------------------------
259 void SetCoor(Coor* coor) { _coor = coor; }
260
265 void SetColor(const Color& col)
266 {
267 for (auto& iter : _col)
268 iter = col;
269 }
270
275 void SetColor(const std::vector<Color>& col)
276 {
277 if (_col.size() < col.size())
278 _col.resize(col.size());
279 for (size_t i = 0; i < col.size(); ++i)
280 _col[i] = col[i];
281 }
282
287 void SetOrder(float order)
288 {
289 _order = order;
290 }
291private:
292 Transform* _tsf;
293 Coor* _coor;
294 float _order;// 2d的z
295 bool _bRound;// 坐标取整(2d)
296 bool _bPolygonEx;// 非填充多边形最后一条边拓展像素
297 std::vector<Color> _col; // 至少4个,超过需要判断越界
298 Color _colorDefault;
299 std::array<size_t, 3> _colIndex;
300
301 void _reset_col_index()
302 {
303 Fill::Sequence(_colIndex, 0);
304 }
305
306 Color _get_color(size_t i)
307 {
308 assert(i < _colIndex.size());
309 if(_colIndex[i] >= _col.size())
310 return _colorDefault;
311 return _col[_colIndex[i]];
312 }
313 Position3 _get_pos_2d(Position2 pos)
314 {
315 pos = _coor ? _coor->ThisToWorld(pos) : pos;
316 if (_bRound)
317 Every::Round(pos);
318 return toLonger(pos, _order);
319 }
320};
321
322extern Graphics* g_gfx;
323
324}
325
326#endif
2d坐标系
基础图形绘图
void PolygonRegular2D(const Position2 &pos, Float r, unsigned n)
绘制2D正多边形
void Rectangle2D(const Position2 &p0, const Position2 &p1)
绘制2D矩形
void Triangle2D(const Position2 &p0, const Position2 &p1, const Position2 &p2)
绘制2D三角形
void PolygonSolid2D(const std::vector< Position2 > &vec_pos)
绘制2D填充多边形
void TriangleSolid(const Position3 &p0, const Position3 &p1, const Position3 &p2)
绘制填充三角形
void SetColor(const Color &col)
设置颜色
void Line(const Position3 &p0, const Position3 &p1)
绘制线段
void Line2DEx(const Position2 &p0, const Position2 &p1)
绘制2d线段(延长)
void Quad2D(const dl::Quad &quad)
绘制2D四边形
void SetColor(const std::vector< Color > &col)
设置颜色数组
void Quad2D(const Position2 &p0, const Position2 &p1, const Position2 &p2, const Position2 &p3)
绘制2D四边形
void QuadSolid2D(const dl::Quad &quad)
绘制2D填充四边形
void RenderCoor(Coor *coor, bool to_parent=true)
绘制坐标系
void Polygon(const std::vector< Position3 > &vec_pos)
绘制多边形
void Rectangle(const Position3 &p0, const Position3 &p1)
绘制矩形
void QuadSolid(const Position3 &p0, const Position3 &p1, const Position3 &p2, const Position3 &p3)
绘制填充四边形
void QuadSolid2D(const Position2 &p0, const Position2 &p1, const Position2 &p2, const Position2 &p3)
绘制2D填充四边形
void PolygonSolid(const std::vector< Position3 > &vec_pos)
绘制填充多边形
void Line2D(const Position2 &p0, const Position2 &p1)
绘制2D线段
void RectangleSolid(const Position3 &p0, const Position3 &p1)
绘制填充矩形
void Dot(const Position3 &p)
绘制点
void Love()
绘制爱心形状
void Dot2D(const Position2 &p)
绘制2D点
void RectangleSolid2D(const Position2 &p0, const Position2 &p1)
绘制2D填充矩形
void Quad(const Position3 &p0, const Position3 &p1, const Position3 &p2, const Position3 &p3)
绘制四边形
void TriangleSolid2D(const Position2 &p0, const Position2 &p1, const Position2 &p2)
绘制2D填充三角形
void SetCoor(Coor *coor)
设置坐标系
void PolygonRegularSolid2D(const Position2 &pos, Float r, unsigned n)
绘制2D填充正多边形
void Triangle(const Position3 &p0, const Position3 &p1, const Position3 &p2)
绘制三角形
void SetOrder(float order)
设置绘制顺序
void Polygon2D(const std::vector< Position2 > &vec_pos)
绘制2D多边形
void StrokeLine(const Position2 &p0, const Position2 &p1, Float width=1.0_f, bool round=false)
绘制带粗度的线条
2d坐标系
具有矩阵的坐标系
通用类型
颜色预定义
void Round(C &c)
四舍五入
void Sequence(C &c, const T &a, const T &d=1)
填充等差数列
float Float
constexpr Array< T, N+M > toLonger(const Array< T, N > &a, const T &v={})
长度+M
Graphics * g_gfx
Array< Float, 2 > Position2
Array< Float, 3 > Position3
Array< float, 4 > Color
Array< Position, 4 > Quad