Changeset 1278


Ignore:
Timestamp:
Apr 23, 2012, 2:20:16 PM (8 years ago)
Author:
sam
Message:

orbital: cylinders now have correct normals.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/orbital/mesh.h

    r1277 r1278  
    501501
    502502        mat3 rotmat = mat3::rotate(360.0f / nsides, 0.f, 1.f, 0.f);
    503         vec3 p1(r1, -h, 0.f);
    504         vec3 p2(r2, h, 0.f);
    505 
     503        vec3 p1(r1, -h, 0.f), p2(r2, h, 0.f), n;
     504
     505        /* Construct normal */
     506        n = p2;
     507        n.y = r1 * (r1 - r2) / (2.f * h);
     508        if (!smooth)
     509            n = mat3::rotate(180.0f / nsides, 0.f, 1.f, 0.f) * n;
     510        n = normalize(n);
     511
     512        /* FIXME: normals should be flipped in two-sided mode, but that
     513         * means duplicating the vertices again... */
    506514        for (int i = 0; i < nsides; i++)
    507515        {
    508516            AppendQuadVert(p1);
     517            SetCurVertNormal(n);
    509518            AppendQuadVert(p2);
     519            SetCurVertNormal(n);
    510520            SetCurVertColor(m_color2);
    511521
     
    516526                if (dualside)
    517527                    AppendQuad(i * 2, i * 2 + 1, j * 2 + 1, j * 2, vbase);
    518 
    519                 /* TODO: compute normals */
    520528            }
    521529
     
    526534            {
    527535                AppendQuadVert(p1);
     536                SetCurVertNormal(n);
    528537                AppendQuadVert(p2);
     538                SetCurVertNormal(n);
    529539                SetCurVertColor(m_color2);
    530540
     
    533543                    AppendQuad(i * 4, i * 4 + 1, i * 4 + 3, i * 4 + 2, vbase);
    534544            }
    535         }
    536 
    537         if (!smooth)
    538             ComputeQuadNormals(ibase, m_quadidx.Count() - ibase);
     545
     546            n = rotmat * n;
     547        }
    539548    }
    540549
Note: See TracChangeset for help on using the changeset viewer.