⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.java

📁 Jake2是一个Java 3D游戏引擎.
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	*/	void R_DrawParticles() {		if (gl_ext_pointparameters.value != 0.0f && qglPointParameterfEXT) {			gl.glEnableClientState(GL.GL_VERTEX_ARRAY);			gl.glVertexPointer(3, GL.GL_FLOAT, 0, particle_t.vertexArray);			gl.glEnableClientState(GL.GL_COLOR_ARRAY);			gl.glColorPointer(4, GL.GL_UNSIGNED_BYTE, 0, particle_t.colorArray);						gl.glDepthMask(false);			gl.glEnable(GL.GL_BLEND);			gl.glDisable(GL.GL_TEXTURE_2D);			gl.glPointSize(gl_particle_size.value);						gl.glDrawArrays(GL.GL_POINTS, 0, r_newrefdef.num_particles);						gl.glDisableClientState(GL.GL_COLOR_ARRAY);			gl.glDisableClientState(GL.GL_VERTEX_ARRAY);			gl.glDisable(GL.GL_BLEND);			gl.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);			gl.glDepthMask(true);			gl.glEnable(GL.GL_TEXTURE_2D);		}		else {			GL_DrawParticles(r_newrefdef.num_particles);		}	}	/*	============	R_PolyBlend	============	*/	void R_PolyBlend() {		if (gl_polyblend.value == 0.0f)			return;		if (v_blend[3] == 0.0f)			return;		gl.glDisable(GL.GL_ALPHA_TEST);		gl.glEnable(GL.GL_BLEND);		gl.glDisable(GL.GL_DEPTH_TEST);		gl.glDisable(GL.GL_TEXTURE_2D);		gl.glLoadIdentity();		// FIXME: get rid of these		gl.glRotatef(-90, 1, 0, 0); // put Z going up		gl.glRotatef(90, 0, 0, 1); // put Z going up		gl.glColor4f(v_blend[0], v_blend[1], v_blend[2], v_blend[3]);		gl.glBegin(GL.GL_QUADS);		gl.glVertex3f(10, 100, 100);		gl.glVertex3f(10, -100, 100);		gl.glVertex3f(10, -100, -100);		gl.glVertex3f(10, 100, -100);		gl.glEnd();		gl.glDisable(GL.GL_BLEND);		gl.glEnable(GL.GL_TEXTURE_2D);		gl.glEnable(GL.GL_ALPHA_TEST);		gl.glColor4f(1, 1, 1, 1);	}	// =======================================================================	int SignbitsForPlane(cplane_t out) {		// for fast box on planeside test		int bits = 0;		for (int j = 0; j < 3; j++) {			if (out.normal[j] < 0)				bits |= (1 << j);		}		return bits;	}	void R_SetFrustum() {		// rotate VPN right by FOV_X/2 degrees		Math3D.RotatePointAroundVector(frustum[0].normal, vup, vpn, - (90f - r_newrefdef.fov_x / 2f));		// rotate VPN left by FOV_X/2 degrees		Math3D.RotatePointAroundVector(frustum[1].normal, vup, vpn, 90f - r_newrefdef.fov_x / 2f);		// rotate VPN up by FOV_X/2 degrees		Math3D.RotatePointAroundVector(frustum[2].normal, vright, vpn, 90f - r_newrefdef.fov_y / 2f);		// rotate VPN down by FOV_X/2 degrees		Math3D.RotatePointAroundVector(frustum[3].normal, vright, vpn, - (90f - r_newrefdef.fov_y / 2f));		for (int i = 0; i < 4; i++) {			frustum[i].type = Defines.PLANE_ANYZ;			frustum[i].dist = Math3D.DotProduct(r_origin, frustum[i].normal);			frustum[i].signbits = (byte) SignbitsForPlane(frustum[i]);		}	}	// =======================================================================	/*	===============	R_SetupFrame	===============	*/	void R_SetupFrame() {		int i;		mleaf_t leaf;		r_framecount++;		//	build the transformation matrix for the given view angles		Math3D.VectorCopy(r_newrefdef.vieworg, r_origin);		Math3D.AngleVectors(r_newrefdef.viewangles, vpn, vright, vup);		//	current viewcluster		if ((r_newrefdef.rdflags & Defines.RDF_NOWORLDMODEL) == 0) {			r_oldviewcluster = r_viewcluster;			r_oldviewcluster2 = r_viewcluster2;			leaf = Mod_PointInLeaf(r_origin, r_worldmodel);			r_viewcluster = r_viewcluster2 = leaf.cluster;			// check above and below so crossing solid water doesn't draw wrong			if (leaf.contents == 0) { // look down a bit				float[] temp = { 0, 0, 0 };				Math3D.VectorCopy(r_origin, temp);				temp[2] -= 16;				leaf = Mod_PointInLeaf(temp, r_worldmodel);				if ((leaf.contents & Defines.CONTENTS_SOLID) == 0 && (leaf.cluster != r_viewcluster2))					r_viewcluster2 = leaf.cluster;			}			else { // look up a bit				float[] temp = { 0, 0, 0 };				Math3D.VectorCopy(r_origin, temp);				temp[2] += 16;				leaf = Mod_PointInLeaf(temp, r_worldmodel);				if ((leaf.contents & Defines.CONTENTS_SOLID) == 0 && (leaf.cluster != r_viewcluster2))					r_viewcluster2 = leaf.cluster;			}		}		for (i = 0; i < 4; i++)			v_blend[i] = r_newrefdef.blend[i];		c_brush_polys = 0;		c_alias_polys = 0;		// clear out the portion of the screen that the NOWORLDMODEL defines		if ((r_newrefdef.rdflags & Defines.RDF_NOWORLDMODEL) != 0) {			gl.glEnable(GL.GL_SCISSOR_TEST);			gl.glClearColor(0.3f, 0.3f, 0.3f, 1.0f);			gl.glScissor(				r_newrefdef.x,				vid.height - r_newrefdef.height - r_newrefdef.y,				r_newrefdef.width,				r_newrefdef.height);			gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);			gl.glClearColor(1.0f, 0.0f, 0.5f, 0.5f);			gl.glDisable(GL.GL_SCISSOR_TEST);		}	}	void MYgluPerspective(double fovy, double aspect, double zNear, double zFar) {		double xmin, xmax, ymin, ymax;		ymax = zNear * Math.tan(fovy * Math.PI / 360.0);		ymin = -ymax;		xmin = ymin * aspect;		xmax = ymax * aspect;		xmin += - (2 * gl_state.camera_separation) / zNear;		xmax += - (2 * gl_state.camera_separation) / zNear;		gl.glFrustum(xmin, xmax, ymin, ymax, zNear, zFar);	}	/*	=============	R_SetupGL	=============	*/	void R_SetupGL() {		float screenaspect;		int x, x2, y2, y, w, h;		//		// set up viewport		//		x = (int) Math.floor(r_newrefdef.x * vid.width / vid.width);		x2 = (int) Math.ceil((r_newrefdef.x + r_newrefdef.width) * vid.width / vid.width);		y = (int) Math.floor(vid.height - r_newrefdef.y * vid.height / vid.height);		y2 = (int) Math.ceil(vid.height - (r_newrefdef.y + r_newrefdef.height) * vid.height / vid.height);		w = x2 - x;		h = y - y2;		gl.glViewport(x, y2, w, h);		//		// set up projection matrix		//		screenaspect = (float) r_newrefdef.width / r_newrefdef.height;		gl.glMatrixMode(GL.GL_PROJECTION);		gl.glLoadIdentity();		MYgluPerspective(r_newrefdef.fov_y, screenaspect, 4, 4096);		gl.glCullFace(GL.GL_FRONT);		gl.glMatrixMode(GL.GL_MODELVIEW);		gl.glLoadIdentity();		gl.glRotatef(-90, 1, 0, 0); // put Z going up		gl.glRotatef(90, 0, 0, 1); // put Z going up		gl.glRotatef(-r_newrefdef.viewangles[2], 1, 0, 0);		gl.glRotatef(-r_newrefdef.viewangles[0], 0, 1, 0);		gl.glRotatef(-r_newrefdef.viewangles[1], 0, 0, 1);		gl.glTranslatef(-r_newrefdef.vieworg[0], -r_newrefdef.vieworg[1], -r_newrefdef.vieworg[2]);		gl.glGetFloatv(GL.GL_MODELVIEW_MATRIX, r_world_matrix);		//		// set drawing parms		//		if (gl_cull.value != 0.0f)			gl.glEnable(GL.GL_CULL_FACE);		else			gl.glDisable(GL.GL_CULL_FACE);		gl.glDisable(GL.GL_BLEND);		gl.glDisable(GL.GL_ALPHA_TEST);		gl.glEnable(GL.GL_DEPTH_TEST);	}	/*	=============	R_Clear	=============	*/	int trickframe = 0;	void R_Clear() {		if (gl_ztrick.value != 0.0f) {			if (gl_clear.value != 0.0f) {				gl.glClear(GL.GL_COLOR_BUFFER_BIT);			}			trickframe++;			if ((trickframe & 1) != 0) {				gldepthmin = 0;				gldepthmax = 0.49999f;				gl.glDepthFunc(GL.GL_LEQUAL);			}			else {				gldepthmin = 1;				gldepthmax = 0.5f;				gl.glDepthFunc(GL.GL_GEQUAL);			}		}		else {			if (gl_clear.value != 0.0f)				gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);			else				gl.glClear(GL.GL_DEPTH_BUFFER_BIT);			gldepthmin = 0;			gldepthmax = 1;			gl.glDepthFunc(GL.GL_LEQUAL);		}		gl.glDepthRange(gldepthmin, gldepthmax);	}	void R_Flash() {		R_PolyBlend();	}	/*	================	R_RenderView		r_newrefdef must be set before the first call	================	*/	void R_RenderView(refdef_t fd) {		if (r_norefresh.value != 0.0f)			return;		r_newrefdef = fd;		// included by cwei		if (r_newrefdef == null) {			Com.Error(Defines.ERR_DROP, "R_RenderView: refdef_t fd is null");		}		if (r_worldmodel == null && (r_newrefdef.rdflags & Defines.RDF_NOWORLDMODEL) == 0)			Com.Error(Defines.ERR_DROP, "R_RenderView: NULL worldmodel");		if (r_speeds.value != 0.0f) {			c_brush_polys = 0;			c_alias_polys = 0;		}		R_PushDlights();		if (gl_finish.value != 0.0f)			gl.glFinish();		R_SetupFrame();		R_SetFrustum();		R_SetupGL();		R_MarkLeaves(); // done here so we know if we're in water		R_DrawWorld();		R_DrawEntitiesOnList();		R_RenderDlights();		R_DrawParticles();		R_DrawAlphaSurfaces();		R_Flash();		if (r_speeds.value != 0.0f) {			VID.Printf(				Defines.PRINT_ALL,				"%4i wpoly %4i epoly %i tex %i lmaps\n",				new Vargs(4).add(c_brush_polys).add(c_alias_polys).add(c_visible_textures).add(c_visible_lightmaps));		}	}	void R_SetGL2D() {		// set 2D virtual screen size		gl.glViewport(0, 0, vid.width, vid.height);		gl.glMatrixMode(GL.GL_PROJECTION);		gl.glLoadIdentity();		gl.glOrtho(0, vid.width, vid.height, 0, -99999, 99999);		gl.glMatrixMode(GL.GL_MODELVIEW);		gl.glLoadIdentity();		gl.glDisable(GL.GL_DEPTH_TEST);		gl.glDisable(GL.GL_CULL_FACE);		gl.glDisable(GL.GL_BLEND);		gl.glEnable(GL.GL_ALPHA_TEST);		gl.glColor4f(1, 1, 1, 1);	}	/*	====================	R_SetLightLevel		====================	*/	void R_SetLightLevel() {		float[] shadelight = { 0, 0, 0 };		if ((r_newrefdef.rdflags & Defines.RDF_NOWORLDMODEL) != 0)			return;		// save off light value for server to look at (BIG HACK!)		R_LightPoint(r_newrefdef.vieworg, shadelight);		// pick the greatest component, which should be the same		// as the mono value returned by software		if (shadelight[0] > shadelight[1]) {			if (shadelight[0] > shadelight[2])				r_lightlevel.value = 150 * shadelight[0];			else				r_lightlevel.value = 150 * shadelight[2];		}		else {			if (shadelight[1] > shadelight[2])				r_lightlevel.value = 150 * shadelight[1];			else				r_lightlevel.value = 150 * shadelight[2];		}	}	/*	@@@@@@@@@@@@@@@@@@@@@	R_RenderFrame		@@@@@@@@@@@@@@@@@@@@@	*/	protected void R_RenderFrame(refdef_t fd) {		R_RenderView(fd);		R_SetLightLevel();		R_SetGL2D();	}	protected void R_Register() {		r_lefthand = Cvar.Get("hand", "0", Globals.CVAR_USERINFO | Globals.CVAR_ARCHIVE);		r_norefresh = Cvar.Get("r_norefresh", "0", 0);		r_fullbright = Cvar.Get("r_fullbright", "0", 0);		r_drawentities = Cvar.Get("r_drawentities", "1", 0);		r_drawworld = Cvar.Get("r_drawworld", "1", 0);		r_novis = Cvar.Get("r_novis", "0", 0);		r_nocull = Cvar.Get("r_nocull", "0", 0);		r_lerpmodels = Cvar.Get("r_lerpmodels", "1", 0);		r_speeds = Cvar.Get("r_speeds", "0", 0);		r_lightlevel = Cvar.Get("r_lightlevel", "1", 0);		gl_nosubimage = Cvar.Get("gl_nosubimage", "0", 0);		gl_allow_software = Cvar.Get("gl_allow_software", "0", 0);		gl_particle_min_size = Cvar.Get("gl_particle_min_size", "2", Globals.CVAR_ARCHIVE);		gl_particle_max_size = Cvar.Get("gl_particle_max_size", "40", Globals.CVAR_ARCHIVE);		gl_particle_size = Cvar.Get("gl_particle_size", "40", Globals.CVAR_ARCHIVE);		gl_particle_att_a = Cvar.Get("gl_particle_att_a", "0.01", Globals.CVAR_ARCHIVE);		gl_particle_att_b = Cvar.Get("gl_particle_att_b", "0.0", Globals.CVAR_ARCHIVE);		gl_particle_att_c = Cvar.Get("gl_particle_att_c", "0.01", Globals.CVAR_ARCHIVE);		gl_modulate = Cvar.Get("gl_modulate", "1.5", Globals.CVAR_ARCHIVE);		gl_log = Cvar.Get("gl_log", "0", 0);		gl_bitdepth = Cvar.Get("gl_bitdepth", "0", 0);		gl_mode = Cvar.Get("gl_mode", "1", Globals.CVAR_ARCHIVE);		gl_lightmap = Cvar.Get("gl_lightmap", "0", 0);		gl_shadows = Cvar.Get("gl_shadows", "0", Globals.CVAR_ARCHIVE);		gl_dynamic = Cvar.Get("gl_dynamic", "1", 0);		gl_nobind = Cvar.Get("gl_nobind", "0", 0);		gl_round_down = Cvar.Get("gl_round_down", "1", 0);		gl_picmip = Cvar.Get("gl_picmip", "0", 0);		gl_skymip = Cvar.Get("gl_skymip", "0", 0);		gl_showtris = Cvar.Get("gl_showtris", "0", 0);		gl_ztrick = Cvar.Get("gl_ztrick", "0", 0);		gl_finish = Cvar.Get("gl_finish", "0", Globals.CVAR_ARCHIVE);		gl_clear = Cvar.Get("gl_clear", "0", 0);		gl_cull = Cvar.Get("gl_cull", "1", 0);		gl_polyblend = Cvar.Get("gl_polyblend", "1", 0);		gl_flashblend = Cvar.Get("gl_flashblend", "0", 0);		gl_playermip = Cvar.Get("gl_playermip", "0", 0);		gl_monolightmap = Cvar.Get("gl_monolightmap", "0", 0);		gl_driver = Cvar.Get("gl_driver", "opengl32", Globals.CVAR_ARCHIVE);		gl_texturemode = Cvar.Get("gl_texturemode", "GL_LINEAR_MIPMAP_NEAREST", Globals.CVAR_ARCHIVE);		gl_texturealphamode = Cvar.Get("gl_texturealphamode", "default", Globals.CVAR_ARCHIVE);		gl_texturesolidmode = Cvar.Get("gl_texturesolidmode", "default", Globals.CVAR_ARCHIVE);		gl_lockpvs = Cvar.Get("gl_lockpvs", "0", 0);		gl_vertex_arrays = Cvar.Get("gl_vertex_arrays", "0", Globals.CVAR_ARCHIVE);		gl_ext_swapinterval = Cvar.Get("gl_ext_swapinterval", "1", Globals.CVAR_ARCHIVE);		gl_ext_palettedtexture = Cvar.Get("gl_ext_palettedtexture", "0", Globals.CVAR_ARCHIVE);		gl_ext_multitexture = Cvar.Get("gl_ext_multitexture", "1", Globals.CVAR_ARCHIVE);		gl_ext_pointparameters = Cvar.Get("gl_ext_pointparameters", "1", Globals.CVAR_ARCHIVE);		gl_ext_compiled_vertex_array = Cvar.Get("gl_ext_compiled_vertex_array", "1", Globals.CVAR_ARCHIVE);		gl_drawbuffer = Cvar.Get("gl_drawbuffer", "GL_BACK", 0);		gl_swapinterval = Cvar.Get("gl_swapinterval", "1", Globals.CVAR_ARCHIVE);		gl_saturatelighting = Cvar.Get("gl_saturatelighting", "0", 0);		gl_3dlabs_broken = Cvar.Get("gl_3dlabs_broken", "1", Globals.CVAR_ARCHIVE);		vid_fullscreen = Cvar.Get("vid_fullscreen", "0", Globals.CVAR_ARCHIVE);		vid_gamma = Cvar.Get("vid_gamma", "1.0", Globals.CVAR_ARCHIVE);		vid_ref = Cvar.Get("vid_ref", "jogl", Globals.CVAR_ARCHIVE);		Cmd.AddCommand("imagelist", new xcommand_t() {			public void execute() {				GL_ImageList_f();			}		});		Cmd.AddCommand("screenshot", new xcommand_t() {			public void execute() {				GL_ScreenShot_f();			}		});		Cmd.AddCommand("modellist", new xcommand_t() {			public void execute() {				Mod_Modellist_f();			}		});		Cmd.AddCommand("gl_strings", new xcommand_t() {			public void execute() {				GL_Strings_f();			}		});	}	/*	==================	R_SetMode	==================	*/	protected boolean R_SetMode() {		int err; //  enum rserr_t		boolean fullscreen;//		if (vid_fullscreen.modified && !gl_config.allow_cds) {//			VID.Printf(Defines.PRINT_ALL, "R_SetMode() - CDS not allowed with this driver\n");//			Cvar.SetValue("vid_fullscreen", (vid_fullscreen.value > 0.0f) ? 0.0f : 1.0f);//			vid_fullscreen.modified = false;//		}		fullscreen = (vid_fullscreen.value > 0.0f);		vid_fullscreen.modified = false;		gl_mode.modified = false;		Dimension dim = new Dimension(vid.width, vid.height);		if ((err = GLimp_SetMode(dim, (int) gl_mode.value, fullscreen)) == rserr_ok) {			gl_state.prev_mode = (int) gl_mode.value;		}		else {			if (err == rserr_invalid_fullscreen) {				Cvar.SetValue("vid_fullscreen", 0);				vid_fullscreen.modified = false;				VID.Printf(Defines.PRINT_ALL, "ref_gl::R_SetMode() - fullscreen unavailable in this mode\n");				if ((err = GLimp_SetMode(dim, (int) gl_mode.value, false)) == rserr_ok)					return true;			}			else if (err == rserr_invalid_mode) {				Cvar.SetValue("gl_mode", gl_state.prev_mode);				gl_mode.modified = false;				VID.Printf(Defines.PRINT_ALL, "ref_gl::R_SetMode() - invalid mode\n");			}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -