Changeset 1274


Ignore:
Timestamp:
Apr 22, 2012, 5:07:48 PM (8 years ago)
Author:
sam
Message:

orbital: implement simple triangle, simple quad, and disc in the mesh builder.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/orbital/mesh.h

    r1273 r1274  
    5959            else CASE("as")  { p = GetArg(p, f1, f2, f3, f4, f5); AppendStar((int)f1, f2, f4, (int)f5, (int)f5); }
    6060            else CASE("aes") { /* TODO */ }
    61             else CASE("ad")  { /* TODO */ }
    62             else CASE("at")  { /* TODO */ }
    63             else CASE("aq")  { /* TODO */ }
     61            else CASE("ad")  { p = GetArg(p, f1, f2, f3); AppendDisc((int)f1, f2, (int)f3); }
     62            else CASE("at")  { p = GetArg(p, f1, f2); AppendSimpleTriangle(f1, f2); }
     63            else CASE("aq")  { p = GetArg(p, f1, f2); AppendSimpleQuad(f1, f2); }
    6464            else CASE("acg") { /* TODO */ }
    6565            else CASE("irb") { MeshConvert(); }
     
    639639        AppendQuadVert(vec3(0.f, 0.f, 0.f));
    640640
    641         /* FIXME: use mat3 instead of mat4 when it's working */
    642         mat3 rotmat(mat4::rotate(180.0f / nbranches, 0.f, 1.f, 0.f));
     641        mat3 rotmat = mat3::rotate(180.0f / nbranches, 0.f, 1.f, 0.f);
    643642        vec3 p1(r1, 0.f, 0.f), p2(r2, 0.f, 0.f);
    644643
     
    665664
    666665    void AppendExpandedStar() {} /* TODO */
    667     void AppendDisc() {} /* TODO */
    668     void AppendSimpleTriangle() {} /* TODO */
    669     void AppendSimpleQuad() {} /* TODO */
     666
     667    void AppendDisc(int nsides, float r, int fade = 0)
     668    {
     669        int vbase = m_vert.Count();
     670
     671        AppendQuadVert(vec3(0.f, 0.f, 0.f));
     672
     673        mat3 rotmat = mat3::rotate(360.0f / nsides, 0.f, 1.f, 0.f);
     674        vec3 p1(r, 0.f, 0.f);
     675
     676        for (int i = 0; i < nsides; i++)
     677        {
     678            AppendQuadVert(p1);
     679            if (fade)
     680                SetCurVertColor(m_color2);
     681            AppendTriangle(0, ((i + 1) % nsides) + 1, i + 1, vbase);
     682            p1 = rotmat * p1;
     683        }
     684    }
     685
     686    void AppendSimpleTriangle(float size, int fade = 0)
     687    {
     688        mat3 m = mat3::rotate(120.f, 0.f, 1.f, 0.f);
     689        vec3 p(0.f, 0.f, size);
     690
     691        AppendQuadVert(p);
     692        p = m * p;
     693        AppendQuadVert(p);
     694        if (fade)
     695            SetCurVertColor(m_color2);
     696        p = m * p;
     697        AppendQuadVert(p);
     698        if (fade)
     699            SetCurVertColor(m_color2);
     700
     701        AppendTriangle(0, 1, 2, m_vert.Count() - 3);
     702    }
     703
     704    void AppendSimpleQuad(float size, int fade = 0)
     705    {
     706        AppendSimpleQuad(vec2(size * .5f), vec2(size * -.5f), 0.f, fade);
     707    }
     708
     709    void AppendSimpleQuad(vec2 p1, vec2 p2, float z = 0.f, int fade = 0)
     710    {
     711        AppendQuadVert(vec3(p2.x, z, -p1.y));
     712        AppendQuadVert(vec3(p2.x, z, -p2.y));
     713        AppendQuadVert(vec3(p1.x, z, -p2.y));
     714        if (fade)
     715            SetCurVertColor(m_color2);
     716        AppendQuadVert(vec3(p1.x, z, -p1.y));
     717        if (fade)
     718            SetCurVertColor(m_color2);
     719
     720        AppendQuad(0, 1, 2, 3, m_vert.Count() - 4);
     721        ComputeQuadNormals(m_quadidx.Count() - 4, 4);
     722    }
     723
    670724    void AppendCog() {} /* TODO */
    671725
Note: See TracChangeset for help on using the changeset viewer.