Пример #1
0
        /*
         * ================
         * R_AliasSetupLighting
         * ================
         */
        static void R_AliasSetupLighting(alight_t plighting)
        {
            // guarantee that no vertex will ever be lit below LIGHT_MIN, so we don't have
            // to clamp off the bottom
            r_ambientlight = plighting.ambientlight;

            if (r_ambientlight < LIGHT_MIN)
            {
                r_ambientlight = LIGHT_MIN;
            }

            r_ambientlight = (255 - r_ambientlight) << vid.VID_CBITS;

            if (r_ambientlight < LIGHT_MIN)
            {
                r_ambientlight = LIGHT_MIN;
            }

            r_shadelight = plighting.shadelight;

            if (r_shadelight < 0)
            {
                r_shadelight = 0;
            }

            r_shadelight *= vid.VID_GRADES;

            // rotate the lighting vector into the model's frame of reference
            r_plightvec[0] = mathlib.DotProduct(plighting.plightvec, alias_forward);
            r_plightvec[1] = -mathlib.DotProduct(plighting.plightvec, alias_right);
            r_plightvec[2] = mathlib.DotProduct(plighting.plightvec, alias_up);
        }
Пример #2
0
        /*
         * ================
         * R_AliasDrawModel
         * ================
         */
        static void R_AliasDrawModel(alight_t plighting)
        {
            r_amodels_drawn++;

            // cache align
            pfinalverts = (draw.finalvert_t[])finalverts;
            pauxverts   = auxverts;

            paliashdr = (model.aliashdr_t)model.Mod_Extradata(currententity.model);
            pmdl      = (model.mdl_t)paliashdr.model;

            R_AliasSetupSkin();
            R_AliasSetUpTransform(currententity.trivial_accept);
            R_AliasSetupLighting(plighting);
            R_AliasSetupFrame();

            if (currententity.colormap == null)
            {
                sys_linux.Sys_Error("R_AliasDrawModel: !currententity.colormap");
            }

            r_affinetridesc.drawtype = (currententity.trivial_accept == 3) &&
                                       r_recursiveaffinetriangles;

            if (r_affinetridesc.drawtype)
            {
                draw.D_PolysetUpdateTables();                   // FIXME: precalc...
            }
            else
            {
            }

            acolormap = currententity.colormap;

            if (currententity != client.cl.viewent)
            {
                ziscale = (double)0x8000 * (double)0x10000;
            }
            else
            {
                ziscale = (double)0x8000 * (double)0x10000 * 3.0;
            }

            if (currententity.trivial_accept != 0)
            {
                R_AliasPrepareUnclippedPoints();
            }
            else
            {
                R_AliasPreparePoints();
            }
        }
Пример #3
0
        /*
        =============
        R_DrawEntitiesOnList
        =============
        */
        static void R_DrawEntitiesOnList()
        {
            int			i, j;
            int			lnum;
            alight_t	lighting = new alight_t();
            // FIXME: remove and do real lighting
            double[]	lightvec = {-1, 0, 0};
            double[]	dist = new double[3] {0, 0, 0};
            double		add;

            if (r_drawentities.value == 0)
                return;

            for (i=0 ; i<client.cl_numvisedicts ; i++)
            {
                currententity = client.cl_visedicts[i];

                if (currententity == client.cl_entities[client.cl.viewentity])
                {
                    if (chase.chase_active.value == 0)
                    {
                        continue; // don't draw the player
                    }
                    else
                    {
                        currententity.angles[0] *= 0.3;
                    }
                }
                switch (currententity.model.type)
                {
                case model.modtype_t.mod_sprite:
                    mathlib.VectorCopy (currententity.origin, r_entorigin);
                    mathlib.VectorSubtract(r_origin, r_entorigin, modelorg);
                    R_DrawSprite ();
                    break;

                case model.modtype_t.mod_alias:
                    /*if (currententity.model.name.CompareTo("progs/flame2.mdl") != 0)
                        continue;*/
                    mathlib.VectorCopy(currententity.origin, r_entorigin);
                    mathlib.VectorSubtract(r_origin, r_entorigin, modelorg);

                // see if the bounding box lets us trivially reject, also sets
                // trivial accept status
                    if (R_AliasCheckBBox ())
                    {
                        j = R_LightPoint (currententity.origin);

                        lighting.ambientlight = j;
                        lighting.shadelight = j;

                        lighting.plightvec = lightvec;

                        for (lnum=0 ; lnum<client.MAX_DLIGHTS ; lnum++)
                        {
                            if (client.cl_dlights[lnum].die >= client.cl.time)
                            {
                                mathlib.VectorSubtract (currententity.origin,
                                                client.cl_dlights[lnum].origin,
                                                dist);
                                add = client.cl_dlights[lnum].radius - mathlib.Length(dist);

                                if (add > 0)
                                    lighting.ambientlight += (int)add;
                            }
                        }

                    // clamp lighting so it doesn't overbright as much
                        if (lighting.ambientlight > 128)
                            lighting.ambientlight = 128;
                        if (lighting.ambientlight + lighting.shadelight > 192)
                            lighting.shadelight = 192 - lighting.ambientlight;

                        R_AliasDrawModel (lighting);
                    }
                    break;

                default:
                    break;
                }
            }
        }
