View Issue Details

IDProjectCategoryView StatusLast Update
0002374FSSCPuser interfacepublic2012-02-14 00:50
ReporterMjnMixael Assigned ToZacam  
PrioritynormalSeverityminorReproducibilityalways
Status resolvedResolutionfixed 
Product Version3.6.13 
Summary0002374: Weapon Tech Models Clipping
DescriptionPrimary and secondary weapon tech models clip the edge of the viewport.
Additional InformationIt would be nice to see it resolved with a View Pos and Zoom weapons.tbl options.

TagsNo tags attached.

Activities

2011-01-08 02:23

 

screen0078.zip (721,587 bytes)

Zacam

2012-01-31 18:13

administrator  

Mantis-2374.patch (8,809 bytes)   
Index: missionui/missionscreencommon.cpp
===================================================================
--- missionui/missionscreencommon.cpp	(revision 8411)
+++ missionui/missionscreencommon.cpp	(working copy)
@@ -31,6 +31,7 @@
 #include "ui/uidefs.h"
 #include "anim/animplay.h"
 #include "ship/ship.h"
+#include "weapon/weapon.h"
 #include "render/3d.h"
 #include "lighting/lighting.h"
 #include "network/multi.h"
@@ -1446,16 +1447,17 @@
 			bs = &pm->submodel[0];
 		}
 
-		vec3d weap_closeup;
+		vec3d weap_closeup = Weapon_info->closeup_pos;
 		float y_closeup;
+		float tm_zoom = Weapon_info->closeup_zoom;
 
 		//Find the center of teh submodel
 		weap_closeup.xyz.x = -(bs->min.xyz.z + (bs->max.xyz.z - bs->min.xyz.z)/2.0f);
 		weap_closeup.xyz.y = -(bs->min.xyz.y + (bs->max.xyz.y - bs->min.xyz.y)/2.0f);
 		//weap_closeup.xyz.z = (weap_closeup.xyz.x/tanf(zoom / 2.0f));
-		weap_closeup.xyz.z = -(bs->rad/tanf(zoom/2.0f));
+		weap_closeup.xyz.z = -(bs->rad/tanf(tm_zoom/2.0f));
 
