source: trunk/src/easymesh/easymesh.h @ 2183

Last change on this file since 2183 was 2183, checked in by sam, 7 years ago

build: fix the WTFPL site URL in all code comments.

File size: 3.6 KB
Line 
1//
2// Lol Engine
3//
4// Copyright: (c) 2010-2012 Sam Hocevar <sam@hocevar.net>
5//            (c) 2009-2012 Cédric Lecacheur <jordx@free.fr>
6//            (c) 2009-2012 Benjamin Huet <huet.benjamin@gmail.com>
7//   This program is free software; you can redistribute it and/or
8//   modify it under the terms of the Do What The Fuck You Want To
9//   Public License, Version 2, as published by Sam Hocevar. See
10//   http://www.wtfpl.net/ for more details.
11//
12
13//
14// The EasyMesh class
15// ------------------
16//
17
18#if !defined __EASYMESH_EASYMESH_H__
19#define __EASYMESH_EASYMESH_H__
20
21namespace lol
22{
23
24class EasyMesh
25{
26    friend class EasyMeshParser;
27
28public:
29    EasyMesh();
30
31    bool Compile(char const *command);
32    void MeshConvert();
33    void Render(mat4 const &model, float damage = 0.f);
34
35    void OpenBrace();
36    void CloseBrace();
37
38        void ToggleScaleWinding();
39    void SetCurColor(vec4 const &color);
40    void SetCurColor2(vec4 const &color);
41
42private:
43    void AddVertex(vec3 const &coord);
44    void AddDuplicateVertex(int i);
45    void AppendQuad(int i1, int i2, int i3, int i4, int base);
46    void AppendQuadDuplicateVerts(int i1, int i2, int i3, int i4, int base);
47    void AppendTriangle(int i1, int i2, int i3, int base);
48    void AppendTriangleDuplicateVerts(int i1, int i2, int i3, int base);
49    void ComputeNormals(int start, int vcount);
50    void SetVertColor(vec4 const &color);
51
52public:
53    void SetCurVertNormal(vec3 const &normal);
54    void SetCurVertColor(vec4 const &color);
55
56    void RadialJitter(float r);
57
58    void Translate(vec3 const &v);
59    void RotateX(float t);
60    void RotateY(float t);
61    void RotateZ(float t);
62    void Rotate(float t, vec3 const &axis);
63    void TaperX(float y, float z, float xoff);
64    void TaperY(float x, float z, float yoff);
65    void TaperZ(float x, float y, float zoff);
66    void Scale(vec3 const &s);
67    void MirrorX();
68    void MirrorY();
69    void MirrorZ();
70    void DupAndScale(vec3 const &s);
71    void Chamfer(float f);
72
73    void AppendCylinder(int nsides, float h, float r1, float r2,
74                        int dualside, int smooth);
75    void AppendCapsule(int ndivisions, float h, float r);
76    void AppendSphere(int ndivisions, vec3 const &size);
77    void AppendTorus(int ndivisions, float r1, float r2);
78    void AppendBox(vec3 const &size, float chamf = 0.f);
79    void AppendSmoothChamfBox(vec3 const &size, float chamf);
80    void AppendFlatChamfBox(vec3 const &size, float chamf);
81    void AppendBox(vec3 const &size, float chamf, bool smooth);
82    void AppendStar(int nbranches, float r1, float r2,
83                    int fade = 0, int fade2 = 0);
84    void AppendExpandedStar(int nbranches, float r1, float r2, float extrar);
85    void AppendDisc(int nsides, float r, int fade = 0);
86    void AppendSimpleTriangle(float size, int fade = 0);
87    void AppendSimpleQuad(float size, int fade = 0);
88    void AppendSimpleQuad(vec2 p1, vec2 p2, float z = 0.f, int fade = 0);
89    void AppendCog(int nbsides, float h, float r10, float r20, float r1,
90                   float r2, float r12, float r22, float sidemul, int offset);
91
92private:
93    vec4 m_color, m_color2;
94    Array<uint16_t> m_indices;
95    Array<vec3, vec3, vec4> m_vert;
96    Array<int, int> m_cursors;
97        bool m_ignore_winding_on_scale;
98
99    /* FIXME: put this in a separate class so that we can copy meshes. */
100    struct
101    {
102        Shader *shader;
103        ShaderAttrib coord, norm, color;
104        ShaderUniform modelview, view, invview, proj, normalmat, damage;
105        VertexDeclaration *vdecl;
106        VertexBuffer *vbo;
107        IndexBuffer *ibo;
108        int vertexcount, indexcount;
109    }
110    m_gpu;
111};
112
113} /* namespace lol */
114
115#endif /* __EASYMESH_EASYMESH_H__ */
116
Note: See TracBrowser for help on using the repository browser.