예제 #1
0
        static client()
        {
            int kk;

            for (kk = 0; kk < MAX_EFRAGS; kk++)
            {
                cl_efrags[kk] = new render.efrag_t();
            }
            for (kk = 0; kk < quakedef.MAX_EDICTS; kk++)
            {
                cl_entities[kk] = new render.entity_t();
            }
            for (kk = 0; kk < MAX_STATIC_ENTITIES; kk++)
            {
                cl_static_entities[kk] = new render.entity_t();
            }
            for (kk = 0; kk < MAX_TEMP_ENTITIES; kk++)
            {
                cl_temp_entities[kk] = new render.entity_t();
            }
            for (kk = 0; kk < quakedef.MAX_LIGHTSTYLES; kk++)
            {
                cl_lightstyle[kk] = new lightstyle_t();
            }
            for (kk = 0; kk < MAX_DLIGHTS; kk++)
            {
                cl_dlights[kk] = new dlight_t();
            }
            for (kk = 0; kk < MAX_BEAMS; kk++)
            {
                cl_beams[kk] = new beam_t();
            }
        }
예제 #2
0
 static client()
 {
     int kk;
     for (kk = 0; kk < MAX_EFRAGS; kk++) cl_efrags[kk] = new render.efrag_t();
     for (kk = 0; kk < quakedef.MAX_EDICTS; kk++) cl_entities[kk] = new render.entity_t();
     for (kk = 0; kk < MAX_STATIC_ENTITIES; kk++) cl_static_entities[kk] = new render.entity_t();
     for (kk = 0; kk < MAX_TEMP_ENTITIES; kk++) cl_temp_entities[kk] = new render.entity_t();
     for (kk = 0; kk < quakedef.MAX_LIGHTSTYLES; kk++) cl_lightstyle[kk] = new lightstyle_t();
     for (kk = 0; kk < MAX_DLIGHTS; kk++) cl_dlights[kk] = new dlight_t();
     for (kk = 0; kk < MAX_BEAMS; kk++) cl_beams[kk] = new beam_t();
 }
예제 #3
0
        private void TestMap()
        {
            if (refdef == null)
            {
                refdef               = new refdef_t();
                refdef.x             = 0;
                refdef.y             = 0;
                refdef.width         = viddef.GetWidth();
                refdef.height        = viddef.GetHeight();
                refdef.fov_x         = fov_x;
                refdef.fov_y         = CalcFov(fov_x, refdef.width - 10, refdef.height - 10);
                refdef.vieworg       = new float[] { 0, 0, 0 };
                refdef.viewangles[0] = 0;
                refdef.viewangles[1] = 90;
                refdef.viewangles[2] = 0;
                refdef.blend         = new float[] { 0F, 0F, 0F, 0F };
                refdef.areabits      = null;
                refdef.num_entities  = 0;
                refdef.entities      = null;
                lightstyle_t light = new lightstyle_t();
                light.rgb          = new float[] { 1F, 1F, 1F };
                light.white        = 3F;
                refdef.lightstyles = new lightstyle_t[Defines.MAX_LIGHTSTYLES];
                for (int i = 0; i < Defines.MAX_LIGHTSTYLES; i++)
                {
                    refdef.lightstyles[i]       = new lightstyle_t();
                    refdef.lightstyles[i].rgb   = new float[] { 1F, 1F, 1F };
                    refdef.lightstyles[i].white = 3F;
                }
            }

            refdef.time           = Time() * 0.001F;
            refdef.viewangles[0] += KBD.my * 0.1F;
            refdef.viewangles[1] -= KBD.mx * 0.1F;
            refdef.vieworg[0]     = 0;
            refdef.vieworg[1]     = -79;
            refdef.vieworg[2]     = -131;
            refdef.vieworg[0]    += 1F / 16;
            refdef.vieworg[1]    += 1F / 16;
            refdef.vieworg[2]    += 1F / 16;
            re.RenderFrame(refdef);
        }
