Пример #1
0
        /*
         * ================
         * R_AliasTransformAndProjectFinalVerts
         * ================
         */
        static void R_AliasTransformAndProjectFinalVerts(draw.finalvert_t[] pfv, model.stvert_t[] pstverts)
        {
            int    i, temp;
            double lightcos;

            double[] plightnormal;
            double   zi;

            model.trivertx_t pverts;

            for (i = 0; i < r_anumverts; i++)
            {
                draw.finalvert_t fv      = pfv[i];
                model.stvert_t   stverts = pstverts[i];
                pverts = r_apverts[i];

                // transform and project
                zi = 1.0 / (mathlib.DotProduct(pverts.v, aliastransform[2]) +
                            aliastransform[2][3]);

                // x, y, and z are scaled down by 1/2**31 in the transform, so 1/z is
                // scaled up by 1/2**31, and the scaling cancels out for x and y in the
                // projection
                fv.v[5] = (int)zi;

                fv.v[0] = (int)(((mathlib.DotProduct(pverts.v, aliastransform[0]) +
                                  aliastransform[0][3]) * zi) + aliasxcenter);
                fv.v[1] = (int)(((mathlib.DotProduct(pverts.v, aliastransform[1]) +
                                  aliastransform[1][3]) * zi) + aliasycenter);

                fv.v[2]  = stverts.s;
                fv.v[3]  = stverts.t;
                fv.flags = stverts.onseam;

                // lighting
                plightnormal = r_avertexnormals[pverts.lightnormalindex];
                lightcos     = mathlib.DotProduct(plightnormal, r_plightvec);
                temp         = r_ambientlight;

                if (lightcos < 0)
                {
                    temp += (int)(r_shadelight * lightcos);

                    // clamp; because we limited the minimum ambient and shading light, we
                    // don't have to clamp low light, just bright
                    if (temp < 0)
                    {
                        temp = 0;
                    }
                }

                fv.v[4] = temp;
            }
        }
Пример #2
0
        /*
         * ================
         * R_AliasTransformFinalVert
         * ================
         */
        static void R_AliasTransformFinalVert(draw.finalvert_t fv, auxvert_t av,
                                              model.trivertx_t pverts, model.stvert_t pstverts)
        {
            int    temp;
            double lightcos;

            double[] plightnormal;

            av.fv[0] = mathlib.DotProduct(pverts.v, aliastransform[0]) +
                       aliastransform[0][3];
            av.fv[1] = mathlib.DotProduct(pverts.v, aliastransform[1]) +
                       aliastransform[1][3];
            av.fv[2] = mathlib.DotProduct(pverts.v, aliastransform[2]) +
                       aliastransform[2][3];

            fv.v[2] = pstverts.s;
            fv.v[3] = pstverts.t;

            fv.flags = pstverts.onseam;

            // lighting
            plightnormal = r_avertexnormals[pverts.lightnormalindex];
            lightcos     = mathlib.DotProduct(plightnormal, r_plightvec);
            temp         = r_ambientlight;

            if (lightcos < 0)
            {
                temp += (int)(r_shadelight * lightcos);

                // clamp; because we limited the minimum ambient and shading light, we
                // don't have to clamp low light, just bright
                if (temp < 0)
                {
                    temp = 0;
                }
            }

            fv.v[4] = temp;
        }