-void R_AliasLerpVerts(int vertcount,
- float lerp1, trivertx_t *verts1, vec3_t fscale1, vec3_t translate1,
- float lerp2, trivertx_t *verts2, vec3_t fscale2, vec3_t translate2,
- float lerp3, trivertx_t *verts3, vec3_t fscale3, vec3_t translate3,
- float lerp4, trivertx_t *verts4, vec3_t fscale4, vec3_t translate4)
-{
- int i;
- vec3_t scale1, scale2, scale3, scale4, translate;
- float *n1, *n2, *n3, *n4;
- float *av, *avn;
- av = aliasvert;
- avn = aliasvertnorm;
- VectorScale(fscale1, lerp1, scale1);
- if (lerp2)
- {
- VectorScale(fscale2, lerp2, scale2);
- if (lerp3)
- {
- 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 += 3;
- 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 += 3;
- 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 += 3;
- verts1++;verts2++;
- }
- }
- }
- else
- {
- translate[0] = translate1[0] * lerp1;
- translate[1] = translate1[1] * lerp1;
- translate[2] = translate1[2] * lerp1;
- // generate vertices
- if (lerp1 != 1)
- {
- // general but almost never used case
- for (i = 0;i < vertcount;i++)
- {
- av[0] = verts1->v[0] * scale1[0] + translate[0];
- av[1] = verts1->v[1] * scale1[1] + translate[1];
- av[2] = verts1->v[2] * scale1[2] + translate[2];
- n1 = m_bytenormals[verts1->lightnormalindex];
- avn[0] = n1[0] * lerp1;
- avn[1] = n1[1] * lerp1;
- avn[2] = n1[2] * lerp1;
- av += 4;
- avn += 3;
- verts1++;
- }
- }
- else
- {
- // fast normal case
- for (i = 0;i < vertcount;i++)
- {
- av[0] = verts1->v[0] * scale1[0] + translate[0];
- av[1] = verts1->v[1] * scale1[1] + translate[1];
- av[2] = verts1->v[2] * scale1[2] + translate[2];
- VectorCopy(m_bytenormals[verts1->lightnormalindex], avn);
- av += 4;
- avn += 3;
- verts1++;
- }
- }
- }
-}