- // rotate, scale, and translate the vertex locations
- point[0] = verts1->v[0] * scalex1 + verts2->v[0] * scalex2 + translatex;
- point[1] = verts1->v[1] * scaley1 + verts2->v[1] * scaley2 + translatey;
- point[2] = verts1->v[2] * scalez1 + verts2->v[2] * scalez2 + translatez;
- *av++ = point[0] * matrix_x[0] + point[1] * matrix_y[0] + point[2] * matrix_z[0] + softwaretransform_offset[0];
- *av++ = point[0] * matrix_x[1] + point[1] * matrix_y[1] + point[2] * matrix_z[1] + softwaretransform_offset[1];
- *av++ = point[0] * matrix_x[2] + point[1] * matrix_y[2] + point[2] * matrix_z[2] + softwaretransform_offset[2];
- // rotate the normals
- point[0] = verts1->n[0] * ilerp127 + verts2->n[0] * lerp127;
- point[1] = verts1->n[1] * ilerp127 + verts2->n[1] * lerp127;
- point[2] = verts1->n[2] * ilerp127 + verts2->n[2] * lerp127;
- *avn++ = point[0] * softwaretransform_x[0] + point[1] * softwaretransform_y[0] + point[2] * softwaretransform_z[0];
- *avn++ = point[0] * softwaretransform_x[1] + point[1] * softwaretransform_y[1] + point[2] * softwaretransform_z[1];
- *avn++ = point[0] * softwaretransform_x[2] + point[1] * softwaretransform_y[2] + point[2] * softwaretransform_z[2];
- verts1++;verts2++;
+ VectorScale(fscale3, lerp3, scale3);
+ if (lerp4)
+ {
+ VectorScale(fscale4, lerp4, scale4);
+ translate[0] = translate1[0] * lerp1 + translate2[0] * lerp2 + translate3[0] * lerp3 + translate4[0] * lerp4;
+ translate[1] = translate1[1] * lerp1 + translate2[1] * lerp2 + translate3[1] * lerp3 + translate4[1] * lerp4;
+ translate[2] = translate1[2] * lerp1 + translate2[2] * lerp2 + translate3[2] * lerp3 + translate4[2] * lerp4;
+ // generate vertices
+ for (i = 0;i < vertcount;i++)
+ {
+ av[0] = verts1->v[0] * scale1[0] + verts2->v[0] * scale2[0] + verts3->v[0] * scale3[0] + verts4->v[0] * scale4[0] + translate[0];
+ av[1] = verts1->v[1] * scale1[1] + verts2->v[1] * scale2[1] + verts3->v[1] * scale3[1] + verts4->v[1] * scale4[1] + translate[1];
+ av[2] = verts1->v[2] * scale1[2] + verts2->v[2] * scale2[2] + verts3->v[2] * scale3[2] + verts4->v[2] * scale4[2] + translate[2];
+ n1 = m_bytenormals[verts1->lightnormalindex];
+ n2 = m_bytenormals[verts2->lightnormalindex];
+ n3 = m_bytenormals[verts3->lightnormalindex];
+ n4 = m_bytenormals[verts4->lightnormalindex];
+ avn[0] = n1[0] * lerp1 + n2[0] * lerp2 + n3[0] * lerp3 + n4[0] * lerp4;
+ avn[1] = n1[1] * lerp1 + n2[1] * lerp2 + n3[1] * lerp3 + n4[1] * lerp4;
+ avn[2] = n1[2] * lerp1 + n2[2] * lerp2 + n3[2] * lerp3 + n4[2] * lerp4;
+ av += 4;
+ avn += 4;
+ verts1++;verts2++;verts3++;verts4++;
+ }
+ }
+ else
+ {
+ translate[0] = translate1[0] * lerp1 + translate2[0] * lerp2 + translate3[0] * lerp3;
+ translate[1] = translate1[1] * lerp1 + translate2[1] * lerp2 + translate3[1] * lerp3;
+ translate[2] = translate1[2] * lerp1 + translate2[2] * lerp2 + translate3[2] * lerp3;
+ // generate vertices
+ for (i = 0;i < vertcount;i++)
+ {
+ av[0] = verts1->v[0] * scale1[0] + verts2->v[0] * scale2[0] + verts3->v[0] * scale3[0] + translate[0];
+ av[1] = verts1->v[1] * scale1[1] + verts2->v[1] * scale2[1] + verts3->v[1] * scale3[1] + translate[1];
+ av[2] = verts1->v[2] * scale1[2] + verts2->v[2] * scale2[2] + verts3->v[2] * scale3[2] + translate[2];
+ n1 = m_bytenormals[verts1->lightnormalindex];
+ n2 = m_bytenormals[verts2->lightnormalindex];
+ n3 = m_bytenormals[verts3->lightnormalindex];
+ avn[0] = n1[0] * lerp1 + n2[0] * lerp2 + n3[0] * lerp3;
+ avn[1] = n1[1] * lerp1 + n2[1] * lerp2 + n3[1] * lerp3;
+ avn[2] = n1[2] * lerp1 + n2[2] * lerp2 + n3[2] * lerp3;
+ av += 4;
+ avn += 4;
+ verts1++;verts2++;verts3++;
+ }
+ }
+ }
+ else
+ {
+ translate[0] = translate1[0] * lerp1 + translate2[0] * lerp2;
+ translate[1] = translate1[1] * lerp1 + translate2[1] * lerp2;
+ translate[2] = translate1[2] * lerp1 + translate2[2] * lerp2;
+ // generate vertices
+ for (i = 0;i < vertcount;i++)
+ {
+ av[0] = verts1->v[0] * scale1[0] + verts2->v[0] * scale2[0] + translate[0];
+ av[1] = verts1->v[1] * scale1[1] + verts2->v[1] * scale2[1] + translate[1];
+ av[2] = verts1->v[2] * scale1[2] + verts2->v[2] * scale2[2] + translate[2];
+ n1 = m_bytenormals[verts1->lightnormalindex];
+ n2 = m_bytenormals[verts2->lightnormalindex];
+ avn[0] = n1[0] * lerp1 + n2[0] * lerp2;
+ avn[1] = n1[1] * lerp1 + n2[1] * lerp2;
+ avn[2] = n1[2] * lerp1 + n2[2] * lerp2;
+ av += 4;
+ avn += 4;
+ verts1++;verts2++;
+ }