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

📄 main.java

📁 Jake2是一个Java 3D游戏引擎.
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
			// first vertex			gl.glTexCoord2f(0.0625f, 0.0625f);			gl.glVertex3f(origin_x, origin_y, origin_z);			// second vertex			gl.glTexCoord2f(1.0625f, 0.0625f);			gl.glVertex3f(origin_x + up[0] * scale, origin_y + up[1] * scale, origin_z + up[2] * scale);			// third vertex			gl.glTexCoord2f(0.0625f, 1.0625f);			gl.glVertex3f(origin_x + right[0] * scale, origin_y + right[1] * scale, origin_z + right[2] * scale);		}		gl.glEnd();				gl.glDisable(GL11.GL_BLEND);		gl.glColor4f(1, 1, 1, 1);		gl.glDepthMask(true); // back to normal Z buffering		GL_TexEnv(GL11.GL_REPLACE);	}	/**	 * R_DrawParticles	 */	void R_DrawParticles() {		if (gl_ext_pointparameters.value != 0.0f && qglPointParameterfEXT) {			//gl.glEnableClientState(GL11.GL_VERTEX_ARRAY);			gl.glVertexPointer(3, 0, particle_t.vertexArray);			gl.glEnableClientState(GL11.GL_COLOR_ARRAY);			gl.glColorPointer(4, true, 0, particle_t.getColorAsByteBuffer());						gl.glDepthMask(false);			gl.glEnable(GL11.GL_BLEND);			gl.glDisable(GL11.GL_TEXTURE_2D);			gl.glPointSize(gl_particle_size.value);						gl.glDrawArrays(GL11.GL_POINTS, 0, r_newrefdef.num_particles);						gl.glDisableClientState(GL11.GL_COLOR_ARRAY);			//gl.glDisableClientState(GL11.GL_VERTEX_ARRAY);			gl.glDisable(GL11.GL_BLEND);			gl.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);			gl.glDepthMask(true);			gl.glEnable(GL11.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(GL11.GL_ALPHA_TEST);		gl.glEnable(GL11.GL_BLEND);		gl.glDisable(GL11.GL_DEPTH_TEST);		gl.glDisable(GL11.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(GL11.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(GL11.GL_BLEND);		gl.glEnable(GL11.GL_TEXTURE_2D);		gl.glEnable(GL11.GL_ALPHA_TEST);		gl.glColor4f(1, 1, 1, 1);	}	// =======================================================================	/**	 * SignbitsForPlane	 */	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;	}	/**	 * R_SetFrustum	 */	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]);		}	}	// =======================================================================	// stack variable	private final float[] temp = {0, 0, 0};	/**	 * R_SetupFrame	 */	void R_SetupFrame() {		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		mleaf_t leaf;		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				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				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 (int 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(GL11.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(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);			gl.glClearColor(1.0f, 0.0f, 0.5f, 0.5f);			gl.glDisable(GL11.GL_SCISSOR_TEST);		}	}	/**	 * MYgluPerspective	 * 	 * @param fovy	 * @param aspect	 * @param zNear	 * @param zFar	 */	void MYgluPerspective(double fovy, double aspect, double zNear, double zFar) {		double ymax = zNear * Math.tan(fovy * Math.PI / 360.0);		double ymin = -ymax;		double xmin = ymin * aspect;		double 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() {		//		// set up viewport		//		//int x = (int) Math.floor(r_newrefdef.x * vid.width / vid.width);		int x = r_newrefdef.x;		//int x2 = (int) Math.ceil((r_newrefdef.x + r_newrefdef.width) * vid.width / vid.width);		int x2 = r_newrefdef.x + r_newrefdef.width;		//int y = (int) Math.floor(vid.height - r_newrefdef.y * vid.height / vid.height);		int y = vid.height - r_newrefdef.y;		//int y2 = (int) Math.ceil(vid.height - (r_newrefdef.y + r_newrefdef.height) * vid.height / vid.height);		int y2 = vid.height - (r_newrefdef.y + r_newrefdef.height);		int w = x2 - x;		int h = y - y2;		gl.glViewport(x, y2, w, h);		//		// set up projection matrix		//		float screenaspect = (float) r_newrefdef.width / r_newrefdef.height;		gl.glMatrixMode(GL11.GL_PROJECTION);		gl.glLoadIdentity();		MYgluPerspective(r_newrefdef.fov_y, screenaspect, 4, 4096);		gl.glCullFace(GL11.GL_FRONT);		gl.glMatrixMode(GL11.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.glGetFloat(GL11.GL_MODELVIEW_MATRIX, r_world_matrix);		r_world_matrix.clear();		//		// set drawing parms		//		if (gl_cull.value != 0.0f)			gl.glEnable(GL11.GL_CULL_FACE);		else			gl.glDisable(GL11.GL_CULL_FACE);		gl.glDisable(GL11.GL_BLEND);		gl.glDisable(GL11.GL_ALPHA_TEST);		gl.glEnable(GL11.GL_DEPTH_TEST);	}	int trickframe = 0;	/**	 * R_Clear	 */	void R_Clear() {		if (gl_ztrick.value != 0.0f) {			if (gl_clear.value != 0.0f) {				gl.glClear(GL11.GL_COLOR_BUFFER_BIT);			}			trickframe++;			if ((trickframe & 1) != 0) {				gldepthmin = 0;				gldepthmax = 0.49999f;				gl.glDepthFunc(GL11.GL_LEQUAL);			}			else {				gldepthmin = 1;				gldepthmax = 0.5f;				gl.glDepthFunc(GL11.GL_GEQUAL);			}		}		else {			if (gl_clear.value != 0.0f)				gl.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);			else				gl.glClear(GL11.GL_DEPTH_BUFFER_BIT);			gldepthmin = 0;			gldepthmax = 1;			gl.glDepthFunc(GL11.GL_LEQUAL);		}		gl.glDepthRange(gldepthmin, gldepthmax);	}	/**	 * R_Flash	 */	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));		}	}	/**	 * R_SetGL2D	 */	void R_SetGL2D() {		// set 2D virtual screen size		gl.glViewport(0, 0, vid.width, vid.height);		gl.glMatrixMode(GL11.GL_PROJECTION);		gl.glLoadIdentity();		gl.glOrtho(0, vid.width, vid.height, 0, -99999, 99999);		gl.glMatrixMode(GL11.GL_MODELVIEW);		gl.glLoadIdentity();		gl.glDisable(GL11.GL_DEPTH_TEST);		gl.glDisable(GL11.GL_CULL_FACE);		gl.glDisable(GL11.GL_BLEND);		gl.glEnable(GL11.GL_ALPHA_TEST);		gl.glColor4f(1, 1, 1, 1);	}	// stack variable	private final float[] light = { 0, 0, 0 };	/**	 *	R_SetLightLevel	 */	void R_SetLightLevel() {		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, light);		// pick the greatest component, which should be the same		// as the mono value returned by software		if (light[0] > light[1]) {			if (light[0] > light[2])				r_lightlevel.value = 150 * light[0];			else				r_lightlevel.value = 150 * light[2];		}		else {			if (light[1] > light[2])				r_lightlevel.value = 150 * light[1];			else				r_lightlevel.value = 150 * light[2];		}	}	/**	 * R_RenderFrame	 */	protected void R_RenderFrame(refdef_t fd) {		R_RenderView(fd);		R_SetLightLevel();		R_SetGL2D();	}	/**	 * R_Register	 */	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", "3", Globals.CVAR_ARCHIVE); // 640x480		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", "1", 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", "0", 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", "lwjgl", 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();			}

⌨️ 快捷键说明

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