Changeset 1271


Ignore:
Timestamp:
Apr 22, 2012, 3:03:57 PM (9 years ago)
Author:
sam
Message:

orbital: fix the rotation of normal vectors in the mesh generator.

Location:
trunk/orbital
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/orbital/mesh.h

    r1269 r1271  
    278278    }
    279279
    280     void RotateZ(float t)
    281     {
    282         /* FIXME: use mat3 instead of mat4 when it's working */
    283         mat4 m = mat4::rotate(t, 0, 0, 1);
    284         for (int i = m_vert_cursor; i < m_vert.Count(); i++)
    285             m_vert[i].m1 = (m * vec4(m_vert[i].m1, 1.f)).xyz;
    286     }
    287 
    288     void RotateY(float t)
    289     {
    290         mat4 m = mat4::rotate(t, 0, 1, 0);
    291         for (int i = m_vert_cursor; i < m_vert.Count(); i++)
    292             m_vert[i].m1 = (m * vec4(m_vert[i].m1, 1.f)).xyz;
    293     }
    294 
    295     void RotateX(float t)
    296     {
    297         mat4 m = mat4::rotate(t, 1, 0, 0);
    298         for (int i = m_vert_cursor; i < m_vert.Count(); i++)
    299             m_vert[i].m1 = (m * vec4(m_vert[i].m1, 1.f)).xyz;
     280    void RotateX(float t) { Rotate(t, vec3(1, 0, 0)); }
     281    void RotateY(float t) { Rotate(t, vec3(0, 1, 0)); }
     282    void RotateZ(float t) { Rotate(t, vec3(0, 0, 1)); }
     283
     284    void Rotate(float t, vec3 const &axis)
     285    {
     286        mat3 m = mat3::rotate(t, axis);
     287        for (int i = m_vert_cursor; i < m_vert.Count(); i++)
     288        {
     289            m_vert[i].m1 = m * m_vert[i].m1;
     290            m_vert[i].m2 = m * m_vert[i].m2;
     291        }
    300292    }
    301293
    302294    void TaperX(float y, float z, float xoff)
    303295    {
     296        /* FIXME: this code breaks normals! */
    304297        for (int i = m_vert_cursor; i < m_vert.Count(); i++)
    305298        {
     
    329322    void Scale(vec3 const &s)
    330323    {
     324        /* FIXME: this code breaks normals! */
    331325        for (int i = m_vert_cursor; i < m_vert.Count(); i++)
    332326        {
     
    468462        qibase = m_quadidx.Count();
    469463
     464        /* The 8 quads at each edge of the box */
    470465        if (chamf)
    471466        {
    472             /* The 8 quads at each edge of the box */
    473467            static int const quadlist[48] =
    474468            {
     
    487481                                     quadlist[i + 2], quadlist[i + 3], vbase);
    488482            }
    489 
    490             /* The 8 triangles at each corner of the box */
     483        }
     484
     485        /* The 8 triangles at each corner of the box */
     486        if (chamf)
     487        {
    491488            static int const trilist[24] =
    492489            {
  • trunk/orbital/orbital.cpp

    r1268 r1271  
    2929{
    3030    m.SetCurColor(vec4(1.0, 1.0, 0.0, 1.0));
    31     m.AppendSphere(vec3(1.0, 0.5, 1.0), 32);
    32     m.Translate(vec3(0.0, -0.4, 0.0));
     31    m.AppendSphere(vec3(2.0, 1.6, 2.0), 24);
     32    m.Translate(vec3(0.0, -1.0, 0.0));
    3333    m.Flush();
    3434
    3535    m.SetCurColor(vec4(1.0, 0.0, 1.0, 1.0));
    36     m.AppendSmoothChamfBox(vec3(0.5, 0.5, 0.5), 0.1);
     36    m.AppendFlatChamfBox(vec3(1.0, 1.0, 1.0), 0.1);
    3737    m.RotateX(45.0);
    3838    m.RotateZ(45.0);
    39     m.Translate(vec3(0.0, 0.6, 0.0));
    40     m.Flush();
    41 
    42     m.SetCurColor(vec4(0.0, 1.0, 0.5, 1.0));
    43     m.SetCurColor2(vec4(0.0, 0.5, 1.0, 1.0));
    44     m.AppendStar(5, 0.4, 0.7, 1, 1);
     39    m.Translate(vec3(0.0, 1.0, 0.0));
    4540    m.Flush();
    4641
Note: See TracChangeset for help on using the changeset viewer.