예제 #4
0
        private void RunTest()
        {
            if (refdef == null)
            {
                refdef            = new refdef_t();
                refdef.x          = 0;
                refdef.y          = 0;
                refdef.width      = viddef.GetWidth();
                refdef.height     = viddef.GetHeight();
                refdef.fov_x      = (Globals.fov == null) ? this.fov_x : Globals.fov.value;
                refdef.fov_x      = this.fov_x;
                refdef.fov_y      = Math3D.CalcFov(refdef.fov_x, refdef.width, refdef.height);
                refdef.vieworg    = new float[] { 140, -140, 50 };
                refdef.viewangles = new float[] { 0, 0, 0 };
                refdef.blend      = new float[] { 0F, 0F, 0F, 0F };
                refdef.areabits   = null;
                ent = new entity_t();
                model_t weapon     = re.RegisterModel("models/monsters/soldier/tris.md2");
                image_t weaponSkin = re.RegisterSkin("models/monsters/soldier/skin.pcx");
                ent.model  = weapon;
                ent.skin   = weaponSkin;
                ent.origin = new float[] { -60, 80, 25 };
                Math3D.VectorCopy(ent.origin, ent.oldorigin);
                ent.angles          = new float[] { 0, 300, 0 };
                refdef.entities     = new entity_t[] { ent };
                refdef.num_entities = refdef.entities.Length;
                lightstyle_t light = new lightstyle_t();
                light.rgb          = new float[] { 1F, 1F, 1F };
                light.white        = 3F;
                refdef.lightstyles = new lightstyle_t[Defines.MAX_LIGHTSTYLES];
                for (int i = 0; i < Defines.MAX_LIGHTSTYLES; i++)
                {
                    refdef.lightstyles[i]       = new lightstyle_t();
                    refdef.lightstyles[i].rgb   = new float[] { 1F, 1F, 1F };
                    refdef.lightstyles[i].white = 3F;
                }

                refdef.viewangles[1] = 130;
                refdef.time          = Time() * 0.001F;
            }

            refdef.viewangles[0] += KBD.my * 0.1F;
            refdef.viewangles[1] -= KBD.mx * 0.1F;
            float dt = Time() * 0.001F - refdef.time;

            if (movePlayer != 0)
            {
                float velocity = 150F * dt;
                Math3D.AngleVectors(refdef.viewangles, vpn, vright, vup);
                if ((movePlayer & FORWARD_MASK) != 0)
                {
                    Math3D.VectorMA(refdef.vieworg, -velocity, vpn, refdef.vieworg);
                }
                if ((movePlayer & BACKWARD_MASK) != 0)
                {
                    Math3D.VectorMA(refdef.vieworg, velocity, vpn, refdef.vieworg);
                }
                if ((movePlayer & LEFT_MASK) != 0)
                {
                    Math3D.VectorMA(refdef.vieworg, velocity, vright, refdef.vieworg);
                }
                if ((movePlayer & RIGHT_MASK) != 0)
                {
                    Math3D.VectorMA(refdef.vieworg, -velocity, vright, refdef.vieworg);
                }
                refdef.vieworg[0] += 1F / 16;
                refdef.vieworg[1] += 1F / 16;
                refdef.vieworg[2] += 1F / 16;
            }

            refdef.time    = Time() * 0.001F;
            r_numparticles = 0;
            float[] diff = new float[] { 0, 0, 0 };
            Math3D.VectorSubtract(refdef.vieworg, ent.origin, diff);
            if (Math3D.VectorLength(diff) < 250 && active_particles.Size() == 0)
            {
                RailTrail(ent.origin, refdef.vieworg);
            }
            else
            {
                if (active_particles.Size() > 0)
                {
                    ent.frame = (int)((Time() * 0.013F) % 15);
                    Math3D.VectorNormalize(diff);
                    Math3D.Vectoangles(diff, ent.angles);
                    AnimateParticles();
                    refdef.num_particles = r_numparticles;
                }
                else
                {
                    ent.frame            = 0;
                    refdef.num_particles = 0;
                }
            }

            refdef.num_dlights = 0;
            re.RenderFrame(refdef);
        }
예제 #5
0
        public virtual void GL_BeginBuildingLightmaps(model_t m)
        {
            Int32 i;

            if (lightstyles == null)
            {
                lightstyles = new lightstyle_t[Defines.MAX_LIGHTSTYLES];
                for (i = 0; i < lightstyles.Length; i++)
                {
                    lightstyles[i] = new lightstyle_t();
                }
            }

            gl_lms.allocated.Fill(0);
            r_framecount = 1;
            GL_EnableMultitexture(true);
            GL_SelectTexture(TextureUnit.Texture1);
            for (i = 0; i < Defines.MAX_LIGHTSTYLES; i++)
            {
                lightstyles[i].rgb[0] = 1;
                lightstyles[i].rgb[1] = 1;
                lightstyles[i].rgb[2] = 1;
                lightstyles[i].white  = 3;
            }

            r_newrefdef.lightstyles = lightstyles;
            if (gl_state.lightmap_textures == 0)
            {
                gl_state.lightmap_textures = TEXNUM_LIGHTMAPS;
            }

            gl_lms.current_lightmap_texture = 1;
            var format = gl_monolightmap.string_renamed.ToUpper()[0];

            if (format == 'A')
            {
                gl_lms.internal_format = gl_tex_alpha_format;
            }
            else if (format == 'C')
            {
                gl_lms.internal_format = gl_tex_alpha_format;
            }
            else if (format == 'I')
            {
                gl_lms.internal_format = PixelInternalFormat.Intensity8;
            }
            else if (format == 'L')
            {
                gl_lms.internal_format = PixelInternalFormat.Luminance8;
            }
            else
            {
                gl_lms.internal_format = gl_tex_solid_format;
            }

            GL_Bind(gl_state.lightmap_textures + 0);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, ( Int32 )All.Linear);
            GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, ( Int32 )All.Linear);
            new Pinnable(dummy, (ptr) =>
            {
                GL.TexImage2D(TextureTarget.Texture2D, 0, gl_lms.internal_format, BLOCK_WIDTH, BLOCK_HEIGHT, 0, GL_LIGHTMAP_FORMAT, PixelType.UnsignedByte, ptr);
            });
        }