Пример #4
0
        /*
        ================
        R_AliasSetupLighting
        ================
        */
        static void R_AliasSetupLighting(alight_t plighting)
        {
            // guarantee that no vertex will ever be lit below LIGHT_MIN, so we don't have
            // to clamp off the bottom
            r_ambientlight = plighting.ambientlight;

            if (r_ambientlight < LIGHT_MIN)
                r_ambientlight = LIGHT_MIN;

            r_ambientlight = (255 - r_ambientlight) << vid.VID_CBITS;

            if (r_ambientlight < LIGHT_MIN)
                r_ambientlight = LIGHT_MIN;

            r_shadelight = plighting.shadelight;

            if (r_shadelight < 0)
                r_shadelight = 0;

            r_shadelight *= vid.VID_GRADES;

            // rotate the lighting vector into the model's frame of reference
            r_plightvec[0] = mathlib.DotProduct(plighting.plightvec, alias_forward);
            r_plightvec[1] = -mathlib.DotProduct(plighting.plightvec, alias_right);
            r_plightvec[2] = mathlib.DotProduct(plighting.plightvec, alias_up);
        }
Пример #5
0
        /*
        ================
        R_AliasDrawModel
        ================
        */
        static void R_AliasDrawModel(alight_t plighting)
        {
            r_amodels_drawn++;

            // cache align
            pfinalverts = (draw.finalvert_t[])finalverts;
            pauxverts = auxverts;

            paliashdr = (model.aliashdr_t)model.Mod_Extradata (currententity.model);
            pmdl = (model.mdl_t)paliashdr.model;

            R_AliasSetupSkin ();
            R_AliasSetUpTransform (currententity.trivial_accept);
            R_AliasSetupLighting (plighting);
            R_AliasSetupFrame ();

            if (currententity.colormap == null)
                sys_linux.Sys_Error ("R_AliasDrawModel: !currententity.colormap");

            r_affinetridesc.drawtype = (currententity.trivial_accept == 3) &&
                    r_recursiveaffinetriangles;

            if (r_affinetridesc.drawtype)
            {
                draw.D_PolysetUpdateTables ();		// FIXME: precalc...
            }
            else
            {
            }

            acolormap = currententity.colormap;

            if (currententity != client.cl.viewent)
                ziscale = (double)0x8000 * (double)0x10000;
            else
                ziscale = (double)0x8000 * (double)0x10000 * 3.0;

            if (currententity.trivial_accept != 0)
                R_AliasPrepareUnclippedPoints ();
            else
                R_AliasPreparePoints ();
        }
Пример #6
0
        /*
         * =============
         * R_DrawEntitiesOnList
         * =============
         */
        static void R_DrawEntitiesOnList()
        {
            int      i, j;
            int      lnum;
            alight_t lighting = new alight_t();

            // FIXME: remove and do real lighting
            double[] lightvec = { -1, 0, 0 };
            double[] dist     = new double[3];
            double   add;

            if (r_drawentities.value == 0)
            {
                return;
            }

            for (i = 0; i < client.cl_numvisedicts; i++)
            {
                currententity = client.cl_visedicts[i];

                if (currententity == client.cl_entities[client.cl.viewentity])
                {
                    continue;                   // don't draw the player
                }
                switch (currententity.model.type)
                {
                case model.modtype_t.mod_sprite:
                    mathlib.VectorCopy(currententity.origin, ref r_entorigin);
                    mathlib.VectorSubtract(r_origin, r_entorigin, ref modelorg);
                    R_DrawSprite();
                    break;

                case model.modtype_t.mod_alias:
                    /*if (currententity.model.name.CompareTo("progs/flame2.mdl") != 0)
                     *  continue;*/
                    mathlib.VectorCopy(currententity.origin, ref r_entorigin);
                    mathlib.VectorSubtract(r_origin, r_entorigin, ref modelorg);

                    // see if the bounding box lets us trivially reject, also sets
                    // trivial accept status
                    if (R_AliasCheckBBox())
                    {
                        j = R_LightPoint(currententity.origin);

                        lighting.ambientlight = j;
                        lighting.shadelight   = j;

                        lighting.plightvec = lightvec;

                        for (lnum = 0; lnum < client.MAX_DLIGHTS; lnum++)
                        {
                            if (client.cl_dlights[lnum].die >= client.cl.time)
                            {
                                mathlib.VectorSubtract(currententity.origin,
                                                       client.cl_dlights[lnum].origin,
                                                       ref dist);
                                add = client.cl_dlights[lnum].radius - mathlib.Length(dist);

                                if (add > 0)
                                {
                                    lighting.ambientlight += (int)add;
                                }
                            }
                        }

                        // clamp lighting so it doesn't overbright as much
                        if (lighting.ambientlight > 128)
                        {
                            lighting.ambientlight = 128;
                        }
                        if (lighting.ambientlight + lighting.shadelight > 192)
                        {
                            lighting.shadelight = 192 - lighting.ambientlight;
                        }

                        R_AliasDrawModel(lighting);
                    }
                    break;

                default:
                    break;
                }
            }
        }