-		y_closeup = -(weap_closeup.xyz.y/tanf(zoom / 2.0f));
+		y_closeup = -(weap_closeup.xyz.y/tanf(tm_zoom / 2.0f));
 		if(y_closeup < weap_closeup.xyz.z)
 		{
 			weap_closeup.xyz.z = y_closeup;
@@ -1464,7 +1466,7 @@
 		{
 			weap_closeup.xyz.z = bs->min.xyz.x;
 		}
-		g3_set_view_matrix( &weap_closeup, &vmd_identity_matrix, zoom);
+		g3_set_view_matrix( &weap_closeup, &vmd_identity_matrix, tm_zoom);
 
 		if (!Cmdline_nohtl) {
 			gr_set_proj_matrix(0.5f*Proj_fov, gr_screen.clip_aspect, 0.05f, 1000.0f);
@@ -1544,36 +1546,35 @@
 		rot_angles.b = 0.0f;
 		rot_angles.h = *rotation_buffer;
 		vm_rotate_matrix_by_angles(&model_orient, &rot_angles);
-	
+
 		gr_set_clip(x1, y1, x2, y2, resize);
 		vec3d wire_normal,ship_normal,plane_point;
 		// Clip the wireframe below the scanline
 		wire_normal.xyz.x = 0.0f;
 		wire_normal.xyz.y = 1.0f;
 		wire_normal.xyz.z = 0.0f;
-		
+
 		// Clip the ship above the scanline 
 		ship_normal.xyz.x = 0.0f;
 		ship_normal.xyz.y = -1.0f;
 		ship_normal.xyz.z = 0.0f;
 
 		polymodel *pm = model_get(model_id);
-		
+
 		//Make the clipping plane
 		float clip = -pm->rad*0.7f;
-		if(time < 1.5f && time >= 0.5f) // Phase 1 Move down
+		if (time < 1.5f && time >= 0.5f) // Phase 1 Move down
 			clip = pm->rad*(time-1.0f)*1.4f;
-		if(time >= 1.5f)
+
+		if (time >= 1.5f)
 			clip = pm->rad*(time-2.0f)*(-1.4f); // Phase 2 Move up
+
 		vm_vec_scale_sub(&plane_point,&vmd_zero_vector,&wire_normal,clip);
-		
+
 		g3_start_frame(1);
-		if(closeup_pos != NULL)
-		{
+		if ( (closeup_pos != NULL) && (vm_vec_mag(closeup_pos) != 0.0f) ) {
 			g3_set_view_matrix(closeup_pos, &vmd_identity_matrix, closeup_zoom);
-		}
-		else
-		{
+		} else {
 			vec3d pos = { { { 0.0f, 0.0f, -(pm->rad * 1.5f) } } };
 			g3_set_view_matrix(&pos, &vmd_identity_matrix, closeup_zoom);
 		}
@@ -1589,7 +1590,7 @@
 		float offset = size*0.5f*MIN(MAX(time-3.0f,0.0f),0.6f)*1.66667f;
 		if(time < 1.5f && time >= 0.5f)  // Clip the grid if were in phase 1
 			g3_start_user_clip_plane(&plane_point,&wire_normal);
-		
+
 		g3_start_instance_angles(&vmd_zero_vector,&view_angles);
 		if( time < 0.5f ) // Do the expanding scanline in phase 0
 		{
Index: missionui/missionweaponchoice.cpp
===================================================================
--- missionui/missionweaponchoice.cpp	(revision 8411)
+++ missionui/missionweaponchoice.cpp	(working copy)
@@ -2647,7 +2647,7 @@
 
 	if(Wl_icons[Selected_wl_class].model_index != -1) {
 		static float WeapSelectScreenWeapRot = 0.0f;
-		wl_icon_info *sel_icon					= &Wl_icons[Selected_wl_class];
+		wl_icon_info *sel_icon	= &Wl_icons[Selected_wl_class];
 		weapon_info *wip = &Weapon_info[Selected_wl_class];
 		draw_model_rotating(sel_icon->model_index,
 			weapon_ani_coords[0],
@@ -2655,8 +2655,8 @@
 			gr_screen.res == 0 ? 202 : 332,
 			gr_screen.res == 0 ? 185 : 260,
 			&WeapSelectScreenWeapRot,
-			NULL,
-			.65f,
+			&Weapon_info->closeup_pos,
+			Weapon_info->closeup_zoom * 0.65f,
 			REVOLUTION_RATE,
 			MR_IS_MISSILE | MR_LOCK_DETAIL | MR_AUTOCENTER | MR_NO_FOGGING,
 			true,
@@ -2714,7 +2714,7 @@
 				if(icon->model_index != -1)
 				{
 					//Draw the model
-					draw_model_icon(icon->model_index, MR_LOCK_DETAIL | MR_NO_FOGGING | MR_NO_LIGHTING, 0.4f, sx, sy, w, h, NULL);
+					draw_model_icon(icon->model_index, MR_LOCK_DETAIL | MR_NO_FOGGING | MR_NO_LIGHTING, Weapon_info->closeup_zoom / 2.5f, sx, sy, w, h, NULL);
 				}
 				else if(icon->laser_bmap != -1)
 				{
@@ -2959,7 +2959,7 @@
 		if(icon->model_index != -1)
 		{
 			//Draw the model
-			draw_model_icon(icon->model_index, MR_LOCK_DETAIL | MR_NO_FOGGING | MR_NO_LIGHTING, .5f / 1.25f, x, y, 56, 24, NULL);
+			draw_model_icon(icon->model_index, MR_LOCK_DETAIL | MR_NO_FOGGING | MR_NO_LIGHTING, Weapon_info->closeup_zoom * 0.4f, x, y, 56, 24, NULL);
 		}
 		else if(icon->laser_bmap != -1)
 		{
Index: weapon/weapon.h
===================================================================
--- weapon/weapon.h	(revision 8411)
+++ weapon/weapon.h	(working copy)
@@ -293,20 +293,23 @@
 	char	alt_name[NAME_LENGTH];			// alt name of this weapon
 	char	title[WEAPON_TITLE_LEN];		// official title of weapon (used by tooltips)
 	char	*desc;								// weapon's description (used by tooltips)
-	int	subtype;								// one of the WP_* macros above
-	int	render_type;						//	rendering method, laser, pof, avi
+	int		subtype;								// one of the WP_* macros above
+	int		render_type;						//	rendering method, laser, pof, avi
 	char	pofbitmap_name[MAX_FILENAME_LEN];	// Name of the pof representing this if POF, or bitmap filename if bitmap
-	int	model_num;							// modelnum of weapon -- -1 if no model
-	char external_model_name[MAX_FILENAME_LEN];					//the model rendered on the weapon points of a ship
-	int external_model_num;					//the model rendered on the weapon points of a ship
-	int hud_target_lod;						// LOD to use when rendering weapon model to the hud targetbox
-	int num_detail_levels;					// number of LODs defined in table (optional)
+	int		model_num;							// modelnum of weapon -- -1 if no model
+	char	external_model_name[MAX_FILENAME_LEN];					//the model rendered on the weapon points of a ship
+	int		external_model_num;					//the model rendered on the weapon points of a ship
+	int		hud_target_lod;						// LOD to use when rendering weapon model to the hud targetbox
+	int		num_detail_levels;					// number of LODs defined in table (optional)
 	int		detail_distance[MAX_MODEL_DETAIL_LEVELS]; // LOD distances define in table (optional)
 	char	*tech_desc;								// weapon's description (in tech database)
 	char	tech_anim_filename[MAX_FILENAME_LEN];	// weapon's tech room animation
 	char	tech_title[NAME_LENGTH];			// weapon's name (in tech database)
+	char	tech_model[MAX_FILENAME_LEN];		//Image to display in the techroom (TODO) or the weapon selection screen if the ANI isn't specified/missing
 
-	char	tech_model[MAX_FILENAME_LEN];		//Image to display in the techroom (TODO) or the weapon selection screen if the ANI isn't specified/missing
+	vec3d	closeup_pos;						// position for camera to set an offset for viewing the weapon model
+	float	closeup_zoom;						// zoom when using weapon model in closeup view in loadout selection
+
 	char hud_filename[MAX_FILENAME_LEN];			//Name of image to display on HUD in place of text
 	int hud_image_index;					//teh index of the image
 
Index: weapon/weapons.cpp
===================================================================
--- weapon/weapons.cpp	(revision 8411)
+++ weapon/weapons.cpp	(working copy)
@@ -805,6 +805,9 @@
 		wip->detail_distance[i] = -1;
 	}
 
+	vm_vec_zero(&wip->closeup_pos);
+	wip->closeup_zoom = 1.0f;
+
 	generic_anim_init(&wip->laser_bitmap);
 	generic_anim_init(&wip->laser_glow_bitmap);
 
@@ -1180,8 +1183,34 @@
 		stuff_malloc_string(&wip->tech_desc, F_MULTITEXT);
 	}
 
-	if(optional_string("$Tech Model:")) {
+	if (optional_string("$Tech Model:")) {
 		stuff_string(wip->tech_model, F_NAME, MAX_FILENAME_LEN);
+
+		if (optional_string("+Closeup_pos:")) {
+			stuff_vector(&wip->closeup_pos);
+		} else if (first_time && strlen(wip->tech_model)) {
+			// Calculate from the model file. This is inefficient, but whatever
+			int model_idx = model_load(wip->tech_model, 0, NULL);
+			polymodel *pm = model_get(model_idx);
+
+			// Go through, find best
+			wip->closeup_pos.xyz.z = fabsf(pm->maxs.xyz.z);
+
+			float temp = fabsf(pm->mins.xyz.z);
+			if (temp > wip->closeup_pos.xyz.z) {
+				wip->closeup_pos.xyz.z = temp;
+			}
+
+			// Now multiply by 2
+			wip->closeup_pos.xyz.z *= -2.0f;
+
+			// We're done with the model.
+			model_unload(model_idx);
+		}
+
+		if (optional_string("+Closeup_zoom:")) {
+			stuff_float(&wip->closeup_zoom);
+		}
 	}
 
 	// Weapon fadein effect, used when no ani is specified or weapon_select_3d is active
Mantis-2374.patch (8,809 bytes)   

Zacam

2012-01-31 18:14

administrator   ~0013210

Patch added for review.
Thank to Valathil for that last "d'uh" piece I was missing.

Zacam

2012-02-01 14:11

administrator   ~0013222

Fix committed to trunk@8414.

Zacam

2012-02-01 17:31

administrator   ~0013225

Fix committed to antipodes@8416.

Zacam

2012-02-14 00:49

administrator   ~0013310

Fix committed to fs2_open_3_6_14@8485.

Zacam

2012-02-14 00:50

administrator   ~0013311

Fix committed to fs2_open_3_6_14@8486.

Related Changesets

fs2open: trunk r8414

2012-02-01 09:11

Zacam


Ported: N/A

Details Diff
Fix for Mantis 0002374: Adds "+Closeup_pos:" and "+Closeup_zoom:" as entries following "$Tech Model:" for the weapons.tbl. For entries not using a dedicated $Tech Model, simply specify the $Tech Model as the same POF used in $Model to adjust Loadout Screen viewing position and zoom. Affected Issues
0002374
mod - /trunk/fs2_open/code/weapon/weapons.cpp Diff File
mod - /trunk/fs2_open/code/weapon/weapon.h Diff File
mod - /trunk/fs2_open/code/missionui/missionweaponchoice.cpp Diff File
mod - /trunk/fs2_open/code/missionui/missionscreencommon.cpp Diff File

fs2open: antipodes r8416

2012-02-01 12:31

Zacam


Ported: N/A

Details Diff
Fix for the Fix for Mantis 0002374: Had only updated the Effect 2 portion of the missionscreencommon. Don't I feel silly now. Did a little housekeeping while at it. Affected Issues
0002374
mod - /trunk/fs2_open/code/missionui/missionscreencommon.cpp Diff File
mod - /branches/antipodes/code/missionui/missionscreencommon.cpp Diff File

fs2open: fs2_open_3_6_14 r8485

2012-02-13 19:49

Zacam


Ported: N/A

Details Diff
Backport: Trunk r8414; Fix for Mantis 0002374: Adds "+Closeup_pos:" and "+Closeup_zoom:" as entries following "$Tech Model:" for the weapons.tbl. For entries not using a dedicated $Tech Model, simply specify the $Tech Model as the same POF used in $Model to adjust Loadout Screen viewing position and zoom. Affected Issues
0002374
mod - /branches/fs2_open_3_6_14/code/weapon/weapons.cpp Diff File
mod - /branches/fs2_open_3_6_14/code/weapon/weapon.h Diff File
mod - /branches/fs2_open_3_6_14/code/missionui/missionweaponchoice.cpp Diff File
mod - /branches/fs2_open_3_6_14/code/missionui/missionscreencommon.cpp Diff File

fs2open: fs2_open_3_6_14 r8486

2012-02-13 19:50

Zacam


Ported: N/A

Details Diff
Backport: Trunk r8416; Fix for the Fix for Mantis 0002374: Had only updated the Effect 2 portion of the missionscreencommon. Don't I feel silly now. Did a little housekeeping while at it. Affected Issues
0002374
mod - /branches/fs2_open_3_6_14/code/missionui/missionscreencommon.cpp Diff File

Issue History

Date Modified Username Field Change
2011-01-08 02:23 MjnMixael New Issue
2011-01-08 02:23 MjnMixael File Added: screen0078.zip
2011-01-08 02:25 Zacam Reproducibility have not tried => always
2011-01-08 02:25 Zacam Product Version Antipodes 8 => 3.6.13
2011-01-08 02:25 Zacam Additional Information Updated
2012-01-30 19:08 Zacam Assigned To => Zacam
2012-01-30 19:08 Zacam Status new => assigned
2012-01-31 10:33 Zacam File Added: Mantis-2374.patch
2012-01-31 15:02 Zacam File Deleted: Mantis-2374.patch
2012-01-31 18:13 Zacam File Added: Mantis-2374.patch
2012-01-31 18:14 Zacam Note Added: 0013210
2012-01-31 18:14 Zacam Status assigned => code review
2012-02-01 14:11 Zacam Changeset attached => fs2open trunk r8414
2012-02-01 14:11 Zacam Note Added: 0013222
2012-02-01 14:11 Zacam Status code review => resolved
2012-02-01 14:11 Zacam Resolution open => fixed
2012-02-01 17:31 Zacam Changeset attached => fs2open antipodes r8416
2012-02-01 17:31 Zacam Note Added: 0013225
2012-02-14 00:49 Zacam Changeset attached => fs2open fs2_open_3_6_14 r8485
2012-02-14 00:49 Zacam Note Added: 0013310
2012-02-14 00:50 Zacam Changeset attached => fs2open fs2_open_3_6_14 r8486
2012-02-14 00:50 Zacam Note Added: 0013311